Browse Source

1. 新增一些告警事件参数
2. TimePlan支持跨零点时间段
3. sql扩展查询告警计划的字段

nifangxu 1 tháng trước cách đây
mục cha
commit
0221dfc319
4 tập tin đã thay đổi với 119 bổ sung13 xóa
  1. 88 9
      core/alarm_plan.py
  2. 5 0
      core/alarm_plan_manager.py
  3. 18 0
      core/time_plan.py
  4. 8 4
      db/db_sqls.py

+ 88 - 9
core/alarm_plan.py

@@ -87,6 +87,72 @@ class EventAttr_ToiletingFrequency(EventAttr_Base):
         self.leave_ts_  = -1
         self.stay_time_ = -1
 
+# 事件属性 夜间如厕频次统计
+class EventAttr_NightToiletingFrequency(EventAttr_Base):
+    def __init__(self):
+        self.enter_ts_: int  = -1    # 进入时间(ms)
+        self.leave_ts_: int  = -1    # 离开时间(ms)
+        self.stay_time_: int = -1    # 停留时长(ms)
+        return
+
+    def reset(self):
+        self.enter_ts_  = -1
+        self.leave_ts_  = -1
+        self.stay_time_ = -1
+
+# 事件属性 如厕频次异常
+class EventAttr_ToiletingFrequencyAbnormal(EventAttr_Base):
+    def __init__(self):
+        self.enter_ts_: int  = -1    # 进入时间(ms)
+        self.leave_ts_: int  = -1    # 离开时间(ms)
+        self.stay_time_: int = -1    # 停留时长(ms)
+        return
+
+    def reset(self):
+        self.enter_ts_  = -1
+        self.leave_ts_  = -1
+        self.stay_time_ = -1
+
+# 事件属性 起夜异常
+class EventAttr_NightToiletingFrequencyAbnormal(EventAttr_Base):
+    def __init__(self):
+        self.enter_ts_: int  = -1    # 进入时间(ms)
+        self.leave_ts_: int  = -1    # 离开时间(ms)
+        self.stay_time_: int = -1    # 停留时长(ms)
+        return
+
+    def reset(self):
+        self.enter_ts_  = -1
+        self.leave_ts_  = -1
+        self.stay_time_ = -1
+
+# 事件属性 卫生间频次统计
+class EventAttr_BathroomStayFrequency(EventAttr_Base):
+    def __init__(self):
+        self.enter_ts_: int  = -1    # 进入时间(ms)
+        self.leave_ts_: int  = -1    # 离开时间(ms)
+        self.stay_time_: int = -1    # 停留时长(ms)
+        return
+
+    def reset(self):
+        self.enter_ts_  = -1
+        self.leave_ts_  = -1
+        self.stay_time_ = -1
+
+# 事件属性 异常消失
+class EventAttr_TargetAbsence(EventAttr_Base):
+    def __init__(self):
+        self.enter_ts_: int  = -1    # 进入时间(ms)
+        self.leave_ts_: int  = -1    # 离开时间(ms)
+        self.stay_time_: int = -1    # 停留时长(ms)
+        return
+
+    def reset(self):
+        self.enter_ts_  = -1
+        self.leave_ts_  = -1
+        self.stay_time_ = -1
+
+
 class AlarmPlan:
     def __init__(self,
                  plan_uuid: str,
@@ -112,10 +178,15 @@ class AlarmPlan:
 
         # 事件属性表
         self.event_attr_map = {
-            EventType.STAY_DETECTION.value: EventAttr_StayDetection,
-            EventType.RETENTION_DETECTION.value: EventAttr_RetentionDetection,
-            EventType.TOILETING_DETECTION.value: EventAttr_ToiletingDetection,
-            EventType.TOILETING_FREQUENCY.value: EventAttr_ToiletingFrequency
+            EventType.STAY_DETECTION.value                  : EventAttr_StayDetection,
+            EventType.RETENTION_DETECTION.value             : EventAttr_RetentionDetection,
+            EventType.TOILETING_DETECTION.value             : EventAttr_ToiletingDetection,
+            EventType.TOILETING_FREQUENCY.value             : EventAttr_ToiletingFrequency,
+            EventType.NIGHT_TOILETING_FREQUENCY.value       : EventAttr_NightToiletingFrequency,
+            EventType.TOILETING_FREQUENCY_ABNORMAL.value    : EventAttr_ToiletingFrequencyAbnormal,
+            EventType.NIGHT_TOILETING_FREQUENCY_ABNORMAL.value: EventAttr_NightToiletingFrequencyAbnormal,
+            EventType.BATHROOM_STAY_FREQUENCY.value         : EventAttr_BathroomStayFrequency,
+            EventType.TARGET_ABSENCE.value                  : EventAttr_TargetAbsence,
         }
 
         # 事件触发参数
@@ -248,7 +319,9 @@ class AlarmPlan:
                 "event_type": event_desc_map[self.event_type_],
                 "info": json.dumps(info),
                 "is_handle": 0,
-                "is_deleted": 0
+                "create_time": get_bj_time_s(),
+                "is_deleted": 0,
+                "remark": {}
             }
             db_req_que.put(DBRequest(sql=sqls.sql_insert_events, params=params, callback=None))
 
