Former-commit-id: 132470d2917652517a0b61d6103895468941aec1
TangShanKaiPing
wanggang 6 years ago
parent 6267a7204d
commit 95446d4bc8

@ -80,9 +80,20 @@ namespace Application.Domain.Entities
return this.GetData(key)?.Value;
}
public Data CreateData(string key, object value, DeviceDataType type, string name, string unit = null, string description = null, bool hidden = false)
public Data CreateData(string key, object value, DeviceDataType type, string name, string unit = null, string description = null, bool hidden = false, long timestamp = 0)
{
return new Data { DeviceId = this.Id, Key = key, Value = Convert.ToString(value), Type = type, Name = name, Unit = unit, Description = description, Hidden = hidden };
return new Data
{
DeviceId = this.Id,
Key = key,
Value = Convert.ToString(value),
Type = type,
Name = name,
Unit = unit,
Description = description,
Hidden = hidden,
Timestamp = timestamp == 0 ? DateTimeOffset.Now.ToUnixTimeMilliseconds() : timestamp
};
}
public Data AddorUpdateData(Data data)
@ -94,10 +105,14 @@ namespace Application.Domain.Entities
}
else
{
oldData.Name = data.Name;
oldData.Value = data.Value;
oldData.Unit = data.Unit;
oldData.Description = data.Description;
if (oldData.Name != data.Name || oldData.Value != data.Value || oldData.Unit != data.Unit || oldData.Description != data.Description)
{
oldData.Name = data.Name;
oldData.Value = data.Value;
oldData.Unit = data.Unit;
oldData.Description = data.Description;
oldData.Timestamp = data.Timestamp;
}
}
return oldData;
}

@ -269,6 +269,7 @@ namespace IoTCenter.Controllers
var measurementName = "data";
var list = new List<object>();
var labels = new List<string>();
var hours = Convert.ToInt32(DateTime.Now.ToString("%z"));
using (var client = new InfluxClient(new Uri(url), usr, pwd))
{
var fileds = String.Join(',', device.Data.Where(o => o.Type == DeviceDataType.Int || o.Type == DeviceDataType.Float).Select(o => o.Key));
@ -284,14 +285,14 @@ namespace IoTCenter.Controllers
list.Add(new
{
label = data.Name,
data = rows != null ? rows.Where(o => o.Fields.ContainsKey(data.Key)).Select(o => o.GetField(data.Key)).ToList() : new List<object>(),
data = rows != null ? rows.Select(o => o.Fields.ContainsKey(data.Key) ? o.GetField(data.Key) : null).ToList() : new List<object>(),
backgroundColor = this.GetColor(data.Key),
fill = false
});
}
if (rows != null)
{
labels = rows.Select(o => o.Timestamp.Value).Select(o => o.ToString("MM-dd hh:mm")).Distinct().ToList();
labels = rows.Select(o => o.Timestamp.Value).Select(o => o.AddHours(hours).ToString("MM-dd HH:mm:ss")).ToList();
}
}
var model = new

@ -315,7 +315,7 @@ namespace IoTCenter.Services
await client.CreateDatabaseAsync(dbName);
var row = new DynamicInfluxRow
{
Timestamp = DateTime.UtcNow
Timestamp = DateTimeOffset.FromUnixTimeMilliseconds(data.Timestamp).DateTime
};
row.Fields.Add("DeviceNumber", device.Number);
row.Fields.Add("DeviceName", device.Name);

