Former-commit-id: 7e65c97794210dff8bf289a9e3d1efd324433de5
TangShanKaiPing
wanggang 6 years ago
parent 79e6837571
commit 43b82827d4

@ -1,17 +1,14 @@
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link @GetClass("Home")" href="@Url.Action("Index","Home")">首页</a>
<a class="nav-link @GetClass("Index","Home")" href="@Url.Action("Index","Home")">首页</a>
</li>
</ul>
@functions{
public string GetClass(params string[] controllers)
public string GetClass(string action, string controller)
{
if (controllers.Select(o => o.ToLower()).Contains(this.ViewContext.RouteData.Values["controller"].ToString().ToLower()))
if (this.ViewContext.RouteData.Values["action"].ToString() == action &&
this.ViewContext.RouteData.Values["controller"].ToString() == controller)
{
if (controllers.Length > 1)
{
return "active open";
}
return "active";
}
return "";

@ -41,6 +41,12 @@
font-family: 'Font Awesome 5 Free';
content: "\f057";
}
/*Ö÷µ¼º½*/
.navbar-nav .nav-link.active {
background: mediumseagreen;
color: #fff!important;
border-radius: 5px;
}
/*.content-header2 {
overflow: hidden;
}

@ -208,7 +208,7 @@ namespace IoTCenter.Controllers
}
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.ToString("MM-dd")).Distinct().ToList();
}
}
var model = new

@ -202,8 +202,8 @@
</div>
</div>
</template>
<!--粉尘检测器-->
<template v-for="device in GetDevices('粉尘检测器')">
<!--PM2.5感应器-->
<template v-for="device in GetDevices('PM2.5感应器')">
<div class="col-md-3 col-xs-6">
<div class="box box-solid">
<div class="row">
@ -240,8 +240,8 @@
</div>
</div>
</div>
<!--红外感应器-->
<div class="col-md-3 col-xs-6" v-for="device in GetDevices('红外感应器')" :data-device-number="device.Number">
<!--人体感应器-->
<div class="col-md-3 col-xs-6" v-for="device in GetDevices('人体感应器')" :data-device-number="device.Number">
<div class="box box-solid">
<div class="row">
<div class="col-md-4 col-xs-4" style="text-align:center;">
@ -257,8 +257,8 @@
</div>
</div>
</div>
<!--烟雾感应器-->
<div class="col-md-3 col-xs-6" v-for="device in GetDevices('烟雾传感器')" :data-device-number="device.Number">
<!--烟雾报警器-->
<div class="col-md-3 col-xs-6" v-for="device in GetDevices('烟雾报警器')" :data-device-number="device.Number">
<div class="box box-solid">
<div class="row">
<div class="col-md-4 col-xs-4" style="text-align:center;">
@ -662,7 +662,7 @@
</div>
</div>
</div>
<div class="col-md-3 col-xs-6 control" v-for="device in GetDevices('窗帘')" :data-device-number="device.Number">
<div class="col-md-3 col-xs-6 control" v-for="device in GetDevices('窗帘电机')" :data-device-number="device.Number">
<div class="box box-solid">
<div class="box-header with-border">
<h3 class="box-title"><img src="/images/curtain.png" />{{device.DisplayName||device.Name}}</h3>

@ -183,13 +183,13 @@
</div>
</div>
<div class="row">
<span style="display:inline-block;position:absolute;right:20px;bottom:5px;white-space: nowrap;">湿度:{{GetDeviceDataValue(device.Number,'湿度','Value')}}{{ GetDeviceDataValue(device.Number,'度','Unit')}}</span>
<span style="display:inline-block;position:absolute;right:20px;bottom:5px;white-space: nowrap;">湿度:{{GetDeviceDataValue(device.Number,'湿度','Value')}}{{ GetDeviceDataValue(device.Number,'湿度','Unit')}}</span>
</div>
</div>
</div>
</template>
<!--粉尘检测器-->
<template v-for="device in GetDevices('粉尘检测器')">
<!--PM2.5感应器-->
<template v-for="device in GetDevices('PM2.5感应器')">
<div class="col-md-3 col-xs-6">
<div class="card">
<div class="row">
@ -226,8 +226,8 @@
</div>
</div>
</div>
<!--红外感应器-->
<div class="col-md-3 col-xs-6" v-for="device in GetDevices('红外感应器')" :data-device-number="device.Number">
<!--人体感应器-->
<div class="col-md-3 col-xs-6" v-for="device in GetDevices('人体感应器')" :data-device-number="device.Number">
<div class="card">
<div class="row">
<div class="col-md-4 col-xs-4" style="text-align:center;">
@ -243,8 +243,8 @@
</div>
</div>
</div>
<!--烟雾感应器-->
<div class="col-md-3 col-xs-6" v-for="device in GetDevices('烟雾传感器')" :data-device-number="device.Number">
<!--烟雾报警器-->
<div class="col-md-3 col-xs-6" v-for="device in GetDevices('烟雾报警器')" :data-device-number="device.Number">
<div class="card">
<div class="row">
<div class="col-md-4 col-xs-4" style="text-align:center;">
@ -677,7 +677,7 @@
</div>
</div>
</div>
<div class="col-md-3 col-xs-6 control" v-for="device in GetDevices('窗帘')" :data-device-number="device.Number">
<div class="col-md-3 col-xs-6 control" v-for="device in GetDevices('窗帘电机')" :data-device-number="device.Number">
<div class="card">
<div class="card-header">
<h3 class="card-title"><img src="/images/curtain.png" />{{device.DisplayName||device.Name}}</h3>

@ -25,7 +25,7 @@
</div>
<div class="card-tools">
<button>开</button>
<button v-if="model.Name.indexOf('窗帘')>=0">停</button>
<button v-if="model.Name.indexOf('窗帘电机')>=0">停</button>
<button>关</button>
</div>
</div>

Binary file not shown.

@ -505,7 +505,7 @@
</div>
</div>
</div>
<div class="row" v-for="device in GetDevices('粉尘检测器')" :data-device-number="device.Number">
<div class="row" v-for="device in GetDevices('PM2.5感应器')" :data-device-number="device.Number">
<div class="col-md-6 col-xs-6">
<div class="box box-solid">
<div class="row">
@ -591,7 +591,7 @@
</div>
</div>
</div>
<div class="col-md-6 col-xs-6" v-for="device in GetDevices('红外感应器')" :data-device-number="device.Number">
<div class="col-md-6 col-xs-6" v-for="device in GetDevices('人体感应器')" :data-device-number="device.Number">
<div class="box box-solid">
<div class="row">
<div class="col-md-4 col-xs-4">
@ -607,7 +607,7 @@
</div>
</div>
</div>
<div class="col-md-6 col-xs-6" v-for="device in GetDevices('烟雾传感器')" :data-device-number="device.Number">
<div class="col-md-6 col-xs-6" v-for="device in GetDevices('烟雾报警器')" :data-device-number="device.Number">
<div class="box box-solid">
<div class="row">
<div class="col-md-4 col-xs-4">
@ -625,7 +625,7 @@
</div>
</div>
</div>
<div class="col-md-3 col-xs-6 control" v-for="device in GetDevices('窗帘')" :data-device-number="device.Number">
<div class="col-md-3 col-xs-6 control" v-for="device in GetDevices('窗帘电机')" :data-device-number="device.Number">
<div class="box box-solid">
<div class="box-header with-border">
<h3 class="box-title"><img src="/images/curtain.png" style="height:16px;margin-right:10px;" />{{device.DisplayName||device.Name}}</h3>

@ -236,10 +236,10 @@
<img src="/images/person.png" style="width:48px;height:48px;margin:19px;" />
</div>
<div class="col-md-4 col-xs-4" style="height:86px;">
<img src="/images/warn.png" style="width:36px;height:36px;margin:32px 0 0 0;" v-if="GetData('红外感应器',null,'前门','状态','Value')==='警报'" />
<img src="/images/warn.png" style="width:36px;height:36px;margin:32px 0 0 0;" v-if="GetData('人体感应器',null,'前门','状态','Value')==='警报'" />
</div>
<div class="col-md-4 col-xs-4" style="height:86px;">
<span style="display:inline-block;position:absolute;right:20px;bottom:5px;white-space: nowrap;">前门人体:{{GetData('红外感应器',null,'前门','状态','Value') }}</span>
<span style="display:inline-block;position:absolute;right:20px;bottom:5px;white-space: nowrap;">前门人体:{{GetData('人体感应器',null,'前门','状态','Value') }}</span>
</div>
</div>
</div>
@ -251,10 +251,10 @@
<img src="/images/person.png" style="width:48px;height:48px;margin:19px;" />
</div>
<div class="col-md-4 col-xs-4" style="height:86px;">
<img src="/images/warn.png" style="width:36px;height:36px;margin:32px 0 0 0;" v-if="GetData('红外感应器',null,'后门','状态','Value')==='警报'" />
<img src="/images/warn.png" style="width:36px;height:36px;margin:32px 0 0 0;" v-if="GetData('人体感应器',null,'后门','状态','Value')==='警报'" />
</div>
<div class="col-md-4 col-xs-4" style="height:86px;">
<span style="display:inline-block;position:absolute;right:20px;bottom:5px;white-space: nowrap;">后门人体:{{GetData('红外感应器',null,'后门','状态','Value') }}</span>
<span style="display:inline-block;position:absolute;right:20px;bottom:5px;white-space: nowrap;">后门人体:{{GetData('人体感应器',null,'后门','状态','Value') }}</span>
</div>
</div>
</div>

@ -406,7 +406,7 @@ function init() {
},
GetChartDevices() {
return Enumerable.from(this.model.Devices)
.where(function (o) { return o.Name === '温湿度传感器' || o.Name === '粉尘检测器' || o.Name === '光强检测器' || o.Name === '智能插座'; })
.where(function (o) { return o.Name === '温湿度传感器' || o.Name === 'PM2.5感应器' || o.Name === '光强检测器' || o.Name === '智能插座'; })
.orderBy('o=>o.ProductId')
.toArray();
},

@ -321,7 +321,7 @@ function init() {
methods: {
HasBatchCommand() {
return this.model.Name === '调色灯'
|| this.model.Name.indexOf('窗帘') >= 0
|| this.model.Name.indexOf('窗帘电机') >= 0
|| this.model.Name.indexOf('开关') >= 0
|| this.model.Name.indexOf('插座') >= 0;
},

@ -174,8 +174,8 @@
</div>
</div>
</template>
<!--粉尘检测-->
<div class="col-50" v-for="device in GetDevices('粉尘检测器')">
<!--PM2.5感应-->
<div class="col-50" v-for="device in GetDevices('PM2.5感应器')">
<div class="card">
<div class="card-content card-content-padding">
<div class="row">
@ -210,8 +210,8 @@
</div>
</div>
</div>
<!--红外感应器-->
<div class="col-50" v-for="device in GetDevices('红外感应器')">
<!--人体感应器-->
<div class="col-50" v-for="device in GetDevices('人体感应器')">
<div class="card">
<div class="card-content card-content-padding">
<div class="row">
@ -227,8 +227,8 @@
</div>
</div>
</div>
<!--烟雾感应-->
<div class="col-50" v-for="device in GetDevices('烟雾传感器')">
<!--烟雾报警-->
<div class="col-50" v-for="device in GetDevices('烟雾报警器')">
<div class="card">
<div class="card-content card-content-padding">
<div class="row">
@ -570,7 +570,7 @@
</div>
</div>
</div>
<div class="col-50" v-for="device in GetDevices('窗帘')" :data-device-number="device.Number">
<div class="col-50" v-for="device in GetDevices('窗帘电机')" :data-device-number="device.Number">
<div class="card">
<div class="card-header">
<div><img :src="iotCenter+'/images/curtain.png'" /><label>{{device.DisplayName||device.Name}}</label></div>

@ -171,8 +171,8 @@
</div>
</div>
</template>
<!--粉尘检测-->
<div class="col-50" v-for="device in GetDevices('粉尘检测器')">
<!--PM2.5感应-->
<div class="col-50" v-for="device in GetDevices('PM2.5感应器')">
<div class="card">
<div class="card-content card-content-padding">
<div class="row">
@ -207,8 +207,8 @@
</div>
</div>
</div>
<!--红外感应器-->
<div class="col-50" v-for="device in GetDevices('红外感应器')">
<!--人体感应器-->
<div class="col-50" v-for="device in GetDevices('人体感应器')">
<div class="card">
<div class="card-content card-content-padding">
<div class="row">
@ -224,8 +224,8 @@
</div>
</div>
</div>
<!--烟雾感应-->
<div class="col-50" v-for="device in GetDevices('烟雾传感器')">
<!--烟雾报警-->
<div class="col-50" v-for="device in GetDevices('烟雾报警器')">
<div class="card">
<div class="card-content card-content-padding">
<div class="row">
@ -567,7 +567,7 @@
</div>
</div>
</div>
<div class="col-50" v-for="device in GetDevices('窗帘')" :data-device-number="device.Number">
<div class="col-50" v-for="device in GetDevices('窗帘电机')" :data-device-number="device.Number">
<div class="card">
<div class="card-header">
<div><img :src="iotCenter+'/images/curtain.png'" /><label>{{device.DisplayName||device.Name}}</label></div>

@ -6,7 +6,7 @@ using System;
namespace IoTNode.Controllers
{
[SwaggerTag("窗帘")]
[SwaggerTag("窗帘电机")]
public class CurtainController : SwitchController
{
internal readonly FBeeService _deviceService;

@ -4,7 +4,7 @@ using System;
namespace IoTNode.Controllers
{
[SwaggerTag("1路插座")]
[SwaggerTag("插座")]
public class SocketController : SwitchController
{
public SocketController(IServiceProvider applicationService, FBeeService deviceService) : base(applicationService, deviceService)

@ -13,10 +13,10 @@ namespace IoTNode.DeviceServices.FBee
List.Add(new DeviceId { RawDeviceId = 0x0051, Name = "智能插座", CategoryName = "电器", CategoryNumber = "20", Icon = "socket" });
List.Add(new DeviceId { RawDeviceId = 0x0106, Name = "光强检测器", CategoryName = "监测", CategoryNumber = "40", Icon = "light" });
List.Add(new DeviceId { RawDeviceId = 0x0163, Name = "红外转发器", CategoryName = "电器", CategoryNumber = "20", Icon = "control" });
List.Add(new DeviceId { RawDeviceId = 0x0202, Name = "窗帘", CategoryName = "电器", CategoryNumber = "20", Icon = "curtain" });
List.Add(new DeviceId { RawDeviceId = 0x0202, Name = "窗帘电机", CategoryName = "电器", CategoryNumber = "20", Icon = "curtain" });
List.Add(new DeviceId { RawDeviceId = 0x0210, Name = "调色灯", CategoryName = "照明", CategoryNumber = "30", Icon = "lamp" });
List.Add(new DeviceId { RawDeviceId = 0x0220, Name = "色暖灯", CategoryName = "照明", CategoryNumber = "30", Icon = "lamp" });
List.Add(new DeviceId { RawDeviceId = 0x0309, Name = "粉尘检测器", CategoryName = "监测", CategoryNumber = "40", Icon = "pm25" });
List.Add(new DeviceId { RawDeviceId = 0x0309, Name = "PM2.5感应器", CategoryName = "监测", CategoryNumber = "40", Icon = "pm25" });
List.Add(new DeviceId { RawDeviceId = 0x0302, Name = "温湿度传感器", CategoryName = "监测", CategoryNumber = "40", Icon = "humiture" });
List.Add(new DeviceId { RawDeviceId = 0x0402, Name = "报警器", CategoryName = "安防", CategoryNumber = "10", Icon = "alarm" });
}

@ -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

@ -115,7 +115,7 @@ namespace IoTNode.DeviceServices.Onvif
var category = categoryRepo.ReadOnlyTable().FirstOrDefault(o => o.Number == "10");
var productRepo = scope.ServiceProvider.GetService<IRepository<Product>>();
var product = this.UpdateProduct("ONVIF摄像头", productNumber, "/Onvif/", "10", "camera");
var product = this.UpdateProduct("摄像头", productNumber, "/Onvif/", "10", "camera");
var deviceNodeRepo = scope.ServiceProvider.GetService<IRepository<Node>>();
var node = deviceNodeRepo.ReadOnlyTable().FirstOrDefault();

Binary file not shown.

Binary file not shown.
Loading…
Cancel
Save