@@ -320,7 +393,9 @@ class AlarmPlan:
                 "event_type": event_desc_map[self.event_type_],
                 "info": json.dumps(info),
                 "is_handle": 0,
-                "is_deleted": 0
+                "create_time": get_bj_time_s(),
+                "is_deleted": 0,
+                "remark": {}
             }
             db_req_que.put(DBRequest(sql=sqls.sql_insert_events, params=params, callback=None))
 
@@ -392,7 +467,9 @@ class AlarmPlan:
                 "event_type": event_desc_map[self.event_type_],
                 "info": json.dumps(info),
                 "is_handle": 0,
-                "is_deleted": 0
+                "create_time": get_bj_time_s(),
+                "is_deleted": 0,
+                "remark": {}
             }
             db_req_que.put(DBRequest(sql=sqls.sql_insert_events, params=params, callback=None))
 
@@ -465,7 +542,9 @@ class AlarmPlan:
                 "event_type": event_desc_map[self.event_type_],
                 "info": json.dumps(info),
                 "is_handle": 0,
-                "is_deleted": 0
+                "create_time": get_bj_time_s(),
+                "is_deleted": 0,
+                "remark": {}
             }
             db_req_que.put(DBRequest(sql=sqls.sql_insert_events, params=params, callback=None))
 
@@ -506,7 +585,7 @@ class AlarmPlan:
 
 
     # 异常消失
-    def handle_target_missing(self):
+    def handle_target_absence(self):
         return
 
 

+ 5 - 0
core/alarm_plan_manager.py

@@ -134,6 +134,11 @@ def start_event_dispatcher():
         EventType.RETENTION_DETECTION.value : AlarmPlan.handle_retention_detection,
         EventType.TOILETING_DETECTION.value : AlarmPlan.handle_toileting_detection,
         EventType.TOILETING_FREQUENCY.value : AlarmPlan.handle_toileting_frequency,
+        EventType.NIGHT_TOILETING_FREQUENCY.value : AlarmPlan.handle_night_toileting_frequency,
+        EventType.TOILETING_FREQUENCY_ABNORMAL.value : AlarmPlan.handle_toileting_frequency_abnormal,
+        EventType.NIGHT_TOILETING_FREQUENCY_ABNORMAL.value : AlarmPlan.handle_night_toileting_frequency_abnormal,
+        EventType.BATHROOM_STAY_FREQUENCY.value : AlarmPlan.handle_bathroom_stay_frequency,
+        EventType.TARGET_ABSENCE.value : AlarmPlan.handle_target_absence,
     }
     g_las.g_event_dispatcher.start(handles)
 

+ 18 - 0
core/time_plan.py

@@ -44,6 +44,24 @@ class TimePlan:
         if self.month_days_ is not None and now.day not in self.month_days_:
             return False
 
+        # 时间匹配
+        now_t = now.time()
+        for period in self.time_range_:
+            try:
+                start_t = datetime.strptime(period["start_time"], "%H:%M").time()
+                end_t = datetime.strptime(period["end_time"], "%H:%M").time()
+            except ValueError:
+                LOGDBG("time_range_ invalid format, pass")
+                continue
+
+            if start_t <= end_t:
+                # 正常区间 (不跨零点)
+                if start_t <= now_t <= end_t:
+                    return True
+            else:
+                # 跨零点区间,例如 22:00 → 16:00
+                if now_t >= start_t or now_t <= end_t:
+                    return True
 
         # 时间匹配
         now_t = now.time()

+ 8 - 4
db/db_sqls.py

@@ -61,6 +61,7 @@ SELECT
     ap.region           AS region,
     ap.threshold_time   AS threshold_time,
     ap.merge_time       AS merge_time,
+    ap.param            AS param,
     ap.create_time      AS create_time,
     ap.update_time      AS update_time,
 
@@ -73,8 +74,7 @@ SELECT
     atp.stop_date       AS stop_date,
     atp.time_range      AS time_range,
     atp.month_days      AS month_days,
-    atp.weekdays        AS weekdays+
-
+    atp.weekdays        AS weekdays
 
 FROM alarm_plan ap
 LEFT JOIN event_type et 
@@ -97,7 +97,9 @@ INSERT INTO events (
     event_type,
     info,
     is_handle,
-    is_deleted)
+    create_time,
+    is_deleted,
+    remark)
 VALUES (
     %(dev_id)s,
     %(uuid)s,
@@ -105,7 +107,9 @@ VALUES (
     %(event_type)s,
     %(info)s,
     %(is_handle)s,
-    %(is_deleted)s
+    %(create_time)s,
+    %(is_deleted)s,
+    %(remark)s
 );
 """