From 7e56597422943ba77ec82b4dc89f0d58fccdf32c Mon Sep 17 00:00:00 2001 From: liy Date: Mon, 15 Jun 2026 17:16:37 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=AC=E5=8F=91=E6=8E=A5=E5=8F=A3=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shouji/main.py | 20 +++++++++++++++++--- shuizhunyi/main.py | 2 +- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/shouji/main.py b/shouji/main.py index 0d4103b..c9b53a5 100644 --- a/shouji/main.py +++ b/shouji/main.py @@ -661,8 +661,14 @@ async def measure_and_send(req: MeasureAndSendRequest = MeasureAndSendRequest()) detail=f"水准仪测量失败: {fm_result.get('error_desc') or fm_result.get('raw_text') or '未知错误'}" ) - r = fm_result.get("staff_reading") - hd = fm_result.get("distance") + values = fm_result.get("values", []) + if len(values) < 1: + raise HTTPException( + status_code=502, + detail=f"数据异常失败: {fm_result}" + ) + r = values[-1] + hd = values[-2] if r is None or hd is None: raise HTTPException( status_code=502, @@ -670,7 +676,15 @@ async def measure_and_send(req: MeasureAndSendRequest = MeasureAndSendRequest()) ) # 4. 直接发到手机蓝牙 - ok = svc.send_measurement(r, hd) + try: + r = float(r) if r not in (None, "", b"") else 0.0 + hd = float(hd) if hd not in (None, "", b"") else 0.0 + except (ValueError, TypeError): + raise HTTPException( + status_code=502, + detail=f"水准仪返回数据错误: {json.dumps(fm_result, ensure_ascii=False)}" + ) + ok = svc.send_measurement(hd, r) return { "status": "ok" if ok else "send_error", diff --git a/shuizhunyi/main.py b/shuizhunyi/main.py index 16df3af..180557e 100644 --- a/shuizhunyi/main.py +++ b/shuizhunyi/main.py @@ -282,7 +282,7 @@ class DiniClient: self.ser.write(tx_bytes) self.ser.flush() - time.sleep(2.0 if measure_mode else 0.25) + time.sleep(5.0 if measure_mode else 0.25) raw = self._read_response() if raw: