flowchart TD A[前端配置设备/检测区/参数] --> B[后端下发或本地生成 service.conf] B --> C[微服务启动] C --> D[读取 /usr/local/etc/service.conf] D --> E[按设备初始化] E --> F1[启动 fire_leave 推理程序
./yolov5 -m model] E --> F2[启动 fire_check 推理程序
./yolov5 -m fire_check -R] E --> F3[启动测温程序
run_thermometry.sh] F1 --> G1[HTTP 回传人员检测结果] F2 --> G2[HTTP 回传火焰检测结果] F3 --> G3[TCP 回传温度值] G1 --> H1[更新当前人数 PersonCount] G3 --> H2[更新当前温度 Temperature] H1 --> I1{PersonCount == 0?} H2 --> I2{温度 > 阈值?} I1 -->|是| J1[无人条件成立] I2 -->|是| J2[超温条件成立] J1 --> K{无人 + 超温
是否同时成立?} J2 --> K K -->|否| K0[重置持续计时] K -->|是| L[开始累计持续时间] L --> M{持续时间 >= detection_time?} M -->|否| L M -->|是| N{是否在 alarm_time 冷却期?} N -->|是| N0[不上报,继续监测] N -->|否| O[触发 fire_leave 动火离人报警] G2 --> P{检测到火焰
ClassIdx=0 且 Number>0?} P -->|否| P0[重置火焰计时] P -->|是| Q[累计火焰持续时间] Q --> R{持续时间 >= fire_check detection_time?} R -->|否| Q R -->|是| S[触发 fire_check 火焰报警] O --> T[查找报警前后视频片段] S --> T T --> U[拼接约30秒报警视频] U --> V[复制到 /data/upload] V --> W[上传视频到后端/Nginx] W --> X[WebSocket 上报告警事件] X --> Y[后端转发前端展示] Z1[GPIO按钮] --> Z2[目标业务:暂停 fire_leave 上报] Z2 --> Z3[暂停期内人员离开报警不上报] Z3 --> K Z2 -.不影响.-> P WS1[WebSocket /dhlr/alert] --> BEEP[控制蜂鸣器 GPIO109] WS2[WebSocket /dhlr/forbid_time] --> Z2