diff --git a/Sln.Iot.Model/dao/BaseAlarmRule.cs b/Sln.Iot.Model/dao/BaseAlarmRule.cs
index 0117c5c..25506ee 100644
--- a/Sln.Iot.Model/dao/BaseAlarmRule.cs
+++ b/Sln.Iot.Model/dao/BaseAlarmRule.cs
@@ -57,5 +57,11 @@ namespace Sln.Iot.Model.dao
///
[SugarColumn(ColumnName = "cause")]
public string cause { get; set; }
+
+ ///
+ /// 告警记录ID,推送数据使用,ORM不用
+ ///
+ [SugarColumn(IsIgnore = true)]
+ public long alarmId { get; set; }
}
}
diff --git a/Sln.Iot.Model/dao/RecordAlarmData.cs b/Sln.Iot.Model/dao/RecordAlarmData.cs
new file mode 100644
index 0000000..8ecdd69
--- /dev/null
+++ b/Sln.Iot.Model/dao/RecordAlarmData.cs
@@ -0,0 +1,83 @@
+#region << 版 本 注 释 >>
+
+/*--------------------------------------------------------------------
+* 版权所有 (c) 2025 Wen JY 保留所有权利。
+* CLR版本:4.0.30319.42000
+* 机器名称:ThinkPad T14
+* 命名空间:Sln.Iot.Model.dao
+* 唯一标识:50695B31-9DE2-4EE5-A13D-D58B53CDEBBA
+*
+* 创建者:WenJY
+* 电子邮箱:
+* 创建时间:2025-06-05 10:38:09
+* 版本:V1.0.0
+* 描述:
+*
+*--------------------------------------------------------------------
+* 修改人:
+* 时间:
+* 修改说明:
+*
+* 版本:V1.0.0
+*--------------------------------------------------------------------*/
+
+#endregion << 版 本 注 释 >>
+
+using SqlSugar;
+
+namespace Sln.Iot.Model.dao;
+
+///
+///告警数据记录
+///
+[SugarTable("ems_record_alarm_data"), Tenant("tao_iot")]
+public class RecordAlarmData
+{
+
+ ///
+ /// 编号
+ ///
+ [SugarColumn(ColumnName = "obj_id", IsPrimaryKey = true)]
+ public long objid { get; set; }
+
+ ///
+ /// Desc:计量设备编号
+ /// Default:
+ /// Nullable:False
+ ///
+ [SugarColumn(IsPrimaryKey=true,ColumnName="monitor_id")]
+ public string monitorId {get;set;}
+
+ ///
+ /// Desc:采集设备编号
+ /// Default:
+ /// Nullable:True
+ ///
+ [SugarColumn(ColumnName="collect_device_id")]
+ public string collectDeviceId {get;set;}
+
+ ///
+ /// 触发规则(0大于 1小于)
+ ///
+ [SugarColumn(ColumnName = "alarm_type")]
+ public int triggerRule { get; set; }
+
+ ///
+ /// 监测字段(0温度,1湿度,2振动-速度(mm/s),3振动-位移(um),4振动-加速度(g),5振动-温度(℃),6-噪音,7-照度)
+ ///
+ [SugarColumn(ColumnName = "cause")]
+ public int monitorField { get;set; }
+
+ ///
+ /// 告警值
+ ///
+ [SugarColumn(ColumnName = "alarm_data")]
+ public decimal alarmValue { get;set; }
+
+ ///
+ /// 采集时间
+ ///
+ [SugarColumn(ColumnName="collect_time" )]
+ public DateTime? collectTime { get; set; }
+
+}
\ No newline at end of file
diff --git a/Sln.Iot.Model/dto/MonitorAlarmDto.cs b/Sln.Iot.Model/dto/MonitorAlarmDto.cs
index fa1dd05..26c62c8 100644
--- a/Sln.Iot.Model/dto/MonitorAlarmDto.cs
+++ b/Sln.Iot.Model/dto/MonitorAlarmDto.cs
@@ -19,7 +19,7 @@ namespace Sln.Iot.Model.dto
/// 是否报警:1-是;0-否
///
public int isFlag { get;set; }
-
+
///
/// 设备参数
///
diff --git a/Sln.Iot.Repository/Class1.cs b/Sln.Iot.Repository/Class1.cs
deleted file mode 100644
index e063971..0000000
--- a/Sln.Iot.Repository/Class1.cs
+++ /dev/null
@@ -1,5 +0,0 @@
-namespace Sln.Iot.Repository;
-
-public class Class1
-{
-}
\ No newline at end of file
diff --git a/Sln.Iot.Repository/service/IRecordAlarmDataService.cs b/Sln.Iot.Repository/service/IRecordAlarmDataService.cs
new file mode 100644
index 0000000..c51c11d
--- /dev/null
+++ b/Sln.Iot.Repository/service/IRecordAlarmDataService.cs
@@ -0,0 +1,9 @@
+using Sln.Iot.Model.dao;
+using Sln.Iot.Repository.service.@base;
+
+namespace Sln.Iot.Repository.service;
+
+public interface IRecordAlarmDataService:IBaseService
+{
+
+}
\ No newline at end of file
diff --git a/Sln.Iot.Repository/service/Impl/RecordAlarmDataServiceImpl.cs b/Sln.Iot.Repository/service/Impl/RecordAlarmDataServiceImpl.cs
new file mode 100644
index 0000000..ed77e54
--- /dev/null
+++ b/Sln.Iot.Repository/service/Impl/RecordAlarmDataServiceImpl.cs
@@ -0,0 +1,36 @@
+#region << 版 本 注 释 >>
+
+/*--------------------------------------------------------------------
+* 版权所有 (c) 2025 Wen JY 保留所有权利。
+* CLR版本:4.0.30319.42000
+* 机器名称:ThinkPad T14
+* 命名空间:Sln.Iot.Repository.service.Impl
+* 唯一标识:0838E02D-6FDB-4D1D-8A1F-B78B582EE185
+*
+* 创建者:WenJY
+* 电子邮箱:
+* 创建时间:2025-06-05 10:46:10
+* 版本:V1.0.0
+* 描述:
+*
+*--------------------------------------------------------------------
+* 修改人:
+* 时间:
+* 修改说明:
+*
+* 版本:V1.0.0
+*--------------------------------------------------------------------*/
+
+#endregion << 版 本 注 释 >>
+
+using Sln.Iot.Model.dao;
+using Sln.Iot.Repository.service.@base;
+
+namespace Sln.Iot.Repository.service.Impl;
+
+public class RecordAlarmDataServiceImpl: BaseServiceImpl, IRecordAlarmDataService
+{
+ public RecordAlarmDataServiceImpl(Repository rep) : base(rep)
+ {
+ }
+}
\ No newline at end of file
diff --git a/Sln.Iot.Serial/SerialExtensions.cs b/Sln.Iot.Serial/SerialExtensions.cs
index 1fca02f..a7b13c8 100644
--- a/Sln.Iot.Serial/SerialExtensions.cs
+++ b/Sln.Iot.Serial/SerialExtensions.cs
@@ -28,6 +28,8 @@ namespace Sln.Iot.Serial
IBaseAlarmRuleService _alarmRuleService = service.GetService();
+ IRecordAlarmDataService _alarmDataService = service.GetService();
+
WebSocketBusiness webSocket = service.GetService();
var logger = service.GetService();
@@ -108,7 +110,7 @@ namespace Sln.Iot.Serial
logger.Info($"物联网数据保存{(inRes ? "成功" : "失败")}");
- ParamAlarmFilter(iotEnvInstants,_alarmRuleService,logger, webSocket);
+ ParamAlarmFilter(iotEnvInstants,_alarmRuleService,logger, webSocket,_alarmDataService);
}
catch (Exception ex)
{
@@ -127,7 +129,7 @@ namespace Sln.Iot.Serial
}
}
- private static void ParamAlarmFilter(List iotEnvInstants, IBaseAlarmRuleService _alarmRuleService, SerilogHelper _logger, WebSocketBusiness _webSocket)
+ private static void ParamAlarmFilter(List iotEnvInstants, IBaseAlarmRuleService _alarmRuleService, SerilogHelper _logger, WebSocketBusiness _webSocket,IRecordAlarmDataService _alarmDataService)
{
if (iotEnvInstants == null)
{
@@ -170,11 +172,26 @@ namespace Sln.Iot.Serial
: 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);
}
}
@@ -194,5 +211,22 @@ namespace Sln.Iot.Serial
}
}
+
+ 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
index dae9b9b..dea2d33 100644
--- a/Sln.Iot.Serial/Sln.Iot.Serial.csproj
+++ b/Sln.Iot.Serial/Sln.Iot.Serial.csproj
@@ -19,10 +19,4 @@
-
-
- Always
-
-
-
diff --git a/Sln.Iot.Serial/libnserial.so.1 b/Sln.Iot.Serial/libnserial.so.1
deleted file mode 100644
index 5b93c2a..0000000
Binary files a/Sln.Iot.Serial/libnserial.so.1 and /dev/null differ
diff --git a/Sln.Iot/Sln.Iot.csproj b/Sln.Iot/Sln.Iot.csproj
index e953348..2b5083d 100644
--- a/Sln.Iot/Sln.Iot.csproj
+++ b/Sln.Iot/Sln.Iot.csproj
@@ -28,9 +28,6 @@
PreserveNewest
-
- Always
-
diff --git a/Sln.Iot/libnserial.so.1 b/Sln.Iot/libnserial.so.1
deleted file mode 100644
index 5b93c2a..0000000
Binary files a/Sln.Iot/libnserial.so.1 and /dev/null differ