diff --git a/projects/Application/Domain/IoTCenter/IoTDevice.cs b/projects/Application/Domain/IoTCenter/IoTDevice.cs
index 70c96aea..affd8fab 100644
--- a/projects/Application/Domain/IoTCenter/IoTDevice.cs
+++ b/projects/Application/Domain/IoTCenter/IoTDevice.cs
@@ -97,27 +97,5 @@ namespace Application.Domain.Entities
Timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds()
};
}
-
- //public IoTData AddorUpdateData(IoTData data)
- //{
- // var oldData = this.Data.FirstOrDefault(o => o.Key == data.Key);
- // if (oldData == null)
- // {
- // oldData = data;
- // this.Data.Add(data);
- // }
- // else
- // {
- // 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;
- //}
}
}
diff --git a/projects/IoTNode/DeviceServices/BaseDeviceService.cs b/projects/IoTNode/DeviceServices/BaseDeviceService.cs
index 8c3cc297..d28b282b 100644
--- a/projects/IoTNode/DeviceServices/BaseDeviceService.cs
+++ b/projects/IoTNode/DeviceServices/BaseDeviceService.cs
@@ -92,7 +92,8 @@ namespace IoTNode.DeviceServices
}
else
{
- entity.From(data);
+ //must add skipNull
+ entity.From(data,skipNull:true);
}
repo.SaveChanges();
}
diff --git a/projects/IoTNode/DeviceServices/Onvif/OnvifDeviceManagement.cs b/projects/IoTNode/DeviceServices/Onvif/OnvifDeviceManagement.cs
index 663ac494..cde55aa2 100644
--- a/projects/IoTNode/DeviceServices/Onvif/OnvifDeviceManagement.cs
+++ b/projects/IoTNode/DeviceServices/Onvif/OnvifDeviceManagement.cs
@@ -166,7 +166,7 @@ namespace IoTNode.DeviceServices.Onvif
return result;
}
- private string GetOnoce(string deviceUrl)
+ public string GetOnoce(string deviceUrl)
{
var message = @"
@@ -175,9 +175,18 @@ namespace IoTNode.DeviceServices.Onvif
";
var hc = this._httpClientFactory.CreateClient();
hc.DefaultRequestHeaders.Add("ContentType", $"application/soap+xml; charset=utf-8; action=\"{MessageTemplate.GetDeviceInformationAction}\"");
- var task = hc.PostAsync(deviceUrl, new StringContent(message));
- var result = task.Result.Headers.WwwAuthenticate;
- return Regex.Match(result.ToString(), "nonce=\"([^\"]+)\"").Groups[1].Value;
+ try
+ {
+ var task = hc.PostAsync(deviceUrl, new StringContent(message));
+ var result = task.Result.Headers.WwwAuthenticate;
+ return Regex.Match(result.ToString(), "nonce=\"([^\"]+)\"").Groups[1].Value;
+ }
+ catch (Exception ex)
+ {
+ ex.PrintStack();
+ return "";
+ }
+
}
}
}
\ No newline at end of file
diff --git a/projects/IoTNode/DeviceServices/Onvif/OnvifService.cs b/projects/IoTNode/DeviceServices/Onvif/OnvifService.cs
index af7fe1d5..ac7ab1e1 100644
--- a/projects/IoTNode/DeviceServices/Onvif/OnvifService.cs
+++ b/projects/IoTNode/DeviceServices/Onvif/OnvifService.cs
@@ -136,23 +136,25 @@ namespace IoTNode.DeviceServices.Onvif
IoTGatewayId = node.Id
};
deviceRepo.Add(device);
- deviceRepo.SaveChanges();
- var fileName = $"ffmpeg-{Helper.Instance.GetRunTime()}{(RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? ".exe" : "")}";
- var file = Path.Combine(this._env.WebRootPath, fileName);
- var pushValue = device.Data.FirstOrDefault(o => o.Name == "推流")?.Value ?? "是";
- this.UpdateData(deviceRepo, device, device.CreateData("Push", pushValue, IoTDataType.Data, IoTValueType.String, "推流"));
- this.UpdateData(deviceRepo, device, device.CreateData("Record", "否", IoTDataType.Data, IoTValueType.String, "录像"));
- this.UpdateData(deviceRepo, device, device.CreateData("ffmpeg.file", file, IoTDataType.Info, IoTValueType.String, "ffmpeg路径", hidden: true));
- this.UpdateData(deviceRepo, device, device.CreateData("ffmpeg.args", GetSetting("ffmpeg.args"), IoTDataType.Info, IoTValueType.String, "ffmpeg.args", hidden: true));
}
else
{
- if (device.Ip != ipCamera.Ip)
- {
- device.Ip = ipCamera.Ip;
- deviceRepo.SaveChanges();
- }
+ device.Ip = ipCamera.Ip;
}
+ deviceRepo.SaveChanges();
+ this.UpdateData(deviceRepo, device, device.CreateData("DeviceUrl", ipCamera.DeviceUrl, IoTDataType.Info, IoTValueType.String, "设备地址"));
+ this.UpdateData(deviceRepo, device, device.CreateData("PtzAddress", ipCamera.PTZAddress, IoTDataType.Info, IoTValueType.String, "云台地址"));
+ this.UpdateData(deviceRepo, device, device.CreateData("Ptz3DZoomSupport", ipCamera.Ptz3DZoomSupport ? "是" : "否", IoTDataType.Info, IoTValueType.String, "缩放支持"));
+
+ var fileName = $"ffmpeg-{Helper.Instance.GetRunTime()}{(RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? ".exe" : "")}";
+ var file = Path.Combine(this._env.WebRootPath, fileName);
+ var pushValue = device.Data.FirstOrDefault(o => o.Name == "推流")?.Value ?? "是";
+ this.UpdateData(deviceRepo, device, device.CreateData("Push", pushValue, IoTDataType.Data, IoTValueType.String, "推流"));
+ this.UpdateData(deviceRepo, device, device.CreateData("Record", "否", IoTDataType.Data, IoTValueType.String, "录像"));
+ this.UpdateData(deviceRepo, device, device.CreateData("ffmpeg.file", file, IoTDataType.Info, IoTValueType.String, "ffmpeg路径", hidden: true));
+ this.UpdateData(deviceRepo, device, device.CreateData("ffmpeg.args", GetSetting("ffmpeg.args"), IoTDataType.Info, IoTValueType.String, "ffmpeg.args", hidden: true));
+ deviceRepo.SaveChanges();
+
var profiles = this._onvifDeviceManagement.GetProfiles(ipCamera.DeviceUrl, ipCamera.MediaUrl);
var needAuth = false;
var hasAuth = false;
@@ -187,13 +189,13 @@ namespace IoTNode.DeviceServices.Onvif
var token = device.Data.FirstOrDefault(o => o.Key == "ProfileToken")?.Value;
if (string.IsNullOrEmpty(token))
{
- token = ipCamera.Profiles.Last().Token;
+ token = ipCamera.Profiles.First().Token;
}
else
{
if (!ipCamera.Profiles.Any(o => o.Token == token))
{
- token = ipCamera.Profiles.Last().Token;
+ token = ipCamera.Profiles.First().Token;
}
}
if (needAuth)
@@ -220,9 +222,6 @@ namespace IoTNode.DeviceServices.Onvif
}
this.UpdateData(deviceRepo, device, device.CreateData("NeedAuth", needAuth ? "是" : "否", IoTDataType.Info, IoTValueType.String, "需认证"));
this.UpdateData(deviceRepo, device, device.CreateData("HasAuth", hasAuth ? "是" : "否", IoTDataType.Info, IoTValueType.String, "已认证"));
- this.UpdateData(deviceRepo, device, device.CreateData("DeviceUrl", ipCamera.DeviceUrl, IoTDataType.Info, IoTValueType.String, "设备地址"));
- this.UpdateData(deviceRepo, device, device.CreateData("PtzAddress", ipCamera.PTZAddress, IoTDataType.Info, IoTValueType.String, "云台地址"));
- this.UpdateData(deviceRepo, device, device.CreateData("Ptz3DZoomSupport", ipCamera.Ptz3DZoomSupport ? "是" : "否", IoTDataType.Info, IoTValueType.String, "缩放支持"));
}
catch (Exception ex)
{
@@ -245,11 +244,11 @@ namespace IoTNode.DeviceServices.Onvif
{
var camera = cameras.FirstOrDefault(o => o.Number == key);
var remove = false;
- if (camera.Data.FirstOrDefault(o => o.Key == "Push").Value != "是")
+ if (camera.Data.Any(o => o.Key == "Push" && o.Value == "否"))
{
remove = true;
}
- if (camera.Data.FirstOrDefault(o => o.Key == "NeedAuth").Value == "是" && camera.Data.FirstOrDefault(o => o.Key == "HasAuth").Value == "否")
+ if (camera.Data.Any(o => o.Key == "NeedAuth" && o.Value == "是") && camera.Data.Any(o => o.Key == "HasAuth" && o.Value == "否"))
{
remove = true;
}
@@ -547,7 +546,8 @@ namespace IoTNode.DeviceServices.Onvif
if (!string.IsNullOrEmpty(ptzAddress))
{
var deviceUrl = camera.GetDataValue("DeviceUrl");
- RequestXml(ptzAddress, MessageTemplate.StopAction, String.Format(MessageTemplate.StopMessage, camera.GetDataValue("ProfileToken"), true, true), camera.UserName, camera.Password, GetOnoce(deviceUrl));
+ var onoce = (this._onvifDeviceManagement as OnvifDeviceManagement).GetOnoce(deviceUrl);
+ RequestXml(ptzAddress, MessageTemplate.StopAction, String.Format(MessageTemplate.StopMessage, camera.GetDataValue("ProfileToken"), true, true), camera.UserName, camera.Password, onoce);
}
}
}
@@ -561,7 +561,8 @@ namespace IoTNode.DeviceServices.Onvif
if (!string.IsNullOrEmpty(ptzAddress))
{
var deviceUrl = camera.GetDataValue("DeviceUrl");
- RequestXml(ptzAddress, MessageTemplate.ContinuousMoveAction, String.Format(MessageTemplate.ContinuousMoveMessage, camera.GetDataValue("ProfileToken"), zx, px, py), camera.UserName, camera.Password, GetOnoce(deviceUrl));
+ var onoce = (this._onvifDeviceManagement as OnvifDeviceManagement).GetOnoce(deviceUrl);
+ RequestXml(ptzAddress, MessageTemplate.ContinuousMoveAction, String.Format(MessageTemplate.ContinuousMoveMessage, camera.GetDataValue("ProfileToken"), zx, px, py), camera.UserName, camera.Password,onoce);
}
}
}
diff --git a/projects/IoTNode/Services/CacheEventHandler.cs b/projects/IoTNode/Services/CacheEventHandler.cs
deleted file mode 100644
index 5ec84a77..00000000
--- a/projects/IoTNode/Services/CacheEventHandler.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-//using Infrastructure.Events;
-//using Application.Domain.Entities;
-//using Microsoft.Extensions.Caching.Distributed;
-
-//namespace IoTNode.Services
-//{
-// public class CacheEventHandler :
-// IEventHander>,
-// IEventHander>,
-// IEventHander>
-// {
-// private readonly IDistributedCache _cache;
-
-// public CacheEventHandler(IDistributedCache cache)
-// {
-// this._cache = cache;
-// }
-
-// public void Handle(EntityInsertedEvent message)
-// {
-// this.Remove();
-// }
-
-// public void Handle(EntityUpdatedEvent message)
-// {
-// this.Remove();
-// }
-
-// public void Handle(EntityDeletedEvent message)
-// {
-// this.Remove();
-// }
-
-// private void Remove()
-// {
-// this._cache.Remove(CacheKey.SceneTiggerKey);
-// }
-// }
-//}
diff --git a/projects/IoTNode/Services/CachedSceneTiggerService.cs b/projects/IoTNode/Services/CachedSceneTiggerService.cs
deleted file mode 100644
index ef542de8..00000000
--- a/projects/IoTNode/Services/CachedSceneTiggerService.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-//using Infrastructure.Extensions;
-//using Application.Domain.Entities;
-//using Microsoft.Extensions.Caching.Distributed;
-//using System.Collections.Generic;
-
-//namespace IoTNode.Services
-//{
-// public class CachedSceneTiggerService : ISceneTiggerService
-// {
-// private readonly IDistributedCache _cache;
-// private readonly SceneTiggerService _sceneTiggerService;
-
-// public CachedSceneTiggerService(IDistributedCache cache, SceneTiggerService sceneTiggerService)
-// {
-// this._cache = cache;
-// this._sceneTiggerService = sceneTiggerService;
-// }
-
-// public IList GetSceneTiggers()
-// {
-// var sceneTiggers = this._cache.Get>(CacheKey.SceneTiggerKey);
-// if (sceneTiggers == null)
-// {
-// sceneTiggers = this._sceneTiggerService.GetSceneTiggers();
-// _cache.Set(CacheKey.SceneTiggerKey, sceneTiggers);
-// }
-// return sceneTiggers;
-// }
-// }
-//}