|
|
|
@ -441,12 +441,12 @@ namespace IoTNode.DeviceServices.FBee
|
|
|
|
|
{
|
|
|
|
|
if (zoneType == 0x0028)
|
|
|
|
|
{
|
|
|
|
|
deviceName = "烟雾传感器";
|
|
|
|
|
deviceName = "烟雾报警器";
|
|
|
|
|
deviceIcon = "smoke";
|
|
|
|
|
}
|
|
|
|
|
else if (zoneType == 0x000d || zoneType == 0x00ff)
|
|
|
|
|
{
|
|
|
|
|
deviceName = "红外感应器";
|
|
|
|
|
deviceName = "人体感应器";
|
|
|
|
|
deviceIcon = "infrared";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -497,7 +497,7 @@ namespace IoTNode.DeviceServices.FBee
|
|
|
|
|
}
|
|
|
|
|
device.IsOnline = isOnline != 0x00;
|
|
|
|
|
|
|
|
|
|
var deviceIdData = device.Data.FirstOrDefault(o => o.Key == Keys.DeviceId);
|
|
|
|
|
var dataList = new List<EditDataModel>();
|
|
|
|
|
device.AddorUpdateData(device.CreateData(Keys.DeviceId, deviceId, DeviceDataType.Int, Keys.DeviceId, hidden: true));
|
|
|
|
|
device.AddorUpdateData(device.CreateData(Keys.Address, address, DeviceDataType.String, Keys.Address, hidden: true));
|
|
|
|
|
device.AddorUpdateData(device.CreateData(Keys.EndPoint, endpoint, DeviceDataType.Int, Keys.EndPoint, hidden: true));
|
|
|
|
@ -508,23 +508,55 @@ namespace IoTNode.DeviceServices.FBee
|
|
|
|
|
}
|
|
|
|
|
var state = device.CreateData(Keys.State, switchState == 0 ? "关" : (switchState == 1 ? "开" : "停"), DeviceDataType.String, "状态");
|
|
|
|
|
device.AddorUpdateData(state);
|
|
|
|
|
dataList.Add(state.To<EditDataModel>());
|
|
|
|
|
}
|
|
|
|
|
var battery = ms.ReadByte();
|
|
|
|
|
device.AddorUpdateData(device.CreateData(Keys.Battery, battery, DeviceDataType.Int, Keys.Battery, hidden: true));
|
|
|
|
|
var epCount = ms.ReadByte();
|
|
|
|
|
device.AddorUpdateData(device.CreateData(Keys.EndPointCount, battery, DeviceDataType.Int, Keys.EndPointCount, hidden: true));
|
|
|
|
|
|
|
|
|
|
if (device.Name == "光强检测器")
|
|
|
|
|
{
|
|
|
|
|
ms.Read(2);
|
|
|
|
|
var light = BitConverter.ToInt16(ms.Read(2));
|
|
|
|
|
var desc = this.GetDescription(Keys.Light, light);
|
|
|
|
|
var deviceData = device.CreateData(Keys.Light, light, DeviceDataType.Int, "光照度", "lux", desc);
|
|
|
|
|
device.AddorUpdateData(deviceData);
|
|
|
|
|
var dataDto = deviceData.To<EditDataModel>();
|
|
|
|
|
dataList.Add(dataDto);
|
|
|
|
|
}
|
|
|
|
|
else if (device.Name == "温湿度传感器")
|
|
|
|
|
{
|
|
|
|
|
var temperature = BitConverter.ToInt16(ms.Read(2)) / 100f;
|
|
|
|
|
var data1 = device.CreateData(Keys.Temperature, temperature, DeviceDataType.Float, "温度", "℃", this.GetDescription(Keys.Temperature, temperature));
|
|
|
|
|
device.AddorUpdateData(data1);
|
|
|
|
|
var dto1 = data1.To<EditDataModel>();
|
|
|
|
|
dataList.Add(dto1);
|
|
|
|
|
|
|
|
|
|
var humidity = BitConverter.ToInt16(ms.Read(2)) / 100f;
|
|
|
|
|
var data2 = device.CreateData(Keys.Humidity, humidity, DeviceDataType.Float, "湿度", "RH%", this.GetDescription(Keys.Humidity, humidity));
|
|
|
|
|
device.AddorUpdateData(data2);
|
|
|
|
|
var dto2 = data2.To<EditDataModel>();
|
|
|
|
|
dataList.Add(dto2);
|
|
|
|
|
}
|
|
|
|
|
else if (device.Name == "烟雾报警器" || device.Name == "人体感应器")
|
|
|
|
|
{
|
|
|
|
|
var state = BitConverter.ToInt16(ms.Read(2));
|
|
|
|
|
var data1 = device.CreateData(Keys.Warning, state == 1 ? "警报" : "正常", DeviceDataType.String, "状态");
|
|
|
|
|
device.AddorUpdateData(data1);
|
|
|
|
|
var dto1 = data1.To<EditDataModel>();
|
|
|
|
|
device.AddorUpdateData(data1);
|
|
|
|
|
dataList.Add(dto1);
|
|
|
|
|
}
|
|
|
|
|
var historyData = ms.ReadHexString(4);
|
|
|
|
|
device.AddorUpdateData(device.CreateData(Keys.Data, historyData, DeviceDataType.String, Keys.Data, hidden: true));
|
|
|
|
|
//var historyData = ms.ReadHexString((int)(ms.Length - ms.Position));
|
|
|
|
|
//device.AddorUpdateData(device.CreateData(Keys.Data, historyData, DeviceDataType.String, Keys.Data, hidden: true));
|
|
|
|
|
device.AddorUpdateData(device.CreateData(Keys.ZoneType, zoneType, DeviceDataType.String, Keys.ZoneType, hidden: true));
|
|
|
|
|
deviceRepo.SaveChanges();
|
|
|
|
|
var deviceDto = device.To<EditDeviceModel>();
|
|
|
|
|
this.SendToServer(Methods.EditDevice, deviceDto);
|
|
|
|
|
if (new int[] { 0x0002, 0x0009, 0x0081, 0x0202, 0x0220, 0x0051 }.Contains(deviceId))
|
|
|
|
|
foreach (var item in device.Data.Where(o => !o.Hidden))
|
|
|
|
|
{
|
|
|
|
|
this.SendDataToServer(device.Data.FirstOrDefault(o => o.Key == Keys.State));
|
|
|
|
|
this.SendDataToServer(item);
|
|
|
|
|
}
|
|
|
|
|
this.UpdateStatus(device);
|
|
|
|
|
}
|
|
|
|
@ -559,7 +591,7 @@ namespace IoTNode.DeviceServices.FBee
|
|
|
|
|
{
|
|
|
|
|
return "/Switch3/";
|
|
|
|
|
}
|
|
|
|
|
else if (deviceName == "窗帘")
|
|
|
|
|
else if (deviceName == "窗帘电机")
|
|
|
|
|
{
|
|
|
|
|
return "/Curtain/";
|
|
|
|
|
}
|
|
|
|
@ -1181,7 +1213,6 @@ namespace IoTNode.DeviceServices.FBee
|
|
|
|
|
if (status == 0x00)//离网
|
|
|
|
|
{
|
|
|
|
|
deviceRepo.Delete(device);
|
|
|
|
|
deviceRepo.Delete(device);
|
|
|
|
|
}
|
|
|
|
|
else if (status == 0x03)//入网
|
|
|
|
|
{
|
|
|
|
@ -1190,7 +1221,7 @@ namespace IoTNode.DeviceServices.FBee
|
|
|
|
|
else if (clusterId == ClusterId.light)
|
|
|
|
|
{
|
|
|
|
|
var light = BitConverter.ToInt16(props[0x0000]);
|
|
|
|
|
var desc = light < 300 ? "低" : (light > 500 ? "高" : "适中");
|
|
|
|
|
var desc = this.GetDescription(Keys.Light, light);
|
|
|
|
|
var deviceData = device.CreateData(Keys.Light, light, DeviceDataType.Int, "光照度", "lux", desc);
|
|
|
|
|
device.AddorUpdateData(deviceData);
|
|
|
|
|
var dataDto = deviceData.To<EditDataModel>();
|
|
|
|
@ -1215,8 +1246,9 @@ namespace IoTNode.DeviceServices.FBee
|
|
|
|
|
var pm2d5 = BitConverter.ToInt16(props[0x0000]);
|
|
|
|
|
var pm1d0 = BitConverter.ToInt16(props[0x0002]);
|
|
|
|
|
var pm10 = BitConverter.ToInt16(props[0x0001]);
|
|
|
|
|
var data1 = device.CreateData(Keys.PM25, pm2d5, DeviceDataType.Int, "PM2.5", "μg/m³", pm2d5 <= 35 ? "优" : (pm2d5 < 75 ? "良" : "污染"));
|
|
|
|
|
var data2 = device.CreateData(Keys.PM100, pm1d0, DeviceDataType.Int, "PM10", "μg/m³", pm10 <= 50 ? "优" : (pm10 < 75 ? "100" : "污染"));
|
|
|
|
|
|
|
|
|
|
var data1 = device.CreateData(Keys.PM25, pm2d5, DeviceDataType.Int, "PM2.5", "μg/m³", this.GetDescription(Keys.PM25, pm2d5));
|
|
|
|
|
var data2 = device.CreateData(Keys.PM100, pm1d0, DeviceDataType.Int, "PM10", "μg/m³", this.GetDescription(Keys.PM100, pm1d0));
|
|
|
|
|
var data3 = device.CreateData(Keys.PM10, pm10, DeviceDataType.Int, "PM1.0", "μg/m³");
|
|
|
|
|
device.AddorUpdateData(data1);
|
|
|
|
|
device.AddorUpdateData(data2);
|
|
|
|
@ -1231,7 +1263,7 @@ namespace IoTNode.DeviceServices.FBee
|
|
|
|
|
else if (clusterId == ClusterId.temperature)
|
|
|
|
|
{
|
|
|
|
|
var temperature = BitConverter.ToInt16(props[0x0000]) / 100f;
|
|
|
|
|
var desc = temperature < 16 ? "低" : (temperature > 28 ? "高" : "适中");
|
|
|
|
|
var desc = this.GetDescription(Keys.Temperature, temperature);
|
|
|
|
|
var data1 = device.CreateData(Keys.Temperature, temperature, DeviceDataType.Float, "温度", "℃", desc);
|
|
|
|
|
device.AddorUpdateData(data1);
|
|
|
|
|
var dto1 = data1.To<EditDataModel>();
|
|
|
|
@ -1240,7 +1272,7 @@ namespace IoTNode.DeviceServices.FBee
|
|
|
|
|
else if (clusterId == ClusterId.humidity)
|
|
|
|
|
{
|
|
|
|
|
var humidity = BitConverter.ToInt16(props[0x0000]) / 100f;
|
|
|
|
|
var desc = humidity < 30 ? "低" : (humidity > 80 ? "高" : "适中");
|
|
|
|
|
var desc = this.GetDescription(Keys.Humidity, humidity);
|
|
|
|
|
var data1 = device.CreateData(Keys.Humidity, humidity, DeviceDataType.Float, "湿度", "RH%", desc);
|
|
|
|
|
device.AddorUpdateData(data1);
|
|
|
|
|
var dto1 = data1.To<EditDataModel>();
|
|
|
|
@ -1320,6 +1352,36 @@ namespace IoTNode.DeviceServices.FBee
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private string GetDescription(string key, short value)
|
|
|
|
|
{
|
|
|
|
|
if (key == Keys.Light)
|
|
|
|
|
{
|
|
|
|
|
return value < 300 ? "低" : (value > 500 ? "高" : "适中");
|
|
|
|
|
}
|
|
|
|
|
else if (key == Keys.PM25)
|
|
|
|
|
{
|
|
|
|
|
return value <= 35 ? "优" : (value < 75 ? "良" : "污染");
|
|
|
|
|
}
|
|
|
|
|
else if (key == Keys.PM100)
|
|
|
|
|
{
|
|
|
|
|
return value <= 50 ? "优" : (value < 75 ? "100" : "污染");
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private string GetDescription(string key, float value)
|
|
|
|
|
{
|
|
|
|
|
if (key == Keys.Temperature)
|
|
|
|
|
{
|
|
|
|
|
return value < 16 ? "低" : (value > 28 ? "高" : "适中"); ;
|
|
|
|
|
}
|
|
|
|
|
else if (key == Keys.PM25)
|
|
|
|
|
{
|
|
|
|
|
return value < 30 ? "低" : (value > 80 ? "高" : "适中"); ;
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//0xb1
|
|
|
|
|
//0xb2
|
|
|
|
|
//0xc2
|
|
|
|
|