Former-commit-id: 79b8ee474c30db9589d59f2211fdf7a9c75258ea
Former-commit-id: 9b62ffa23964c724f9a3307a76797c0a7fa44dd8
1.0
wanggang 4 years ago
parent 711936bc62
commit af33c70a53

@ -79,7 +79,9 @@ namespace IoT.Shared.Areas.IoTCenter.Controlls
var repo = scope.ServiceProvider.GetRequiredService<IRepository<IoTDevice>>();
var list = repo.ReadOnlyTable()
.Where(o => o.IoTGatewayId == parentId)
.Select(o => new { o.Id, o.Name })
.Select(o => new { o.Id,o.Name, o.DisplayName })
.ToList()
.Select(o=>new { o.Id,Name=o.DisplayName??o.Name})
.ToList();
return new JsonResult(new SelectList(list, "Id", "Name", selected));
}

@ -569,10 +569,11 @@ namespace IoTNode.DeviceServices.FBee
}
else if (clusterId == ClusterId.socket)
{
if (props.Keys.Contains(0x0000))
byte[] item;
if (props.TryGetValue(0x0000, out item))//总量
{
var tempBytes = new List<byte>();
tempBytes.AddRange(props[0x00]);
tempBytes.AddRange(item);
tempBytes.Add(0x00);
tempBytes.Add(0x00);
if (tempBytes.Count == 8)
@ -586,6 +587,20 @@ namespace IoTNode.DeviceServices.FBee
this.UpdateIoTData(device.Id, DataKeys.Electricity, value);
}
}
else
{
this._logger.LogError($"data length must be 8 but now is {tempBytes.Count}");
}
}
else if (props.TryGetValue(0x0301, out item))//总量乘数
{
var value = BitConverter.ToUInt16(item);
this.UpdateIoTData(device.Id, DataKeys.ElectricityMultiplier, value);
}
else if (props.TryGetValue(0x0302, out item))//总量除数
{
var value = BitConverter.ToUInt16(item);
this.UpdateIoTData(device.Id, DataKeys.ElectricityDivisor, value);
}
}
else if (clusterId == ClusterId.doorlock)
@ -726,7 +741,7 @@ namespace IoTNode.DeviceServices.FBee
}
}
else if (clusterId == ClusterId.ElectricityMeasurement)
{
{//505-605
var clusterIdValueX = clusterIdValue.ToString("x2");
var deviceName = device.Name;
var PropKey = props.First().Key.ToString("x2");
@ -734,39 +749,8 @@ namespace IoTNode.DeviceServices.FBee
var FbeeDeviceId = fbeeDeviceId.ToString("x2");
Console.WriteLine(deviceName);
byte[] item;
if (props.TryGetValue(0x0000, out item))//总量
{
var tempBytes = new List<byte>();
tempBytes.AddRange(item);
tempBytes.Add(0x00);
tempBytes.Add(0x00);
if (tempBytes.Count == 8)
{
var multiplier = this.GetIoTDataValue(device.Id, DataKeys.ElectricityMultiplier);
var divisor = this.GetIoTDataValue(device.Id, DataKeys.ElectricityDivisor);
if (!string.IsNullOrEmpty(multiplier) && !string.IsNullOrEmpty(divisor))
{
var electricity = BitConverter.ToInt64(tempBytes.ToArray());
var value = electricity * Convert.ToInt16(multiplier) / Convert.ToSingle(divisor);
this.UpdateIoTData(device.Id, DataKeys.Electricity, value);
}
}
else
{
this._logger.LogError($"data length must be 8 but now is {tempBytes.Count}");
}
}
else if (props.TryGetValue(0x0301, out item))//总量乘数
{
var value = BitConverter.ToUInt16(item);
this.UpdateIoTData(device.Id, DataKeys.ElectricityMultiplier, value);
}
else if (props.TryGetValue(0x0302, out item))//总量除数
{
var value = BitConverter.ToUInt16(item);
this.UpdateIoTData(device.Id, DataKeys.ElectricityDivisor, value);
}
else if (props.TryGetValue(0x0505, out item))//电压
if (props.TryGetValue(0x0505, out item))//电压
{
var value = BitConverter.ToUInt16(item);
}
@ -835,62 +819,6 @@ namespace IoTNode.DeviceServices.FBee
var FbeeDeviceId = fbeeDeviceId.ToString("x2");
Console.WriteLine(deviceName);
}
if (fbeeDeviceId == 0x0163)
{
//if (props.ContainsKey(0x400a))
//{
// var irdata = props[0x400a];
// if (irdata.Length == 10)
// {
// //var irVersion = BitConverter.ToString((props[0x400a].Skip(3).Take(6).ToArray())).Replace("-", "").ToLower();
// //if (!string.IsNullOrEmpty(irVersion))
// //{
// // this.UpdateIoTData(device.Id, DataKeys.IrVersion, irVersion);
// //}
// }
// else
// {
// var irtype = BitConverter.ToInt16(irdata.Skip(9).Take(2).ToArray());
// if (irtype == 0x0082)
// {
// var irDeviceType = irdata.Skip(11).First();
// if (irDeviceType == 0x01)
// {
// var keyCode = BitConverter.ToInt16(irdata.Skip(12).Take(2).ToArray());
// this.UpdateIoTData(device.Id, DataKeys.KeyPress, keyCode);
// }
// }
// }
//}
//else
//{
//}
}
else if (fbeeDeviceId == 0x0051)
{
foreach (var item in props)
{
if (item.Key == 0x0400)
{
Console.WriteLine(item.Value.ToInt());
}
else if (item.Key == 0x0400)//0x050b
{
var multiplier = this.GetIoTDataValue(device.Id, DataKeys.PowerMultiplier);
var divisor = this.GetIoTDataValue(device.Id, DataKeys.PowerDivisor);
if (!string.IsNullOrEmpty(multiplier) && !string.IsNullOrEmpty(divisor))
{
var power = BitConverter.ToUInt16(item.Value.ToArray());
var value = power * Convert.ToInt16(multiplier) / Convert.ToSingle(divisor);
this.UpdateIoTData(device.Id, DataKeys.Power, value);
}
}
}
//if (clusterId == ClusterId.SummationDivisor)
//{
// this.X8D0702(sn, device.Number);
//}
}
}
}
@ -1055,12 +983,9 @@ namespace IoTNode.DeviceServices.FBee
if (device != null)
{
var switchState = ms.ReadInt();
if(device.Name.Contains("电机"))
{
}
if (endpoint == 0x01)
{
//插座
this.UpdateIoTData(device.Id, DataKeys.PowerState, switchState);
}
else if(endpoint==0x0b)
@ -1075,7 +1000,15 @@ namespace IoTNode.DeviceServices.FBee
}
else if (endpoint == 0x10)
{
this.UpdateIoTData(device.Id, DataKeys.L1State, switchState);
//开关
if (device.Name.Contains("二路") || device.Name.Contains("三路"))
{
this.UpdateIoTData(device.Id, DataKeys.L1State, switchState);
}
else
{
this.UpdateIoTData(device.Id, DataKeys.PowerState, switchState);
}
}
else if (endpoint == 0x11)
{

@ -0,0 +1,64 @@
<template>
<div class="card device-component">
<div class="card-header">
<h3 class="card-title">
{{device.displayName}}
<i v-if="device.isOnline" class="text-success ion ion-ios-wifi"></i>
<i v-else class="text-danger ion ion-ios-wifi"></i>
</h3>
<div class="card-tools">
<span @click="visible = true" title="操作"><i class="ion ion-md-settings"></i></span>
</div>
</div>
<div class="card-body">
<div class="row">
<div class="col-4 align-self-center">
<img class="device-image" :src="device.ioTProduct.image" />
</div>
<div class="col-8 align-self-center">
<div class="row" style="line-height:28px;">
<span>
状态:
<span class="status">
{{status()}}
</span>
</span>
</div>
</div>
</div>
</div>
<a-modal v-model="visible" :title="device.displayName" :footer="null">
<img style="height:32px;" v-on:click="open()" src="/platform/images/on.svg" />
</a-modal>
</div>
</template>
<script>
({
props: ['device'],
data: function () {
return {
visible: false
}
},
computed: {
status: function () {
return getIoTDataValue(this.device, '状态') === '1' ? '开' : '关';
}
},
methods: {
open: function () {
var password = prompt("请输入密码开锁", '');
if (password && password !== '') {
this.execApi(this.device.number, '/Door/Open', 'password=' + password);
}
},
close: function () {
var password = prompt("请输入密码关锁", '');
if (password && password !== '') {
this.execApi(this.device.number, '/Door/Close', 'password=' + password);
}
}
}
});
</script>

@ -0,0 +1,43 @@
<template>
<div class="card device-component">
<div class="card-header">
<h3 class="card-title">
{{device.displayName}}
<i v-if="device.isOnline" class="text-success ion ion-ios-wifi"></i>
<i v-else class="text-danger ion ion-ios-wifi"></i>
</h3>
<div class="card-tools">
<span @click="visible = true" title="操作"><i class="ion ion-md-settings"></i></span>
</div>
</div>
<div class="card-body">
<div class="row">
<div class="col-4 align-self-center">
<img class="device-image" :src="device.ioTProduct.image" style="width:48px;" />
</div>
<div class="col-8 align-self-center">
<div class="row">
<span>版本:{{getIoTDataValue(device, '版本')}}</span>
</div>
<div class="row">
<span>设备:{{getIoTDataValue(device, '设备数量')}}</span>
</div>
</div>
</div>
</div>
<a-modal v-model="visible" :title="device.displayName" :footer="null">
<button style="height:32px;" class="btn btn-primary btn-sm" v-on:click="execApi(device.number,'/Gateway/X9d')">刷新设备</button>
<button style="height:32px;" class="btn btn-primary btn-sm" v-on:click="execApi(device.number,'/Gateway/X81')">查询网关</button>
</a-modal>
</div>
</template>
<script>
({
props: ['device'],
data: function () {
return {
visible: false
}
}
});
</script>

@ -0,0 +1,31 @@
<template>
<div class="card device-component">
<div class="card-header">
<h3 class="card-title">
{{device.displayName}}
<i v-if="device.isOnline" class="text-success ion ion-ios-wifi"></i>
<i v-else class="text-danger ion ion-ios-wifi"></i>
</h3>
</div>
<div class="card-body">
<div class="row">
<div class="col-4 align-self-center">
<img class="device-image" :src="device.ioTProduct.image" style="width:48px;" />
</div>
<div class="col-8 align-self-center">
<div class="row">
<span>温度:{{getIoTData(device, '温度')}}</span>
</div>
<div class="row">
<span>湿度:{{getIoTData(device, '湿度')}}</span>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
({
props: ['device']
});
</script>

@ -0,0 +1,47 @@
<template>
<div class="card device-component">
<div class="card-header">
<h3 class="card-title">
{{device.displayName}}
<i v-if="device.isOnline" class="text-success ion ion-ios-wifi"></i>
<i v-else class="text-danger ion ion-ios-wifi"></i>
</h3>
<div class="card-tools">
<span @click="visible = true" title="操作"><i class="ion ion-md-settings"></i></span>
</div>
</div>
<div class="card-body">
<div class="row">
<div class="col-4 align-self-center">
<img class="device-image" :src="device.ioTProduct.image" style="width:48px;" />
</div>
<div class="col-8 align-self-center">
<div class="row">
<span>
状态:{{status}}
</span>
</div>
</div>
</div>
</div>
<a-modal v-model="visible" :title="device.displayName" :footer="null">
<img style="height:32px;" v-if="status==='开'" v-on:click="execApi(device.number,'/Socket/Off')" src="/platform/images/on.svg" />
<img style="height:32px;" v-else v-on:click="execApi(device.number,'/Socket/On')" src="/platform/images/off.svg" />
</a-modal>
</div>
</template>
<script>
({
props: ['device'],
data: function () {
return {
visible: false
}
},
computed: {
status: function () {
return getIoTDataValue(this.device, '状态') === '1' ? '开' : '关';
}
}
});
</script>

@ -60,6 +60,13 @@ function addVueComponents(config) {
}
}
//获取设备数据
function getIoTData(device,name) {
var data = Enumerable.from(device.data).where(o => o.name === name).firstOrDefault();
if (data) {
return data['value'] + ' ' + data['unit'] + ' ' + data['description'];
}
return null;
}
function getIoTDataValue(device, name) {
var data = Enumerable.from(device.data).where(o => o.name === name).firstOrDefault();
if (data) {

@ -19,11 +19,15 @@ addVueComponents({
addVueComponents({
prefix: "/components/devices/",
list: [
'gateway',
'humiture',
'light',
'infrared',
'smoke',
'switch1',
'socket',
'curtain'
'curtain',
'door',
]
});

Loading…
Cancel
Save