diff --git a/Sln.Iot.Common/Class1.cs b/Sln.Iot.Common/Class1.cs deleted file mode 100644 index 6644cec..0000000 --- a/Sln.Iot.Common/Class1.cs +++ /dev/null @@ -1,5 +0,0 @@ -namespace Sln.Iot.Common; - -public class Class1 -{ -} \ No newline at end of file diff --git a/Sln.Iot.Model/Class1.cs b/Sln.Iot.Model/Class1.cs deleted file mode 100644 index 636c8d9..0000000 --- a/Sln.Iot.Model/Class1.cs +++ /dev/null @@ -1,5 +0,0 @@ -namespace Sln.Iot.Model; - -public class Class1 -{ -} \ No newline at end of file diff --git a/Sln.Iot.Serial/SerialExtensions.cs b/Sln.Iot.Serial/SerialExtensions.cs deleted file mode 100644 index a7b13c8..0000000 --- a/Sln.Iot.Serial/SerialExtensions.cs +++ /dev/null @@ -1,232 +0,0 @@ -using Dm.util; -using Microsoft.Extensions.DependencyInjection; -using Newtonsoft.Json; -using RJCP.IO.Ports; -using Sln.Iot.Business; -using Sln.Iot.Common; -using Sln.Iot.Config; -using Sln.Iot.Model.dao; -using Sln.Iot.Model.dto; -using Sln.Iot.Repository.service; -using Sln.Iot.Serilog; -using SqlSugar; -using System; -using System.Linq.Expressions; -using System.Net.WebSockets; -using System.Text; -using TouchSocket.Core; -using TouchSocket.Sockets; - -namespace Sln.Iot.Serial -{ - public static class SerialExtensions - { - - public static void UseSerialPortExtensions(this IServiceProvider service) - { - IRecordIotEnvInstantService instantService = service.GetService(); - - IBaseAlarmRuleService _alarmRuleService = service.GetService(); - - IRecordAlarmDataService _alarmDataService = service.GetService(); - - WebSocketBusiness webSocket = service.GetService(); - - var logger = service.GetService(); - try - { - var appConfig = service.GetService(); - var tcpClient = service.GetService(); - var stringChange = service.GetService(); - - SerialPortStream serialPort = new SerialPortStream(appConfig.serialPortConfig.PortName); - serialPort.BaudRate = appConfig.serialPortConfig.BaudRate; - serialPort.Parity = Parity.None; - serialPort.StopBits = StopBits.One; - serialPort.DataBits = appConfig.serialPortConfig.DataBits; - serialPort.Handshake = Handshake.None; - - serialPort.DataReceived += (sender, e) => - { - lock (string.Empty) - { - try - { - byte[] receivedData = new byte[serialPort.BytesToRead]; - serialPort.Read(receivedData, 0, receivedData.Length); - - string str = Encoding.ASCII.GetString(receivedData); - logger.Info($"串口服务接收到数据:{str}"); - - List< RecordIotEnvInstant > iotEnvInstants = new List< RecordIotEnvInstant >(); - string[] monitorInfos = str.Split(';'); - - foreach ( string monitorInfo in monitorInfos ) - { - - if (monitorInfo.Length < 12) - { - continue; - } - logger.Info($"解析串口数据:{monitorInfo}"); - RecordIotEnvInstant iotEnvInstant = new RecordIotEnvInstant(); - string[] strs = monitorInfo.Replace(";","").Split('-'); - - iotEnvInstant.monitorId = strs[0]; - - if (strs[1] == "5" || strs[1] == "6") - { - iotEnvInstant.temperature = decimal.Parse(strs[2].Trim()); - } - if (strs[1] == "6") - { - iotEnvInstant.humidity = decimal.Parse(strs[3].Trim()); - } - if (strs[1] == "7") - { - iotEnvInstant.noise = decimal.Parse(strs[2].Trim()); - } - if (strs[1] == "8") - { - iotEnvInstant.illuminance = decimal.Parse(strs[2].Trim()); - } - - if (strs[1] == "10") - { - iotEnvInstant.vibrationSpeed = decimal.Parse(strs[2].Trim()); - iotEnvInstant.vibrationAcceleration = decimal.Parse(strs[3].Trim()); - iotEnvInstant.vibrationDisplacement = decimal.Parse(strs[4].Trim()); - iotEnvInstant.vibrationTemp = decimal.Parse(strs[5].Trim()); - } - iotEnvInstant.collectTime = DateTime.Now; - iotEnvInstant.recordTime = DateTime.Now; - iotEnvInstants.Add(iotEnvInstant); - - Thread.Sleep(200); - } - - - var inRes = instantService.SplitInsert(iotEnvInstants, out List insertIds); - - logger.Info($"物联网数据保存{(inRes ? "成功" : "失败")}"); - - ParamAlarmFilter(iotEnvInstants,_alarmRuleService,logger, webSocket,_alarmDataService); - } - catch (Exception ex) - { - logger.Info($"串口接收数据异常:{ex.Message}"); - } - } - }; - - serialPort.Open(); - - logger.Info($"串口服务加载启动成功"); - } - catch (Exception ex) - { - logger.Error($"串口服务加载异常:{ex.Message}"); - } - } - - private static void ParamAlarmFilter(List iotEnvInstants, IBaseAlarmRuleService _alarmRuleService, SerilogHelper _logger, WebSocketBusiness _webSocket,IRecordAlarmDataService _alarmDataService) - { - if (iotEnvInstants == null) - { - throw new ArgumentNullException(nameof(iotEnvInstants), "报警参数过滤异常,传入参数为空"); - } - - // 预编译比较委托(避免循环内重复编译) - static Func CreateComparer(int triggerRule) - { - ParameterExpression x = Expression.Parameter(typeof(decimal), "x"); - ParameterExpression y = Expression.Parameter(typeof(decimal), "y"); - BinaryExpression comparison = triggerRule == 0 - ? Expression.GreaterThan(x, y) - : Expression.LessThan(x, y); - return Expression.Lambda>(comparison, x, y).Compile(); - } - - var fieldAccessors = new Dictionary> - { - { 0, item => item.temperature }, - { 1, item => item.humidity }, - { 2, item => item.vibrationSpeed }, - { 3, item => item.vibrationDisplacement }, - { 4, item => item.vibrationAcceleration }, - { 5, item => item.vibrationTemp }, - { 6, item => item.noise }, - { 7, item => item.illuminance } - }; - - foreach (var item in iotEnvInstants) - { - var alarmRules = _alarmRuleService.Query(x => x.monitorId == item.monitorId); - - List ruleRes = new List(); - List alarmContents = new List(); - foreach (var rule in alarmRules) - { - decimal paramValue = fieldAccessors.TryGetValue(rule.monitorField, out var accessor) - ? accessor(item) - : 0; - - var comparer = CreateComparer(rule.triggerRule); - - if (comparer(paramValue, rule.triggerValue)) - { - var alarmId=SnowFlakeSingle.Instance.NextId(); - - rule.alarmId = alarmId; - ruleRes.Add(rule); - alarmContents.Add($"{item.monitorId}传感器数据在{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}触发{rule.ruleName}异常告警,告警规则:{(rule.triggerRule == 0 ? "大于" : "小于")},阈值:{rule.triggerValue},详细信息:{rule.cause}"); - - SaveAlarmData(new RecordAlarmData() - { - objid = alarmId, - monitorId = item.monitorId, - collectDeviceId = item.monitorId.substring(0,5), - triggerRule = rule.triggerRule, - monitorField = rule.monitorField, - alarmValue = paramValue, - collectTime = DateTime.Now, - - },_alarmDataService,_logger); - } - } - - MonitorAlarmDto monitorAlarmDto = new MonitorAlarmDto() - { - monitorId = item.monitorId, - isFlag = ruleRes.Count() > 0 ? 1 : 0, - deviceParam = item, - alarmRules = ruleRes, - alarmContents = alarmContents, - recordTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() - }; - string str = JsonConvert.SerializeObject(monitorAlarmDto); - _logger.Alarm($"传感器数据推送:{str}"); - - _webSocket.PushMsg(str); - } - } - - - private static void SaveAlarmData(RecordAlarmData alarmData,IRecordAlarmDataService _alarmDataService, SerilogHelper _logger) - { - try - { - var insert = _alarmDataService.Insert(alarmData); - - string str = JsonConvert.SerializeObject(alarmData); - - _logger.Info($"传感器:{alarmData.monitorId};告警数据:{str},保存{(insert ? "成功" : "失败")}"); - } - catch (Exception e) - { - _logger.Info($"传感器:{alarmData.monitorId};告警数据保存异常:{e.Message}"); - } - } - - } -} diff --git a/Sln.Iot.Serial/Sln.Iot.Serial.csproj b/Sln.Iot.Serial/Sln.Iot.Serial.csproj deleted file mode 100644 index dea2d33..0000000 --- a/Sln.Iot.Serial/Sln.Iot.Serial.csproj +++ /dev/null @@ -1,22 +0,0 @@ - - - - net6.0 - enable - enable - - - - - - - - - - - - - - - - diff --git a/Sln.Iot.Serilog/Class1.cs b/Sln.Iot.Serilog/Class1.cs deleted file mode 100644 index 4416261..0000000 --- a/Sln.Iot.Serilog/Class1.cs +++ /dev/null @@ -1,5 +0,0 @@ -namespace Sln.Iot.Serilog; - -public class Class1 -{ -} \ No newline at end of file diff --git a/Sln.Iot.sln b/Sln.Iot.sln index a491fd6..1d3561e 100644 --- a/Sln.Iot.sln +++ b/Sln.Iot.sln @@ -19,8 +19,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sln.Iot.Serilog", "Sln.Iot. EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sln.Iot.Socket", "Sln.Iot.Socket\Sln.Iot.Socket.csproj", "{5B7C6367-7B41-48A6-9A71-2F191CE14000}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sln.Iot.Serial", "Sln.Iot.Serial\Sln.Iot.Serial.csproj", "{A030CF57-DAA0-4662-B836-3CFC2CDCD9FE}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -59,10 +57,6 @@ Global {5B7C6367-7B41-48A6-9A71-2F191CE14000}.Debug|Any CPU.Build.0 = Debug|Any CPU {5B7C6367-7B41-48A6-9A71-2F191CE14000}.Release|Any CPU.ActiveCfg = Release|Any CPU {5B7C6367-7B41-48A6-9A71-2F191CE14000}.Release|Any CPU.Build.0 = Release|Any CPU - {A030CF57-DAA0-4662-B836-3CFC2CDCD9FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A030CF57-DAA0-4662-B836-3CFC2CDCD9FE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A030CF57-DAA0-4662-B836-3CFC2CDCD9FE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A030CF57-DAA0-4662-B836-3CFC2CDCD9FE}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Sln.Iot/Program.cs b/Sln.Iot/Program.cs index cd8b3fa..6a1af7c 100644 --- a/Sln.Iot/Program.cs +++ b/Sln.Iot/Program.cs @@ -7,10 +7,7 @@ using Sln.Iot.Config; using Sln.Iot.Repository; using Sln.Iot.Serilog; using Sln.Iot.Socket; -using Sln.Iot.Serial; using TouchSocket.Sockets; -using TouchSocket.Core; -using Fleck; namespace Sln.Iot { @@ -78,9 +75,6 @@ namespace Sln.Iot ); } }; - - ServiceProvider.UseSerialPortExtensions(); - await Task.Delay(-1); } diff --git a/Sln.Iot/Sln.Iot.csproj b/Sln.Iot/Sln.Iot.csproj index 2b5083d..ee5f903 100644 --- a/Sln.Iot/Sln.Iot.csproj +++ b/Sln.Iot/Sln.Iot.csproj @@ -14,7 +14,6 @@ -