From 5049f7b26b5e3f8a447b0f9336d5622c818968e0 Mon Sep 17 00:00:00 2001 From: YangCheng <1633794139@qq.com> Date: Fri, 20 Mar 2026 22:20:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=9A=E6=88=AA=E5=9B=BE?= =?UTF-8?q?=E5=A4=84=E7=90=86=E5=99=A8=E6=8C=89device=5Fid=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E8=AF=B7=E6=B1=82=EF=BC=8Cconsumer=20name=E5=8A=A0?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E6=A0=87=E8=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 32 ++++++++++++++++++++++++++++++++ core/screenshot_handler.py | 16 +++++++++++++--- 2 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 .env diff --git a/.env b/.env new file mode 100644 index 0000000..a4b9946 --- /dev/null +++ b/.env @@ -0,0 +1,32 @@ +# Local debug overrides +DEBUG_SERVER_HOST=0.0.0.0 + +# Alarm upload - cloud API URL (WVP backend) +CLOUD_API_URL=http://124.221.55.225:18080 + +# ===== 边缘设备 ID(第二台 Edge 节点,必须与 WVP 数据库 ROI 表的 device_id 一致) ===== +EDGE_DEVICE_ID=edge_002 + +# ===== 配置同步模式(REDIS=监听云端Stream, LOCAL=仅本地SQLite) ===== +CONFIG_SYNC_MODE=REDIS + +# ===== 云端 Redis(截图处理器 + 配置同步,db=1) ===== +CLOUD_REDIS_HOST=sh-crs-6upea3zn.sql.tencentcdb.com +CLOUD_REDIS_PORT=24637 +CLOUD_REDIS_DB=1 +CLOUD_REDIS_PASSWORD=HkVZkVnn1 + +# ===== 腾讯云 COS(截图上传) ===== +COS_REGION=ap-shanghai +COS_BUCKET=xhwkzx-1-1389966313 +COS_SECRET_ID=AKIDVxPiqmVhYv7FCwVqytdAVddQ2TJySt9I +COS_SECRET_KEY=1rVyEI8mMVWs21xfBUjy4BE6DA4z7KWb + +# ===== 本地 Redis(告警队列、配置缓存) ===== +LOCAL_REDIS_HOST=localhost +LOCAL_REDIS_PORT=6379 +LOCAL_REDIS_DB=0 + +# ===== 推理配置(GTX 1050 Ti 2GB 显存优化) ===== +BATCH_SIZE=1 +VIDEO_DEFAULT_FPS=3 diff --git a/core/screenshot_handler.py b/core/screenshot_handler.py index 5e0d303..8eb033a 100644 --- a/core/screenshot_handler.py +++ b/core/screenshot_handler.py @@ -26,7 +26,7 @@ logger = logging.getLogger(__name__) # Redis 常量 SNAP_REQUEST_STREAM = "edge_snap_request" SNAP_CONSUMER_GROUP = "edge_snap_group" -SNAP_CONSUMER_NAME = "edge_snap_worker" +SNAP_CONSUMER_NAME_PREFIX = "edge_snap_worker" SNAP_RESULT_KEY_PREFIX = "snap:result:" SNAP_RESULT_TTL = 60 # 降级结果 key 60s 过期 @@ -54,6 +54,8 @@ class ScreenshotHandler: self._settings = get_settings() self._cos_client = None self._cos_config: COSConfig = self._settings.cos + self._device_id = self._settings.mqtt.device_id + self._consumer_name = f"{SNAP_CONSUMER_NAME_PREFIX}_{self._device_id}" self._thread: Optional[threading.Thread] = None self._stop_event = threading.Event() @@ -79,7 +81,8 @@ class ScreenshotHandler: daemon=True, ) self._thread.start() - logger.info("[截图] 截图处理器已启动") + logger.info("[截图] 截图处理器已启动, consumer=%s, device_id=%s", + self._consumer_name, self._device_id) def stop(self): """停止截图监听线程""" @@ -159,7 +162,7 @@ class ScreenshotHandler: try: results = self._cloud_redis.xreadgroup( SNAP_CONSUMER_GROUP, - SNAP_CONSUMER_NAME, + self._consumer_name, {SNAP_REQUEST_STREAM: ">"}, count=1, block=5000, @@ -221,6 +224,13 @@ class ScreenshotHandler: }) return + # 多 Edge 设备隔离:如果消息指定了 device_id 且不是本设备,跳过 + target_device_id = fields.get("device_id", "") + if target_device_id and target_device_id != self._device_id: + logger.debug("[截图] 跳过非本设备请求: target=%s, self=%s, request_id=%s", + target_device_id, self._device_id, request_id) + return + rtsp_url = fields.get("rtsp_url", "") logger.info("[截图] 收到截图请求: request_id=%s, camera=%s, callback=%s",