Quellcode durchsuchen

```
fix(camera): 解决拍照前运动检测问题

- 移除产品详情模板中的鞋子相关属性,保留保温杯相关属性
- 添加 _do_camera_check 方法执行完整状态查询检测
- 实现 camera_check_mcu_move_is_stop 方法进行拍照前运动检测
- 在消息处理器中集成运动检测逻辑,支持重试机制
- 添加日志记录和超时处理确保检测过程可靠性
```

rambo vor 2 Wochen
Ursprung
Commit
21d68b2b62

+ 1 - 16
python/detail_template_test_miniso.json

@@ -44,21 +44,6 @@
     "细节一": "保温能效水平:IV级\n*20°室温下,装入96℃\n以上热水,静止不开启状\n态下6小时后≥44℃",
     "细节二": "安全锁扣\n密封锁水",
     "细节三": "PP吸嘴",
-    "细节四": "直饮口",
-    "帮面": "网布+合成革",
-    "鞋底": "橡胶底",
-    "内里": "网布",
-    "鞋垫": "合成革",
-    "鞋宽": "11.8CM",
-    "帮高": "5.7CM",
-    "跟高": "7.0CM",
-    "细节亮点主标题": "舒适鞋面",
-    "细节亮点副标题": "轻透网面享受每一步的清爽",
-    "艺-主标题": "鞋面弧形拼接",
-    "艺-副标题": "尽显不拘一格风尚",
-    "跟-主标题": "鞋底跟高7.0CM",
-    "跟-副标题": "迈步更轻松",
-    "底-主标题": "全底贴地 出行畅快",
-    "底-副标题": "凹凸纹理,轻松行走"
+    "细节四": "直饮口"
   }
 }

+ 39 - 0
python/mcu/DeviceControl.py

@@ -1742,6 +1742,45 @@ class DeviceControl(BaseClass, metaclass=SingletonType):
             case _:
                 pass
 
+    async def _do_camera_check(self):
+        """执行一次完整的状态查询检测,返回是否全部停止"""
+        self.send_get_all_info_to_mcu()
+        await asyncio.sleep(0.5)
+        return all(
+            value == 2
+            for value in [
+                self.state_camera_motor,
+                self.state_camera_steering,
+                self.state_turntable_steering,
+                self.state_overturn_steering,
+            ]
+        )
+
+    async def camera_check_mcu_move_is_stop(self, re_check=False):
+        _s = time.time()
+        check_times = 0
+        await self.cleanAllReceiveData()
+        while 1:
+            if self.action_state != 1:
+                return False
+            # 发送获取设备状态消息
+            if await self._do_camera_check():
+                # 首次检测通过,追加一次确认检测,防止读到旧状态误判
+                logger.info("拍照前运动检测首次通过,发起确认检测")
+                if await self._do_camera_check():
+                    logger.info("拍照前运动检测状态[成功],确认通过,耗时%.1f秒", time.time() - _s)
+                    await asyncio.sleep(0.5)
+                    return True
+                else:
+                    logger.warning("拍照前运动检测确认失败,继续等待")
+                    check_times += 1
+            else:
+                check_times += 1
+                if check_times > 5:
+                    logger.info("拍照前运动检测状态[失败],耗时%.1f秒", time.time() - _s)
+                    return False
+            await asyncio.sleep(0.2)
+
     def checkDevice(self):
         print("检查设备是否运行中")
         logger.info("检查设备是否运行中")

+ 6 - 0
python/sockets/message_handler.py

@@ -632,6 +632,12 @@ async def handlerSend(
                     )
                     await manager.send_personal_message(data, websocket)
                     return
+            if not await device_ctrl.camera_check_mcu_move_is_stop(re_check=True):
+                logger.warning("拍照前运动检测失败===>,等待0.5秒后再检测一次")
+                await asyncio.sleep(0.5)
+                if not await device_ctrl.camera_check_mcu_move_is_stop(re_check=True):
+                    logger.warning("拍照前运动检测二次失败===>,强制拍摄")
+                    await asyncio.sleep(0.5)
             is_af = True
             loop.create_task(
                 smart_shooter.CameraShooter(