# ============================================================ # 锡山中荷 水厂配置文件 # ============================================================ # 使用方法:python tool/migrate_yaml_to_db.py --yaml 本文件路径 --force # 导入后可通过 API(:8080)在线修改,无需再编辑此文件 # ============================================================ # ---------------------------------------------------------- # 水厂列表(一个 YAML 文件只配一个水厂) # ---------------------------------------------------------- plants: - name: 锡山中荷 # 水厂名称(用于日志和推送显示) enabled: true # 是否启用该水厂的检测 project_id: 92 # 平台项目 ID(推送接口需要) # 流量 PLC 映射(泵名称 -> PLC 地址,用于辅助判断运行状态) # key = pump_name(与 rtsp_streams 中的 pump_name 对应) flow_plc: A: C.M.RO1_FT_JS@out # A 泵进水流量点位 B: C.M.RO2_FT_JS@out C: C.M.RO3_FT_JS@out D: C.M.RO4_FT_JS@out # 泵状态 PLC 点位(判断泵启停,启停后进入 15 分钟过渡期不检测) # key = pump_name, value = 点位列表 # point: SCADA 系统中的点位地址, val=1 表示运行, val=0 表示停机 pump_status_plc: A: - point: C.M.RO1_GYB@run name: RO高压泵A # 显示名称(用于日志) B: - point: C.M.RO2_GYB@run name: RO高压泵B C: - point: C.M.RO3_GYB@run name: RO高压泵C D: - point: C.M.RO4_GYB@run name: RO高压泵D # RTSP 拾音器流列表(每个流 = 一台拾音器 = 一个检测点) rtsp_streams: - name: RO高压泵A # 拾音器名称(日志和推送显示) url: rtsp://admin:hao123456@192.168.31.240:554/cam/realmonitor?channel=38&subtype=0 # RTSP 地址 channel: 38 # 通道号 device_code: 1#-1 # 设备编码(唯一标识,训练数据文件夹名、模型目录名) pump_name: A # 关联的泵名称(对应 pump_status_plc 的 key) # model_subdir: 1#-1 # 模型子目录(默认 = device_code,一般无需指定) - name: RO高压泵B url: rtsp://admin:hao123456@192.168.31.240:554/cam/realmonitor?channel=41&subtype=0 channel: 41 device_code: 1#-2 pump_name: B - name: RO高压泵C url: rtsp://admin:hao123456@192.168.31.240:554/cam/realmonitor?channel=42&subtype=0 channel: 42 device_code: 1#-3 pump_name: C - name: RO高压泵D url: rtsp://admin:hao123456@192.168.31.240:554/cam/realmonitor?channel=43&subtype=0 channel: 43 device_code: 1#-4 pump_name: D # ---------------------------------------------------------- # 音频采集参数 # ---------------------------------------------------------- audio: sample_rate: 16000 # 采样率 Hz(必须与训练时一致,勿改) file_duration: 60 # 每个音频文件时长(秒) segment_duration: 60 # FFmpeg 切片时长(秒) auto_cleanup: # 自动清理旧音频(节省磁盘) enabled: true delete_normal: true # 删除正常检测的音频 keep_recent_count: 100 # 每设备保留最近 100 个文件 # ---------------------------------------------------------- # 异常检测参数 # ---------------------------------------------------------- prediction: batch_size: 64 # 推理批大小 check_interval: 1.0 # 检查新文件间隔(秒) default_threshold: 0.01 # 默认阈值(模型未加载时使用) voting: # 滑动窗口投票(减少误报) enabled: true window_size: 5 # 窗口大小(5 个检测周期,约 5 分钟) threshold: 3 # 5 次中 3 次异常才判定为异常 frequency_history: # 误差频率统计 enabled: true history_minutes: 10 # 统计最近 10 分钟的异常频率 energy_detection: # 音频能量检测(无 PLC 时用于判断泵启停) enabled: true skip_when_stopped: true # 泵停机时跳过检测 save_anomaly_audio: # 保存异常音频(用于后续分析/训练) enabled: true save_dir: data/anomaly_detected cooldown_minutes: 15 # 同一设备异常音频保存冷却(避免重复保存) context_capture: # 上下文捕获(保存异常前后的音频) enabled: true pre_minutes: 2 # 异常前 2 分钟 post_minutes: 2 # 异常后 2 分钟 # ---------------------------------------------------------- # 推送通知 # ---------------------------------------------------------- push_notification: enabled: true # 总开关 alert_enabled: false # 是否推送告警(false = 只推心跳,不推异常告警) push_base_urls: # 推送基地址列表(每个 base_url/{project_id} 拼接) - label: "外网" # 标签(日志显示) url: "http://120.55.44.4:8900/api/v1/dumu/push-msg" - label: "内网" url: "http://192.168.60.8:8900/api/v1/dumu/push-msg" timeout: 30 # HTTP 超时(秒) retry_count: 2 # 失败重试次数 cooldown_minutes: 15 # 同设备告警冷却时间(分钟) cooldown_same_type_hours: 24 # 同类型异常冷却(小时) cooldown_diff_type_hours: 1 # 不同类型异常冷却(小时) alert_aggregate: # 跨设备聚合告警 enabled: true window_seconds: 300 # 聚合窗口(秒) min_devices: 2 # 至少 2 台设备同时异常才触发聚合告警 # ---------------------------------------------------------- # SCADA/PLC 接口(泵状态查询) # ---------------------------------------------------------- scada_api: enabled: true # 是否启用 PLC 查询(false 时用音频能量判断启停) base_url: http://120.55.44.4:8900/api/v1/jinke-cloud/db/device/history-data # 历史数据接口 realtime_url: http://47.96.12.136:8788/api/v1/jinke-cloud/device/current-data # 实时数据接口 jwt_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJJRCI6NywiVXNlcm5hbWUiOiJhZG1pbiIsIkRlcCI6IjEzNSIsImV4cCI6MTc3NjExOTExNCwiaXNzIjoiZ2luLWJsb2cifQ.0HTtzHZjyd2mHo8VCy8icYROxmntRMuQhyoZsAYRL_M timeout: 10 # 查询超时(秒) # ---------------------------------------------------------- # 人体检测抑制(有人在设备旁时抑制告警,减少误报) # ---------------------------------------------------------- human_detection: enabled: false # 是否启用(需要独立的人体检测服务) db_path: /data/human_detector/detection_status.db # 人体检测状态 DB 路径 cooldown_minutes: 5 # 检测到有人后抑制告警的时间(分钟)