Browse Source

新增一些事件处理器接口

nifangxu 1 month ago
parent
commit
b5d6cbbdc3
5 changed files with 51 additions and 43 deletions
  1. 10 0
      .gitignore
  2. 40 1
      core/alarm_plan.py
  3. 1 0
      core/alarm_plan_manager.py
  4. 0 5
      core/linkage_action.py
  5. 0 37
      core/linkage_alarm_service.py

+ 10 - 0
.gitignore

@@ -4,6 +4,16 @@ __pycache__/
 *.py[cod]
 *$py.class
 
+bin-debug/
+bin-release/
+[Oo]bj/
+[Bb]in/
+*.pyc
+*.pyo
+*.pyd
+
+log/
+
 # C extensions
 *.so
 

+ 40 - 1
core/alarm_plan.py

@@ -74,6 +74,19 @@ class EventAttr_ToiletingDetection(EventAttr_Base):
         self.leave_ts_  = -1
         self.stay_time_ = -1
 
+# 事件属性 如厕频次统计
+class EventAttr_ToiletingFrequency(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,
@@ -101,7 +114,8 @@ 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_DETECTION.value: EventAttr_ToiletingDetection,
+            EventType.TOILETING_FREQUENCY.value: EventAttr_ToiletingFrequency
         }
 
         # 事件触发参数
@@ -471,6 +485,31 @@ class AlarmPlan:
                 LOGERR(f"[{frame.filename}:{frame.lineno}] @{frame.name}(), error: {e}")
 
 
+    # 夜间如厕频次统计
+    def handle_night_toileting_frequency(self):
+        return
+
+
+    # 如厕频次异常
+    def handle_toileting_frequency_abnormal(self):
+        return
+
+
+    # 起夜异常
+    def handle_night_toileting_frequency_abnormal(self):
+        return
+
+
+    # 卫生间频次统计
+    def handle_bathroom_stay_frequency(self):
+        return
+
+
+    # 异常消失
+    def handle_target_missing(self):
+        return
+
+
 
 
 

+ 1 - 0
core/alarm_plan_manager.py

@@ -128,6 +128,7 @@ def init_alarm_plan_mgr():
 
 
 def start_event_dispatcher():
+    # 注册事件处理函数
     handles = {
         EventType.STAY_DETECTION.value      : AlarmPlan.handle_stay_detection,
         EventType.RETENTION_DETECTION.value : AlarmPlan.handle_retention_detection,

+ 0 - 5
core/linkage_action.py

@@ -1,5 +0,0 @@
-
-# 联动动作
-class LinkageAction:
-    def __init__(self):
-        return

+ 0 - 37
core/linkage_alarm_service.py

@@ -1,37 +0,0 @@
-from typing import List, Tuple, Optional
-from datetime import datetime, time, date
-from threading import Thread, Lock
-from enum import Enum
-
-from core.event_type import EventType
-from core.alarm_event import AlarmEvent
-from core.alarm_plan_manager import AlarmPlanManager
-
-
-class LinkageAlarmService:
-    def __init__(self, plan_mgr: AlarmPlanManager):
-        self.plan_mgr_ = plan_mgr
-        self.last_trigger_times_ = {}   # plan_uuid -> datetime
-
-    def process_event(self, event: AlarmEvent):
-        matched_plans = self.plan_mgr_.match_plans(event)
-        now = event.timestamp_
-
-        for plan in matched_plans:
-            plan_uuid  = plan.plan_uuid_
-            last_time = self.last_trigger_times_.get(plan_uuid)
-
-            # 归并事件判断
-            if last_time and (now - last_time).total_seconds() < plan.merge_time_:
-                print(f"归并")
-                continue
-            print(f"触发事件 {event.event_id_}, 命中计划[{plan.name_}]")
-            self.last_trigger_times_[plan_uuid] = now
-
-
-def simulate_event_input(service: LinkageAlarmService):
-    event = AlarmEvent(
-        event_id = "ev001",
-        dev_id = "00FFAABBCC11",
-        event_type = EventType.TOILETING_DETECTION
-    )