Browse Source

报警数据没有按照 设置间隔推送

siked 11 months ago
parent
commit
f6ca6ca836

+ 21 - 2
MqttServer/V3MqttHandle.go

@@ -237,10 +237,29 @@ func AsyncFuncV3(r_Device *Device.Device, Ms_project Ms2m_Project, msg []byte) {
 				}
 			}
 
-			// 报警数据没有按照两分钟间隔推送
+			// 报警数据没有按照 设置间隔推送  (!!! 临时解决问题)
 			if Warning_r.T_tp == 1 || Warning_r.T_tp == 2 || Warning_r.T_tp == 4 || Warning_r.T_tp == 5 {
+				DeviceParameter_r, is := Device.Read_DeviceParameter(r_Device.T_sn)
+				if !is {
+					logs.Println(r_Device.T_sn + " 没有设备参数,跳过")
+					continue
+				}
+				Warningr := Warning.Read_T_snT_idT_tp(Warning_r.T_sn, Warning_r.T_id, Warning_r.T_tp)
+				if Warningr.Id == 0 {
+					Warningr.T_Ut = time.Now()
+				}
+
+				// 计算时间差
+				duration := time.Now().Sub(Warningr.T_Ut)
+
+				// 将时间差表示为秒
+				seconds := int(duration.Seconds())
+
+				if seconds < (DeviceParameter_r.T_outA - 3) {
+					logs.Println(r_Device.T_sn+" 没有达到设置报警间隔,跳过,间隔:", DeviceParameter_r.T_outA, " 时间差", seconds)
+					continue
+				}
 
-				continue
 			}
 			//tp	报警类型
 			// 1	温度超上限报警

+ 56 - 0
Plugins/ContinuousPushOfOfflineDeviceWarning.go

@@ -0,0 +1,56 @@
+package Plugins
+
+import (
+	"Cold_mqtt/MqttServer/WarningNotice"
+	"Cold_mqtt/lib"
+	"Cold_mqtt/logs"
+	"Cold_mqtt/models/Device"
+	"Cold_mqtt/models/Warning"
+	"time"
+)
+
+// 设备离线报警连续推送  冰箱采集器(wifi版)	BX100W
+func ContinuousPushOfOfflineDeviceWarning() {
+ContinuousPushOfOfflineDeviceWarningTOGO:
+	DeviceList := Device.Read_获取BX100W离线设备()
+	logs.Println("======设备离线报警连续推送========")
+	for _, r_Device := range DeviceList {
+		DeviceParameter_r, is := Device.Read_DeviceParameter(r_Device.T_sn)
+		if !is {
+			logs.Println(r_Device.T_sn + " 没有设备参数,跳过")
+			continue
+		}
+
+		Warningr_new := Warning.Read_T_snT_tp(r_Device.T_sn, 1001)
+		if Warningr_new.Id == 0 {
+			logs.Println(r_Device.T_sn + " 没有触发过离线,跳过")
+			continue
+		}
+
+		duration := time.Now().Sub(Warningr_new.T_Ut)
+
+		// 将时间差表示为秒
+		seconds := int(duration.Seconds())
+
+		if DeviceParameter_r.T_outA > seconds {
+			logs.Println(r_Device.T_sn+" 未满足触发条件,跳过,已经持续", seconds, "秒,配置", DeviceParameter_r.T_outA)
+			continue
+		}
+
+		Warningr_fUt := Warning.Read_T_snT_tpT_Msid(r_Device.T_sn, 1001, 0)
+		if Warningr_fUt.Id == 0 {
+			logs.Println(r_Device.T_sn + " 没有触发过初次离线,跳过")
+			continue
+		}
+
+		Warning_r := Warning.Add_DeviceLogs(1001, r_Device, "设备离线报警,已经持续 "+lib.TimeSinceToString(Warningr_fUt.T_Ut, time.Now()))
+		Warning_r.T_fUt = Warningr_fUt.T_Ut
+		Warning_r.T_Msid = 1
+		Warning.Update_Warning(Warning_r, "T_Msid", "T_fUt")
+		WarningNotice.WarningCompanyNotice(&Warning_r, 0, 0)
+
+	}
+
+	time.Sleep(time.Second * 30)
+	goto ContinuousPushOfOfflineDeviceWarningTOGO
+}

+ 13 - 0
models/Warning/Warning.go

@@ -292,3 +292,16 @@ func Read_T_snT_tpT_Msid(T_sn string, T_tp, T_Msid int) Warning {
 
 	return r
 }
+
+// 指定设备与类型消息ID最新的记录
+func Read_T_snT_idT_tp(T_sn string, T_id, T_tp int) Warning {
+
+	o := orm.NewOrm()
+	// 也可以直接使用 Model 结构体作为表名
+
+	qs := o.QueryTable(new(Warning))
+	var r Warning
+	qs.Filter("T_sn", T_sn).Filter("T_id", T_id).Filter("T_tp", T_tp).OrderBy("-T_Ut").One(&r)
+
+	return r
+}