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; -// } -// } -//}