@ -17,12 +17,14 @@ function UpdateChart(deviceNumber) {
var number = canvas.id;
if (!deviceNumber || deviceNumber === number) {
var device = vm.GetDevice(number);
var time = time || '30d';
var time = time || '1d';
var url = iotCenter + '/App/GetChartData?time=' + time + '+&number=' + number + "&token=" + token + "&connectionId=" + connectionId;
axios.post(url, { crossDomain: true })
.then(function (response) {
var data = response.data;
UpdateChartInternal(canvas, device.DisplayName, data);
console.log('折线图更新成功');
toastr.success('折线图更新成功');
})
.catch(function (error) {
console.log(error);
@ -298,6 +300,9 @@ function onMessage(method, json, to, from) {
if (device) {
updateItem(device.Data, item);
toastr.info(device.DisplayName + '更新');
if ($('canvas#' + device.Number).length) {
UpdateChart(device.Number);
}
}
}
}

@ -406,6 +406,7 @@ namespace IoTNode.DeviceServices.FBee
{
try
{
var timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
using (var ms = new MemoryStream(data))
{
var responseType = ms.ReadByte();
@ -497,64 +498,74 @@ namespace IoTNode.DeviceServices.FBee
}
device.IsOnline = isOnline != 0x00;
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));
var dataList = new List<Data>();
device.AddorUpdateData(device.CreateData(Keys.DeviceId, deviceId, DeviceDataType.Int, Keys.DeviceId, hidden: true, timestamp: timestamp));
device.AddorUpdateData(device.CreateData(Keys.Address, address, DeviceDataType.String, Keys.Address, hidden: true, timestamp: timestamp));
device.AddorUpdateData(device.CreateData(Keys.EndPoint, endpoint, DeviceDataType.Int, Keys.EndPoint, hidden: true, timestamp: timestamp));
if (new int[] { 0x0002, 0x0009, 0x0081, 0x0202, 0x0220, 0x0051 }.Contains(deviceId))
{
if (deviceId == 0x202)
{
}
var state = device.CreateData(Keys.State, switchState == 0 ? "关" : (switchState == 1 ? "开" : "停"), DeviceDataType.String, "状态");
device.AddorUpdateData(state);
dataList.Add(state.To<EditDataModel>());
var state = device.CreateData(Keys.State, switchState == 0 ? "关" : (switchState == 1 ? "开" : "停"), DeviceDataType.String, "状态", timestamp: timestamp);
if (!device.Data.Any(o => o.Key == Keys.State))
{
device.AddorUpdateData(state);
dataList.Add(state);
}
}
var battery = ms.ReadByte();
device.AddorUpdateData(device.CreateData(Keys.Battery, battery, DeviceDataType.Int, Keys.Battery, hidden: true));
device.AddorUpdateData(device.CreateData(Keys.Battery, battery, DeviceDataType.Int, Keys.Battery, hidden: true, timestamp: timestamp));
var epCount = ms.ReadByte();
device.AddorUpdateData(device.CreateData(Keys.EndPointCount, battery, DeviceDataType.Int, Keys.EndPointCount, hidden: true));
device.AddorUpdateData(device.CreateData(Keys.EndPointCount, battery, DeviceDataType.Int, Keys.EndPointCount, hidden: true, timestamp: timestamp));
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);
var deviceData = device.CreateData(Keys.Light, light, DeviceDataType.Int, "光照度", "lux", desc, timestamp: timestamp);
if (!device.Data.Any(o => o.Key == Keys.Light))
{
device.AddorUpdateData(deviceData);
dataList.Add(deviceData);
}
}
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 data1 = device.CreateData(Keys.Temperature, temperature, DeviceDataType.Float, "温度", "℃", this.GetDescription(Keys.Temperature, temperature), timestamp: timestamp);
if (!device.Data.Any(o => o.Key == Keys.Temperature))
{
device.AddorUpdateData(data1);
dataList.Add(data1);
}
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);
var data2 = device.CreateData(Keys.Humidity, humidity, DeviceDataType.Float, "湿度", "RH%", this.GetDescription(Keys.Humidity, humidity), timestamp: timestamp);
if (!device.Data.Any(o => o.Key == Keys.Humidity))
{
device.AddorUpdateData(data2);
dataList.Add(data2);
}
}
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 data1 = device.CreateData(Keys.Warning, state == 1 ? "警报" : "正常", DeviceDataType.String, "状态", timestamp: timestamp);
if (!device.Data.Any(o => o.Key == Keys.Warning))
{
device.AddorUpdateData(data1);
dataList.Add(data1);
}
}
//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));
device.AddorUpdateData(device.CreateData(Keys.ZoneType, zoneType, DeviceDataType.String, Keys.ZoneType, hidden: true, timestamp: timestamp));
deviceRepo.SaveChanges();
var deviceDto = device.To<EditDeviceModel>();
this.SendToServer(Methods.EditDevice, deviceDto);
foreach (var item in device.Data.Where(o => !o.Hidden))
foreach (var item in dataList)
{
this.SendDataToServer(item);
}
@ -683,6 +694,7 @@ namespace IoTNode.DeviceServices.FBee
/// <param name="data"></param>
private void X07(string sn, byte[] data)
{
var timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
using (var ms = new MemoryStream(data))
{
var responseType = ms.ReadByte();
@ -701,20 +713,20 @@ namespace IoTNode.DeviceServices.FBee
{
if (endpoint == 0x10)
{
device.AddorUpdateData(device.CreateData(Keys.L1State, switchState == 0 ? "关" : "开", DeviceDataType.String, "L1状态"));
device.AddorUpdateData(device.CreateData(Keys.L1State, switchState == 0 ? "关" : "开", DeviceDataType.String, "L1状态", timestamp: timestamp));
}
else if (endpoint == 0x11)
{
device.AddorUpdateData(device.CreateData(Keys.L2State, switchState == 0 ? "关" : "开", DeviceDataType.String, "L2状态"));
device.AddorUpdateData(device.CreateData(Keys.L2State, switchState == 0 ? "关" : "开", DeviceDataType.String, "L2状态", timestamp: timestamp));
}
else if (endpoint == 0x12)
{
device.AddorUpdateData(device.CreateData(Keys.L3State, switchState == 0 ? "关" : "开", DeviceDataType.String, "L3状态"));
device.AddorUpdateData(device.CreateData(Keys.L3State, switchState == 0 ? "关" : "开", DeviceDataType.String, "L3状态", timestamp: timestamp));
}
}
else
{
device.AddorUpdateData(device.CreateData(Keys.State, switchState == 0 ? "关" : (switchState == 1 ? "开" : "停"), DeviceDataType.String, "状态"));
device.AddorUpdateData(device.CreateData(Keys.State, switchState == 0 ? "关" : (switchState == 1 ? "开" : "停"), DeviceDataType.String, "状态", timestamp: timestamp));
}
deviceRepo.SaveChanges();
foreach (var item in device.Data.Where(o => !o.Hidden))
@ -753,6 +765,7 @@ namespace IoTNode.DeviceServices.FBee
/// <param name="data"></param>
private void X08(string sn, byte[] data)
{
var timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
using (var ms = new MemoryStream(data))
{
var responseType = ms.ReadByte();
@ -765,7 +778,7 @@ namespace IoTNode.DeviceServices.FBee
var device = this.GetDeviceByAddress(deviceRepo, sn, address);
if (device != null)
{
device.AddorUpdateData(device.CreateData(Keys.Brightness, ms.ReadByte(), DeviceDataType.Int, "亮度"));
device.AddorUpdateData(device.CreateData(Keys.Brightness, ms.ReadByte(), DeviceDataType.Int, "亮度", timestamp: timestamp));
deviceRepo.SaveChanges();
this.SendDataToServer(device.Data.FirstOrDefault(o => o.Key == Keys.Brightness));
}
@ -798,6 +811,7 @@ namespace IoTNode.DeviceServices.FBee
/// <param name="data"></param>
private void X09(string sn, byte[] data)
{
var timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
using (var ms = new MemoryStream(data))
{
var responseType = ms.ReadByte();
@ -810,7 +824,7 @@ namespace IoTNode.DeviceServices.FBee
var device = this.GetDeviceByAddress(deviceRepo, sn, address);
if (device != null)
{
device.AddorUpdateData(device.CreateData(Keys.Hue, ms.ReadByte(), DeviceDataType.Int, "色调"));
device.AddorUpdateData(device.CreateData(Keys.Hue, ms.ReadByte(), DeviceDataType.Int, "色调", timestamp: timestamp));
deviceRepo.SaveChanges();
this.SendDataToServer(device.Data.FirstOrDefault(o => o.Key == Keys.Hue));
}
@ -829,6 +843,7 @@ namespace IoTNode.DeviceServices.FBee
/// <param name="data"></param>
private void X0A(string sn, byte[] data)
{
var timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
using (var ms = new MemoryStream(data))
{
var responseType = ms.ReadByte();
@ -841,7 +856,7 @@ namespace IoTNode.DeviceServices.FBee
var device = this.GetDeviceByAddress(deviceRepo, sn, address);
if (device != null)
{
device.AddorUpdateData(device.CreateData(Keys.Saturation, ms.ReadByte(), DeviceDataType.Int, "饱和度"));
device.AddorUpdateData(device.CreateData(Keys.Saturation, ms.ReadByte(), DeviceDataType.Int, "饱和度", timestamp: timestamp));
deviceRepo.SaveChanges();
this.SendDataToServer(device.Data.FirstOrDefault(o => o.Key == Keys.Saturation));
}
@ -928,6 +943,7 @@ namespace IoTNode.DeviceServices.FBee
/// <param name="data"></param>
private void X15(string sn, byte[] data)
{
var timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
using (var ms = new MemoryStream(data))
{
var responseType = ms.ReadByte();
@ -949,8 +965,8 @@ namespace IoTNode.DeviceServices.FBee
gateway.UserName = ms.ReadASIIString(20);
gateway.Password = ms.ReadASIIString(20);
gateway.AddorUpdateData(gateway.CreateData(Keys.Version, version, DeviceDataType.String, "版本"));
gateway.AddorUpdateData(gateway.CreateData(Keys.DeviceCount, ms.ReadByte(), DeviceDataType.Int, "设备数量"));
gateway.AddorUpdateData(gateway.CreateData(Keys.Version, version, DeviceDataType.String, "版本", timestamp: timestamp));
gateway.AddorUpdateData(gateway.CreateData(Keys.DeviceCount, ms.ReadByte(), DeviceDataType.Int, "设备数量", timestamp: timestamp));
gatewayRepo.SaveChanges();
this.SendDataToServer(gateway.Data.FirstOrDefault(o => o.Key == Keys.Version));
this.SendDataToServer(gateway.Data.FirstOrDefault(o => o.Key == Keys.DeviceCount));
@ -991,6 +1007,7 @@ namespace IoTNode.DeviceServices.FBee
/// <param name="data"></param>
private void X27(string sn, byte[] data)
{
var timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
using (var ms = new MemoryStream(data))
{
var responseType = ms.ReadByte();
@ -1003,7 +1020,7 @@ namespace IoTNode.DeviceServices.FBee
var device = this.GetDeviceByAddress(deviceRepo, sn, address);
if (device != null)
{
device.AddorUpdateData(device.CreateData(Keys.ColorTemperature, ms.ReadInt(), DeviceDataType.Int, "色温"));
device.AddorUpdateData(device.CreateData(Keys.ColorTemperature, ms.ReadInt(), DeviceDataType.Int, "色温", timestamp: timestamp));
deviceRepo.SaveChanges();
this.SendDataToServer(device.Data.FirstOrDefault(o => o.Key == Keys.ColorTemperature));
}
@ -1146,6 +1163,7 @@ namespace IoTNode.DeviceServices.FBee
/// <param name="data"></param>
private void X70(string sn, byte[] data)
{
var timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
using (var ms = new MemoryStream(data))
{
var responseType = ms.ReadByte();
@ -1222,7 +1240,7 @@ namespace IoTNode.DeviceServices.FBee
{
var light = BitConverter.ToInt16(props[0x0000]);
var desc = this.GetDescription(Keys.Light, light);
var deviceData = device.CreateData(Keys.Light, light, DeviceDataType.Int, "光照度", "lux", desc);
var deviceData = device.CreateData(Keys.Light, light, DeviceDataType.Int, "光照度", "lux", desc, timestamp: timestamp);
device.AddorUpdateData(deviceData);
var dataDto = deviceData.To<EditDataModel>();
dataList.Add(dataDto);
@ -1230,7 +1248,7 @@ namespace IoTNode.DeviceServices.FBee
else if (clusterId == ClusterId.alarm)
{
var state = BitConverter.ToInt16(props[0x0080]);
var data1 = device.CreateData(Keys.Warning, state == 1 ? "警报" : "正常", DeviceDataType.String, "状态");
var data1 = device.CreateData(Keys.Warning, state == 1 ? "警报" : "正常", DeviceDataType.String, "状态", timestamp: timestamp);
var dto1 = data1.To<EditDataModel>();
device.AddorUpdateData(data1);
dataList.Add(dto1);
@ -1247,8 +1265,8 @@ namespace IoTNode.DeviceServices.FBee
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³", this.GetDescription(Keys.PM25, pm2d5));
var data2 = device.CreateData(Keys.PM100, pm1d0, DeviceDataType.Int, "PM10", "μg/m³", this.GetDescription(Keys.PM100, pm1d0));
var data1 = device.CreateData(Keys.PM25, pm2d5, DeviceDataType.Int, "PM2.5", "μg/m³", this.GetDescription(Keys.PM25, pm2d5), timestamp: timestamp);
var data2 = device.CreateData(Keys.PM100, pm1d0, DeviceDataType.Int, "PM10", "μg/m³", this.GetDescription(Keys.PM100, pm1d0), timestamp: timestamp);
var data3 = device.CreateData(Keys.PM10, pm10, DeviceDataType.Int, "PM1.0", "μg/m³");
device.AddorUpdateData(data1);
device.AddorUpdateData(data2);
@ -1264,7 +1282,7 @@ namespace IoTNode.DeviceServices.FBee
{
var temperature = BitConverter.ToInt16(props[0x0000]) / 100f;
var desc = this.GetDescription(Keys.Temperature, temperature);
var data1 = device.CreateData(Keys.Temperature, temperature, DeviceDataType.Float, "温度", "℃", desc);
var data1 = device.CreateData(Keys.Temperature, temperature, DeviceDataType.Float, "温度", "℃", desc, timestamp: timestamp);
device.AddorUpdateData(data1);
var dto1 = data1.To<EditDataModel>();
dataList.Add(dto1);
@ -1273,14 +1291,14 @@ namespace IoTNode.DeviceServices.FBee
{
var humidity = BitConverter.ToInt16(props[0x0000]) / 100f;
var desc = this.GetDescription(Keys.Humidity, humidity);
var data1 = device.CreateData(Keys.Humidity, humidity, DeviceDataType.Float, "湿度", "RH%", desc);
var data1 = device.CreateData(Keys.Humidity, humidity, DeviceDataType.Float, "湿度", "RH%", desc, timestamp: timestamp);
device.AddorUpdateData(data1);
var dto1 = data1.To<EditDataModel>();
dataList.Add(dto1);
}
else if (clusterId == ClusterId.voltage)
{
var data1 = device.CreateData(Keys.Voltage, props[0x21][0] / 2f, DeviceDataType.Float, "电量", hidden: true);
var data1 = device.CreateData(Keys.Voltage, props[0x21][0] / 2f, DeviceDataType.Float, "电量", hidden: true, timestamp: timestamp);
device.AddorUpdateData(data1);
var dto1 = data1.To<EditDataModel>();
dataList.Add(dto1);
@ -1295,7 +1313,7 @@ namespace IoTNode.DeviceServices.FBee
tempBytes.Add(0x00);
var electricity = BitConverter.ToInt64(tempBytes.ToArray()) / 1000f;
var data1 = device.CreateData(Keys.Electricity, electricity, DeviceDataType.Float, "电量", "kWh");
var data1 = device.CreateData(Keys.Electricity, electricity, DeviceDataType.Float, "电量", "kWh", timestamp: timestamp);
device.AddorUpdateData(data1);
var dto1 = data1.To<EditDataModel>();
dataList.Add(dto1);
@ -1311,7 +1329,7 @@ namespace IoTNode.DeviceServices.FBee
var irVersion = BitConverter.ToString((props[0x400a].Skip(3).Take(6).ToArray())).Replace("-", "").ToLower();
if (!string.IsNullOrEmpty(irVersion))
{
var data1 = device.CreateData(Keys.Version, irVersion, DeviceDataType.String, "红外版本");
var data1 = device.CreateData(Keys.Version, irVersion, DeviceDataType.String, "红外版本", timestamp: timestamp);
device.AddorUpdateData(data1);
var dto1 = data1.To<EditDataModel>();
dataList.Add(dto1);
@ -1326,7 +1344,7 @@ namespace IoTNode.DeviceServices.FBee
if (irDeviceType == 0x01)
{
var keyCode = BitConverter.ToInt16(irdata.Skip(12).Take(2).ToArray());
var data1 = device.CreateData(Keys.KeyPress, keyCode, DeviceDataType.Int, "按键");
var data1 = device.CreateData(Keys.KeyPress, keyCode, DeviceDataType.Int, "按键", timestamp: timestamp);
device.AddorUpdateData(data1);
var dto1 = data1.To<EditDataModel>();
dataList.Add(dto1);

@ -34,7 +34,7 @@ namespace IoTNode
new EFConfigurationValue { Id = "server.urls", Value= "http://*:8002" },
new EFConfigurationValue { Id = "notify:enabled", Value= "true"},
new EFConfigurationValue { Id = "notify:host", Value= $"{host}:8011"},
new EFConfigurationValue { Id = "timer.seconds", Value="60"},
new EFConfigurationValue { Id = "timer.seconds", Value="600"},
new EFConfigurationValue { Id = "onvif.timer", Value="1"},
new EFConfigurationValue { Id = "onvif.speed", Value="0.2"},
new EFConfigurationValue { Id = "camera.usr", Value="admin"},

Loading…
Cancel
Save