Compare commits

..

1 Commits

Author SHA1 Message Date
f7898adc5d 1. 修改了,远程服务端断开就卡死的bug,
2. 修改图像解析逻辑,使其支持DTU-HMI 的图像格式,不再支持原来的图像格式,不能显示原来设备发来的图像
2026-03-12 18:06:07 +08:00
4 changed files with 38 additions and 908 deletions

View File

@@ -87,6 +87,13 @@ DTU-RemoteLCD/
| **装置 → 工具** | `[0xBB][功能码][长度高][长度低][数据...][CRC]` | | **装置 → 工具** | `[0xBB][功能码][长度高][长度低][数据...][CRC]` |
| **CRC** | 数据区逐字节异或,取低 8 位 | | **CRC** | 数据区逐字节异或,取低 8 位 |
```
刷新屏幕请求
AA 03 00 04 00 00 00 00 00
```
**功能码** **功能码**
| 码 | 名称 | 说明 | | 码 | 名称 | 说明 |

View File

@@ -1,907 +0,0 @@
2026-03-03 10:39:32.028 | INFO | __main__:main:408 - 远程显示服务: http://localhost:8181
2026-03-03 10:39:32.029 | INFO | __main__:main:409 - 使用 WebSocket 传输,在浏览器中打开上述地址
2026-03-03 10:39:32.623 | INFO | __main__:main:408 - 远程显示服务: http://localhost:8181
2026-03-03 10:39:32.623 | INFO | __main__:main:409 - 使用 WebSocket 传输,在浏览器中打开上述地址
2026-03-03 10:39:32.649 | INFO | __main__:on_connect:331 - [on_connect] WebSocket 客户端已连接 sid=KYbr0SIfA_Ge-yHjAAAB
2026-03-03 10:39:39.958 | INFO | __main__:on_disconnect_device:374 - [on_disconnect_device] 前端请求断开设备 sid=KYbr0SIfA_Ge-yHjAAAB
2026-03-03 10:39:39.959 | INFO | __main__:on_disconnect_device:380 - [on_disconnect_device] 设备已断开(若为最后一个客户端)
2026-03-03 10:39:42.887 | INFO | __main__:on_connect_device:353 - [on_connect_device] 请求连接 DTU: 192.168.253.3:7003
2026-03-03 10:39:42.891 | INFO | __main__:connect:137 - [connect] 连接 DTU 成功: 192.168.253.3:7003
2026-03-03 10:39:42.892 | INFO | __main__:_screen_refresh_loop:270 - [_screen_refresh_loop] 刷新线程启动
2026-03-03 10:39:42.892 | INFO | __main__:on_connect_device:361 - [on_connect_device] 已启动屏幕刷新线程
2026-03-03 10:39:42.892 | INFO | __main__:on_connect_device:363 - [on_connect_device] 连接 DTU 成功,已加入订阅 sid=KYbr0SIfA_Ge-yHjAAAB
2026-03-03 10:39:42.892 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:42.919 | ERROR | __main__:_recv:174 - [_recv] 数据不完整, 需要 3209 字节, 实际 2048 字节
2026-03-03 10:39:42.919 | ERROR | __main__:fetch_screen:211 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:39:43.025 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:43.026 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=1161
2026-03-03 10:39:43.026 | ERROR | __main__:parse_frame:97 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:39:43.026 | ERROR | __main__:fetch_screen:211 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:39:43.130 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:43.130 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:43.130 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:43.131 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:43.187 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:43.210 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=881
2026-03-03 10:39:43.312 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:43.312 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:43.313 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:43.313 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:43.314 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:43.320 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=881
2026-03-03 10:39:43.432 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:43.432 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:43.432 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:43.434 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:43.434 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:43.453 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=881
2026-03-03 10:39:43.569 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:43.570 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:43.570 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:43.570 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:43.570 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:43.577 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=881
2026-03-03 10:39:43.692 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:43.692 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:43.692 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:43.692 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:43.692 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:43.702 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=881
2026-03-03 10:39:43.813 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:43.813 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:43.814 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:43.814 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:43.814 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:43.822 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=881
2026-03-03 10:39:43.936 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:43.936 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:43.937 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:43.937 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:43.937 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:43.944 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=882
2026-03-03 10:39:44.057 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:44.057 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:44.057 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:44.059 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:44.059 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:44.065 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=882
2026-03-03 10:39:44.179 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:44.179 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:44.179 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:44.179 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:44.179 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:44.187 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=882
2026-03-03 10:39:44.301 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:44.302 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:44.302 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:44.302 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:44.302 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:44.307 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=882
2026-03-03 10:39:44.421 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:44.422 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:44.422 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:44.422 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:44.422 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:44.430 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=882
2026-03-03 10:39:44.542 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:44.542 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:44.543 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:44.543 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:44.543 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:44.549 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=882
2026-03-03 10:39:44.663 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:44.663 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:44.663 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:44.664 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:44.664 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:44.672 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=882
2026-03-03 10:39:44.784 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:44.784 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:44.784 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:44.784 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:44.786 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:44.792 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=882
2026-03-03 10:39:44.904 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:44.904 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:44.904 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:44.906 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:44.906 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:44.912 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=882
2026-03-03 10:39:45.026 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:45.026 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:45.027 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:45.027 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:45.027 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:45.033 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=882
2026-03-03 10:39:45.148 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:45.152 | ERROR | __main__:_recv:174 - [_recv] 数据不完整, 需要 3209 字节, 实际 1460 字节
2026-03-03 10:39:45.153 | ERROR | __main__:fetch_screen:211 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:39:45.269 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:45.269 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=4958
2026-03-03 10:39:45.270 | ERROR | __main__:parse_frame:97 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:39:45.270 | ERROR | __main__:fetch_screen:211 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:39:45.376 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:45.376 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:45.376 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:45.376 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:45.376 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:45.382 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=987
2026-03-03 10:39:45.495 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:45.497 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:45.497 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:45.497 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:45.498 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:45.506 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=987
2026-03-03 10:39:45.616 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:45.616 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:45.618 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:45.618 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:45.618 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:45.629 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=987
2026-03-03 10:39:45.739 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:45.740 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:45.740 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:45.740 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:45.740 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:45.746 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=987
2026-03-03 10:39:45.860 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:45.860 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:45.861 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:45.861 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:45.861 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:45.868 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=987
2026-03-03 10:39:45.982 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:45.982 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:45.983 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:45.983 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:45.983 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:45.990 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=987
2026-03-03 10:39:46.102 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:46.102 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:46.103 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:46.103 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:46.103 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:46.110 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=987
2026-03-03 10:39:46.223 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:46.224 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:46.224 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:46.224 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:46.224 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:46.233 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=987
2026-03-03 10:39:46.345 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:46.345 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:46.345 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:46.346 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:46.346 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:46.352 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=987
2026-03-03 10:39:46.453 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:46.453 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:46.454 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:46.454 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:46.454 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:46.460 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=987
2026-03-03 10:39:46.574 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:46.575 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:46.575 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:46.575 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:46.575 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:46.582 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=987
2026-03-03 10:39:46.695 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:46.695 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:46.696 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:46.696 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:46.696 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:46.704 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=987
2026-03-03 10:39:46.818 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:46.818 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:46.819 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:46.819 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:46.819 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:46.826 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=987
2026-03-03 10:39:46.937 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:46.938 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:46.938 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:46.939 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:46.939 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:46.947 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=987
2026-03-03 10:39:47.060 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:47.060 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:47.061 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:47.061 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:47.061 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:47.068 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=987
2026-03-03 10:39:47.180 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:47.180 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:47.180 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:47.180 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:47.180 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:47.190 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=990
2026-03-03 10:39:47.302 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:47.302 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:47.303 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:47.303 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:47.304 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:47.310 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=990
2026-03-03 10:39:47.423 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:47.423 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:47.424 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:47.424 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:47.424 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:47.431 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=990
2026-03-03 10:39:47.546 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:47.546 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:47.546 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:47.546 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:47.546 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:47.554 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=990
2026-03-03 10:39:47.668 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:47.668 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:47.668 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:47.668 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:47.668 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:47.675 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=990
2026-03-03 10:39:47.790 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:47.790 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:47.790 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:47.792 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:47.792 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:47.797 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=990
2026-03-03 10:39:47.910 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:47.919 | ERROR | __main__:_recv:174 - [_recv] 数据不完整, 需要 3209 字节, 实际 1460 字节
2026-03-03 10:39:47.919 | ERROR | __main__:fetch_screen:211 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:39:48.032 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:48.033 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=4958
2026-03-03 10:39:48.033 | ERROR | __main__:parse_frame:97 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:39:48.033 | ERROR | __main__:fetch_screen:211 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:39:48.137 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:48.137 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:48.137 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:48.138 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:48.138 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:48.148 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=990
2026-03-03 10:39:48.260 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:48.260 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:48.261 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:48.261 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:48.261 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:48.270 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=988
2026-03-03 10:39:48.381 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:48.381 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:48.382 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:48.382 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:48.382 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:48.387 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=988
2026-03-03 10:39:48.502 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:48.503 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:48.503 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:48.504 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:48.504 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:48.513 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=988
2026-03-03 10:39:48.624 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:48.624 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:48.625 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:48.625 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:48.625 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:48.632 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=988
2026-03-03 10:39:48.746 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:48.746 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:48.746 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:48.747 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:48.747 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:48.754 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=988
2026-03-03 10:39:48.866 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:48.866 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:48.866 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:48.867 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:48.867 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:48.873 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=988
2026-03-03 10:39:48.988 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:48.988 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:48.988 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:48.989 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:48.989 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:48.994 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=988
2026-03-03 10:39:49.109 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:49.119 | ERROR | __main__:_recv:174 - [_recv] 数据不完整, 需要 3209 字节, 实际 1460 字节
2026-03-03 10:39:49.119 | ERROR | __main__:fetch_screen:211 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:39:49.231 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:49.232 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=4958
2026-03-03 10:39:49.233 | ERROR | __main__:parse_frame:97 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:39:49.233 | ERROR | __main__:fetch_screen:211 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:39:49.338 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:49.338 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:49.339 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:49.339 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:49.339 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:49.347 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=990
2026-03-03 10:39:49.459 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:49.459 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:49.460 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:49.460 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:49.460 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:49.467 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=990
2026-03-03 10:39:49.581 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:49.582 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:49.582 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:49.582 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:49.582 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:49.589 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=990
2026-03-03 10:39:49.702 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:49.702 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:49.702 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:49.703 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:49.703 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:49.713 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=990
2026-03-03 10:39:49.822 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:49.823 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:49.823 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:49.823 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:49.823 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:49.830 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=990
2026-03-03 10:39:49.944 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:49.944 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:49.944 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:49.944 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:49.944 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:49.951 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=991
2026-03-03 10:39:50.066 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:50.066 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:50.066 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:50.067 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:50.067 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:50.080 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=991
2026-03-03 10:39:50.202 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:50.203 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:50.203 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:50.203 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:50.204 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:50.209 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=991
2026-03-03 10:39:50.323 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:50.323 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:50.323 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:50.323 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:50.325 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:50.331 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=991
2026-03-03 10:39:50.444 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:50.444 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:50.444 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:50.445 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:50.445 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:50.451 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=991
2026-03-03 10:39:50.566 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:50.567 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:50.568 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:50.568 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:50.568 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:50.575 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=991
2026-03-03 10:39:50.686 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:50.686 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:50.686 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:50.687 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:50.687 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:50.696 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=991
2026-03-03 10:39:50.808 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:50.808 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:50.808 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:50.808 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:50.808 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:50.814 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=991
2026-03-03 10:39:50.914 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:50.916 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:50.916 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:50.917 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:50.917 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:50.928 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=991
2026-03-03 10:39:51.036 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:51.037 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:51.038 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:51.038 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:51.038 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:51.043 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=991
2026-03-03 10:39:51.160 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:51.160 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:51.161 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:51.161 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:51.162 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:51.169 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=991
2026-03-03 10:39:51.281 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:51.281 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:51.281 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:51.281 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:51.282 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:51.288 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=991
2026-03-03 10:39:51.402 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:51.403 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:51.403 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:51.403 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:51.403 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:51.411 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=929
2026-03-03 10:39:51.524 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:51.524 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:51.525 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:51.525 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:51.525 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:51.533 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=929
2026-03-03 10:39:51.644 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:51.644 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:51.644 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:51.645 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:51.645 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:51.651 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=929
2026-03-03 10:39:51.751 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:51.752 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:51.752 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:51.752 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:51.752 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:51.761 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=929
2026-03-03 10:39:51.871 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:51.886 | ERROR | __main__:_recv:174 - [_recv] 数据不完整, 需要 3209 字节, 实际 1460 字节
2026-03-03 10:39:51.886 | ERROR | __main__:fetch_screen:211 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:39:51.991 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:51.991 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=4958
2026-03-03 10:39:51.992 | ERROR | __main__:parse_frame:97 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:39:51.992 | ERROR | __main__:fetch_screen:211 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:39:52.099 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:52.100 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:52.100 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:52.100 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:52.101 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:52.107 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=931
2026-03-03 10:39:52.221 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:52.222 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:52.222 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:52.222 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:52.222 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:52.230 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=931
2026-03-03 10:39:52.343 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:52.343 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:52.344 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:52.345 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:52.346 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:52.358 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=931
2026-03-03 10:39:52.463 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:52.463 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:52.465 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:52.465 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:52.466 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:52.474 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=931
2026-03-03 10:39:52.585 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:52.586 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:52.586 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:52.587 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:52.587 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:52.597 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=931
2026-03-03 10:39:52.708 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:52.708 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:52.708 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:52.708 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:52.709 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:52.717 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=931
2026-03-03 10:39:52.829 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:52.829 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:52.830 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:52.830 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:52.831 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:52.838 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=931
2026-03-03 10:39:52.950 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:52.950 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:52.951 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:52.951 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:52.951 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:52.958 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=931
2026-03-03 10:39:53.070 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:53.070 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:53.071 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:53.071 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:53.071 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:53.078 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:53.193 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:53.194 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:53.194 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:53.194 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:53.195 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:53.203 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:53.315 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:53.317 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:53.317 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:53.317 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:53.317 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:53.324 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:53.437 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:53.437 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:53.438 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:53.438 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:53.438 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:53.444 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:53.557 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:53.558 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:53.558 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:53.558 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:53.558 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:53.565 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:53.679 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:53.680 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:53.680 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:53.680 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:53.681 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:53.686 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:53.800 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:53.800 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:53.800 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:53.800 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:53.801 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:53.807 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:53.922 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:53.922 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:53.923 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:53.923 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:53.923 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:53.930 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:54.044 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:54.044 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:54.044 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:54.044 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:54.045 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:54.053 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:54.165 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:54.165 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:54.165 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:54.167 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:54.167 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:54.172 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:54.287 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:54.288 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:54.288 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:54.288 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:54.288 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:54.297 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:54.408 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:54.409 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:54.409 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:54.410 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:54.410 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:54.419 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:54.530 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:54.530 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:54.531 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:54.531 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:54.531 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:54.537 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:54.650 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:54.650 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:54.651 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:54.651 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:54.651 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:54.658 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:54.772 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:54.772 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:54.772 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:54.772 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:54.772 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:54.780 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:54.894 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:54.895 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:54.895 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:54.895 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:54.896 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:54.902 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:55.014 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:55.014 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:55.014 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:55.014 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:55.015 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:55.021 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:55.136 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:55.136 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:55.136 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:55.137 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:55.137 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:55.145 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:55.259 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:55.259 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:55.259 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:55.260 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:55.260 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:55.266 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:55.378 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:55.379 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:55.379 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:55.380 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:55.380 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:55.387 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:55.500 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:55.500 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:55.500 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:55.501 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:55.501 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:55.507 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:55.622 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:55.622 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:55.623 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:55.623 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:55.624 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:55.633 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:55.744 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:55.744 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:55.745 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:55.745 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:55.745 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:55.752 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:55.866 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:55.866 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:55.866 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:55.866 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:55.867 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:55.875 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:55.986 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:55.987 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:55.987 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:55.988 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:55.988 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:55.995 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:56.109 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:56.110 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:56.110 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:56.110 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:56.110 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:56.118 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=930
2026-03-03 10:39:56.229 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:56.253 | ERROR | __main__:_recv:174 - [_recv] 数据不完整, 需要 3209 字节, 实际 1460 字节
2026-03-03 10:39:56.253 | ERROR | __main__:fetch_screen:211 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:39:56.366 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:56.367 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=4958
2026-03-03 10:39:56.367 | ERROR | __main__:parse_frame:97 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:39:56.367 | ERROR | __main__:fetch_screen:211 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:39:56.472 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:56.473 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:56.473 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:56.474 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:56.474 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:56.481 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=928
2026-03-03 10:39:56.593 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:56.594 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:56.594 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:56.595 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:56.595 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:56.603 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=928
2026-03-03 10:39:56.715 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:56.715 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:56.716 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:56.716 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:56.716 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:56.724 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=928
2026-03-03 10:39:56.837 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:56.837 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:56.838 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:56.838 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:56.838 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:56.846 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=928
2026-03-03 10:39:56.960 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:56.960 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:56.960 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:56.960 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:56.961 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:56.968 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=928
2026-03-03 10:39:57.083 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:57.083 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:57.083 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:57.083 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:57.085 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:57.093 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=928
2026-03-03 10:39:57.203 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:57.203 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:57.204 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:57.204 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:57.204 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:57.212 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=928
2026-03-03 10:39:57.326 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:57.327 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:57.327 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:57.328 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:57.328 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:57.336 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=928
2026-03-03 10:39:57.447 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:57.453 | ERROR | __main__:_recv:174 - [_recv] 数据不完整, 需要 3209 字节, 实际 1460 字节
2026-03-03 10:39:57.454 | ERROR | __main__:fetch_screen:211 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:39:57.554 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:57.554 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=4958
2026-03-03 10:39:57.555 | ERROR | __main__:parse_frame:97 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:39:57.555 | ERROR | __main__:fetch_screen:211 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:39:57.660 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:57.661 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:57.661 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:57.661 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:57.662 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:57.669 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=928
2026-03-03 10:39:57.782 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:57.782 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:57.783 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:57.783 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:57.783 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:57.790 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=928
2026-03-03 10:39:57.904 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:57.904 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:57.904 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:57.905 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:57.905 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:57.915 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=928
2026-03-03 10:39:58.026 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:58.026 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:58.026 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:58.026 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:58.026 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:58.033 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=928
2026-03-03 10:39:58.147 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:58.147 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:58.147 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:58.147 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:58.147 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:58.154 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=928
2026-03-03 10:39:58.267 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:58.267 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:58.267 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:58.267 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:58.267 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:58.275 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=928
2026-03-03 10:39:58.389 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:58.389 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:58.389 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:58.391 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:58.391 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:58.396 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=928
2026-03-03 10:39:58.498 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:58.498 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=3209
2026-03-03 10:39:58.498 | DEBUG | __main__:parse_frame:115 - [parse_frame] 成功解析帧 cmd=0x3, length=3204
2026-03-03 10:39:58.498 | DEBUG | __main__:fetch_screen:207 - [fetch_screen] 收到 LCDMEMpayload_len=3204
2026-03-03 10:39:58.499 | DEBUG | __main__:mono_to_png:222 - [mono_to_png] 开始转换为 PNGwidth=160, height=160, data_len=3200
2026-03-03 10:39:58.508 | DEBUG | __main__:mono_to_png:238 - [mono_to_png] 转换 PNG 成功, png_len=928
2026-03-03 10:39:58.618 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:58.619 | ERROR | __main__:_recv:174 - [_recv] 数据不完整, 需要 3209 字节, 实际 2048 字节
2026-03-03 10:39:58.619 | ERROR | __main__:fetch_screen:211 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:39:58.724 | DEBUG | __main__:_send:152 - [_send] 已发送 cmd=0x3, data_len=4
2026-03-03 10:39:58.724 | DEBUG | __main__:_recv:180 - [_recv] 收到原始数据 len=4370
2026-03-03 10:39:58.724 | ERROR | __main__:parse_frame:97 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:39:58.726 | ERROR | __main__:fetch_screen:211 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:39:58.736 | INFO | __main__:on_disconnect_device:374 - [on_disconnect_device] 前端请求断开设备 sid=KYbr0SIfA_Ge-yHjAAAB
2026-03-03 10:39:58.736 | INFO | __main__:disconnect_device:253 - [disconnect_device] 正在关闭与 DTU 的连接
2026-03-03 10:39:58.736 | INFO | __main__:_screen_refresh_loop:296 - [_screen_refresh_loop] 刷新线程退出
2026-03-03 10:39:58.737 | INFO | __main__:on_disconnect_device:380 - [on_disconnect_device] 设备已断开(若为最后一个客户端)
2026-03-03 10:42:03.734 | INFO | __main__:main:408 - 远程显示服务: http://localhost:8181
2026-03-03 10:42:03.735 | INFO | __main__:main:409 - 使用 WebSocket 传输,在浏览器中打开上述地址
2026-03-03 10:42:03.764 | INFO | __main__:on_connect:331 - [on_connect] WebSocket 客户端已连接 sid=5WGcCeshP4VteYt8AAAB
2026-03-03 10:42:10.376 | INFO | __main__:main:423 - 日志级别: INFO设置环境变量 LOG_LEVEL=DEBUG 可显示调试信息)
2026-03-03 10:42:10.376 | INFO | __main__:main:424 - 远程显示服务: http://localhost:8181
2026-03-03 10:42:10.376 | INFO | __main__:main:425 - 使用 WebSocket 传输,在浏览器中打开上述地址
2026-03-03 10:42:10.403 | INFO | __main__:on_connect:331 - [on_connect] WebSocket 客户端已连接 sid=W8a_sM62XqavuiVCAAAB
2026-03-03 10:42:15.940 | INFO | __main__:main:426 - 日志级别: INFO设置环境变量 LOG_LEVEL=DEBUG 可显示调试信息)
2026-03-03 10:42:15.941 | INFO | __main__:main:427 - 远程显示服务: http://localhost:8181
2026-03-03 10:42:15.941 | INFO | __main__:main:428 - 使用 WebSocket 传输,在浏览器中打开上述地址
2026-03-03 10:42:15.970 | INFO | __main__:on_connect:334 - [on_connect] WebSocket 客户端已连接 sid=4EYcfW07jGHRZ4WmAAAB
2026-03-03 10:44:27.578 | INFO | __main__:main:425 - 日志级别: INFO设置环境变量 LOG_LEVEL=DEBUG 可显示调试信息)
2026-03-03 10:44:27.578 | INFO | __main__:main:426 - 远程显示服务: http://localhost:8181
2026-03-03 10:44:27.578 | INFO | __main__:main:427 - 使用 WebSocket 传输,在浏览器中打开上述地址
2026-03-03 10:44:27.914 | INFO | __main__:on_connect:333 - [on_connect] WebSocket 客户端已连接 sid=kpFFdwZQI9_UkdRVAAAB
2026-03-03 10:44:31.364 | INFO | __main__:main:432 - 日志级别: INFO设置环境变量 LOG_LEVEL=DEBUG 可显示调试信息)
2026-03-03 10:44:31.364 | INFO | __main__:main:433 - 远程显示服务: http://localhost:8181
2026-03-03 10:44:31.365 | INFO | __main__:main:434 - 使用 WebSocket 传输,在浏览器中打开上述地址
2026-03-03 10:44:31.389 | INFO | __main__:on_connect:340 - [on_connect] WebSocket 客户端已连接 sid=fWxaQlSu66H29I2kAAAB
2026-03-03 10:44:35.913 | INFO | __main__:main:428 - 日志级别: INFO
2026-03-03 10:44:35.914 | INFO | __main__:main:429 - 远程显示服务: http://localhost:8181
2026-03-03 10:44:35.914 | INFO | __main__:main:430 - 使用 WebSocket 传输,在浏览器中打开上述地址
2026-03-03 10:44:36.676 | INFO | __main__:on_connect:340 - [on_connect] WebSocket 客户端已连接 sid=MqqCHhOXdrL5TKhEAAAB
2026-03-03 10:45:10.479 | INFO | __main__:main:428 - 日志级别: INFO
2026-03-03 10:45:10.481 | INFO | __main__:main:429 - 远程显示服务: http://localhost:8181
2026-03-03 10:45:10.481 | INFO | __main__:main:430 - 使用 WebSocket 传输,在浏览器中打开上述地址
2026-03-03 10:45:10.930 | INFO | __main__:on_connect:340 - [on_connect] WebSocket 客户端已连接 sid=XFoaDsSCPcyC2O4CAAAB
2026-03-03 10:45:50.769 | INFO | __main__:main:428 - 日志级别: INFO
2026-03-03 10:45:50.769 | INFO | __main__:main:429 - 远程显示服务: http://localhost:8181
2026-03-03 10:45:50.771 | INFO | __main__:main:430 - 使用 WebSocket 传输,在浏览器中打开上述地址
2026-03-03 10:45:50.800 | INFO | __main__:on_connect:340 - [on_connect] WebSocket 客户端已连接 sid=x3LE0sEpg8ZaNOzsAAAB
2026-03-03 10:46:00.098 | INFO | __main__:on_connect_device:362 - [on_connect_device] 请求连接 DTU: 192.168.253.3:7003
2026-03-03 10:46:00.119 | INFO | __main__:connect:146 - [connect] 连接 DTU 成功: 192.168.253.3:7003
2026-03-03 10:46:00.120 | INFO | __main__:_screen_refresh_loop:279 - [_screen_refresh_loop] 刷新线程启动
2026-03-03 10:46:00.120 | INFO | __main__:on_connect_device:370 - [on_connect_device] 已启动屏幕刷新线程
2026-03-03 10:46:00.121 | INFO | __main__:on_connect_device:372 - [on_connect_device] 连接 DTU 成功,已加入订阅 sid=x3LE0sEpg8ZaNOzsAAAB
2026-03-03 10:46:00.167 | ERROR | __main__:_recv:183 - [_recv] 数据不完整, 需要 3209 字节, 实际 1460 字节
2026-03-03 10:46:00.167 | ERROR | __main__:fetch_screen:220 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:46:00.269 | ERROR | __main__:parse_frame:106 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:46:00.269 | ERROR | __main__:fetch_screen:220 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:46:02.032 | ERROR | __main__:_recv:183 - [_recv] 数据不完整, 需要 3209 字节, 实际 1460 字节
2026-03-03 10:46:02.033 | ERROR | __main__:fetch_screen:220 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:46:02.146 | ERROR | __main__:parse_frame:106 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:46:02.147 | ERROR | __main__:fetch_screen:220 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:46:04.367 | ERROR | __main__:_recv:183 - [_recv] 数据不完整, 需要 3209 字节, 实际 1460 字节
2026-03-03 10:46:04.367 | ERROR | __main__:fetch_screen:220 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:46:04.473 | ERROR | __main__:parse_frame:106 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:46:04.474 | ERROR | __main__:fetch_screen:220 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:46:04.833 | ERROR | __main__:_recv:183 - [_recv] 数据不完整, 需要 3209 字节, 实际 1460 字节
2026-03-03 10:46:04.833 | ERROR | __main__:fetch_screen:220 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:46:04.943 | ERROR | __main__:parse_frame:106 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:46:04.944 | ERROR | __main__:fetch_screen:220 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:46:06.801 | ERROR | __main__:_recv:183 - [_recv] 数据不完整, 需要 3209 字节, 实际 1460 字节
2026-03-03 10:46:06.801 | ERROR | __main__:fetch_screen:220 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:46:06.903 | ERROR | __main__:parse_frame:106 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:46:06.903 | ERROR | __main__:fetch_screen:220 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:46:07.711 | INFO | __main__:on_disconnect_device:383 - [on_disconnect_device] 前端请求断开设备 sid=x3LE0sEpg8ZaNOzsAAAB
2026-03-03 10:46:07.712 | INFO | __main__:disconnect_device:262 - [disconnect_device] 正在关闭与 DTU 的连接
2026-03-03 10:46:07.712 | INFO | __main__:_screen_refresh_loop:305 - [_screen_refresh_loop] 刷新线程退出
2026-03-03 10:46:07.712 | INFO | __main__:on_disconnect_device:389 - [on_disconnect_device] 设备已断开(若为最后一个客户端)
2026-03-03 10:48:17.165 | INFO | __main__:main:447 - 日志级别: INFO
2026-03-03 10:48:17.165 | INFO | __main__:main:448 - 远程显示服务: http://localhost:8181
2026-03-03 10:48:17.167 | INFO | __main__:main:449 - 使用 WebSocket 传输,在浏览器中打开上述地址
2026-03-03 10:48:17.894 | INFO | __main__:on_connect:359 - [on_connect] WebSocket 客户端已连接 sid=mRDPLRSJgqAGeYNnAAAB
2026-03-03 10:49:32.451 | INFO | __main__:main:447 - 日志级别: INFO
2026-03-03 10:49:32.451 | INFO | __main__:main:448 - 远程显示服务: http://localhost:8181
2026-03-03 10:49:32.451 | INFO | __main__:main:449 - 使用 WebSocket 传输,在浏览器中打开上述地址
2026-03-03 10:49:32.607 | INFO | __main__:on_connect:359 - [on_connect] WebSocket 客户端已连接 sid=f7ZyM2Ov63vgtKalAAAB
2026-03-03 10:49:35.851 | INFO | __main__:on_disconnect:367 - [on_disconnect] WebSocket 客户端断开 sid=f7ZyM2Ov63vgtKalAAAB
2026-03-03 10:49:35.983 | INFO | __main__:on_connect:359 - [on_connect] WebSocket 客户端已连接 sid=PFi1_1ZJ9M7nGGCFAAAD
2026-03-03 10:49:37.907 | INFO | __main__:on_connect_device:381 - [on_connect_device] 请求连接 DTU: 192.168.253.3:7003
2026-03-03 10:49:37.931 | INFO | __main__:connect:146 - [connect] 连接 DTU 成功: 192.168.253.3:7003
2026-03-03 10:49:37.931 | INFO | __main__:_screen_refresh_loop:298 - [_screen_refresh_loop] 刷新线程启动
2026-03-03 10:49:37.931 | INFO | __main__:on_connect_device:389 - [on_connect_device] 已启动屏幕刷新线程
2026-03-03 10:49:37.932 | INFO | __main__:on_connect_device:391 - [on_connect_device] 连接 DTU 成功,已加入订阅 sid=PFi1_1ZJ9M7nGGCFAAAD
2026-03-03 10:50:50.153 | INFO | __main__:main:447 - 日志级别: INFO
2026-03-03 10:50:50.153 | INFO | __main__:main:448 - 远程显示服务: http://localhost:8181
2026-03-03 10:50:50.153 | INFO | __main__:main:449 - 使用 WebSocket 传输,在浏览器中打开上述地址
2026-03-03 10:50:50.178 | INFO | __main__:on_connect:359 - [on_connect] WebSocket 客户端已连接 sid=v7jDucygwL-SI5UhAAAB
2026-03-03 10:50:58.018 | INFO | __main__:on_disconnect_device:402 - [on_disconnect_device] 前端请求断开设备 sid=v7jDucygwL-SI5UhAAAB
2026-03-03 10:50:58.018 | INFO | __main__:on_disconnect_device:408 - [on_disconnect_device] 设备已断开(若为最后一个客户端)
2026-03-03 10:50:59.618 | INFO | __main__:on_connect_device:381 - [on_connect_device] 请求连接 DTU: 192.168.253.3:7003
2026-03-03 10:50:59.621 | INFO | __main__:connect:146 - [connect] 连接 DTU 成功: 192.168.253.3:7003
2026-03-03 10:50:59.622 | INFO | __main__:_screen_refresh_loop:298 - [_screen_refresh_loop] 刷新线程启动
2026-03-03 10:50:59.622 | INFO | __main__:on_connect_device:389 - [on_connect_device] 已启动屏幕刷新线程
2026-03-03 10:50:59.622 | INFO | __main__:on_connect_device:391 - [on_connect_device] 连接 DTU 成功,已加入订阅 sid=v7jDucygwL-SI5UhAAAB
2026-03-03 10:51:14.877 | INFO | __main__:main:447 - 日志级别: INFO
2026-03-03 10:51:14.877 | INFO | __main__:main:448 - 远程显示服务: http://localhost:8181
2026-03-03 10:51:14.878 | INFO | __main__:main:449 - 使用 WebSocket 传输,在浏览器中打开上述地址
2026-03-03 10:51:15.157 | INFO | __main__:on_connect:359 - [on_connect] WebSocket 客户端已连接 sid=2DZB0uc0SIWIREuiAAAB
2026-03-03 10:52:45.587 | INFO | __main__:main:447 - 日志级别: INFO
2026-03-03 10:52:45.587 | INFO | __main__:main:448 - 远程显示服务: http://localhost:8181
2026-03-03 10:52:45.588 | INFO | __main__:main:449 - 使用 WebSocket 传输,在浏览器中打开上述地址
2026-03-03 10:52:46.054 | INFO | __main__:on_connect:359 - [on_connect] WebSocket 客户端已连接 sid=5QBk67LW-TFDL6tHAAAB
2026-03-03 10:52:47.445 | INFO | __main__:on_disconnect:367 - [on_disconnect] WebSocket 客户端断开 sid=5QBk67LW-TFDL6tHAAAB
2026-03-03 10:52:47.518 | INFO | __main__:on_connect:359 - [on_connect] WebSocket 客户端已连接 sid=RPNvfkDbk1Eonm-BAAAD
2026-03-03 10:52:51.425 | INFO | __main__:on_connect_device:381 - [on_connect_device] 请求连接 DTU: 192.168.253.3:7003
2026-03-03 10:52:51.442 | INFO | __main__:connect:146 - [connect] 连接 DTU 成功: 192.168.253.3:7003
2026-03-03 10:52:51.442 | INFO | __main__:_screen_refresh_loop:298 - [_screen_refresh_loop] 刷新线程启动
2026-03-03 10:52:51.442 | INFO | __main__:on_connect_device:389 - [on_connect_device] 已启动屏幕刷新线程
2026-03-03 10:52:51.443 | INFO | __main__:on_connect_device:391 - [on_connect_device] 连接 DTU 成功,已加入订阅 sid=RPNvfkDbk1Eonm-BAAAD
2026-03-03 10:53:08.347 | ERROR | __main__:parse_frame:106 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:53:08.347 | ERROR | __main__:fetch_screen:239 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:53:11.872 | ERROR | __main__:parse_frame:106 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:53:11.872 | ERROR | __main__:fetch_screen:239 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:53:13.715 | ERROR | __main__:parse_frame:106 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:53:13.716 | ERROR | __main__:fetch_screen:239 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:53:14.049 | ERROR | __main__:parse_frame:106 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:53:14.049 | ERROR | __main__:fetch_screen:239 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:53:15.355 | ERROR | __main__:parse_frame:106 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:53:15.355 | ERROR | __main__:fetch_screen:239 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:53:15.461 | ERROR | __main__:parse_frame:106 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:53:15.463 | ERROR | __main__:fetch_screen:239 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:53:17.394 | ERROR | __main__:parse_frame:106 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:53:17.395 | ERROR | __main__:fetch_screen:239 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:53:18.778 | ERROR | __main__:parse_frame:106 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:53:18.779 | ERROR | __main__:fetch_screen:239 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:53:20.549 | ERROR | __main__:parse_frame:106 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:53:20.549 | ERROR | __main__:fetch_screen:239 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:53:21.248 | ERROR | __main__:parse_frame:106 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:53:21.248 | ERROR | __main__:fetch_screen:239 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:53:22.066 | ERROR | __main__:parse_frame:106 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:53:22.066 | ERROR | __main__:fetch_screen:239 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:53:23.254 | ERROR | __main__:parse_frame:106 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:53:23.254 | ERROR | __main__:fetch_screen:239 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:53:44.448 | ERROR | __main__:parse_frame:106 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:53:44.448 | ERROR | __main__:fetch_screen:239 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:53:58.162 | ERROR | __main__:parse_frame:106 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:53:58.162 | ERROR | __main__:fetch_screen:239 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:53:59.088 | ERROR | __main__:parse_frame:106 - [parse_frame] 帧太短或帧头不是 TAG_DEVICE(0xBB), len=5
2026-03-03 10:53:59.088 | ERROR | __main__:fetch_screen:239 - [fetch_screen] 未收到有效 LCDMEM 回复result=None
2026-03-03 10:54:51.004 | INFO | __main__:main:454 - 日志级别: INFO
2026-03-03 10:54:51.005 | INFO | __main__:main:455 - 远程显示服务: http://localhost:8181
2026-03-03 10:54:51.005 | INFO | __main__:main:456 - 使用 WebSocket 传输,在浏览器中打开上述地址
2026-03-03 10:54:51.038 | INFO | __main__:on_connect:366 - [on_connect] WebSocket 客户端已连接 sid=BRUqnH5JE_4q_ZfiAAAB
2026-03-03 10:55:00.524 | INFO | __main__:main:454 - 日志级别: INFO
2026-03-03 10:55:00.525 | INFO | __main__:main:455 - 远程显示服务: http://localhost:8181
2026-03-03 10:55:00.526 | INFO | __main__:main:456 - 使用 WebSocket 传输,在浏览器中打开上述地址
2026-03-03 10:55:00.561 | INFO | __main__:on_connect:366 - [on_connect] WebSocket 客户端已连接 sid=bIsKlXE2qx-4QLI3AAAB

View File

@@ -236,6 +236,7 @@ def fetch_screen() -> Optional[bytes]:
if not _send(CMD_LCDMEM, struct.pack(">I", 0)): # 发送读取显存命令,起始地址 0大端 4 字节) if not _send(CMD_LCDMEM, struct.pack(">I", 0)): # 发送读取显存命令,起始地址 0大端 4 字节)
logger.error("[fetch_screen] 发送 CMD_LCDMEM 失败") logger.error("[fetch_screen] 发送 CMD_LCDMEM 失败")
return None return None
logger.debug("[fetch_screen] 发送 CMD_LCDMEM 成功")
result = _recv() # 接收设备回复 result = _recv() # 接收设备回复
if not result: if not result:
logger.error("[fetch_screen] 未收到任何回复result=None") logger.error("[fetch_screen] 未收到任何回复result=None")
@@ -268,11 +269,16 @@ def mono_to_png(data: bytes, width: int, height: int) -> Optional[bytes]:
) )
img = Image.new("1", (width, height)) # 创建 1bpp 黑白图像 img = Image.new("1", (width, height)) # 创建 1bpp 黑白图像
pix = img.load() # 获取像素访问对象 pix = img.load() # 获取像素访问对象
'''
for y in range(height): for y in range(height):
for x in range(width): for x in range(width):
bi = (y * width + x) // 8 # 字节索引:每 8 像素一字节 bi = (y * width + x) // 8 # 字节索引:每 8 像素一字节
bit = 7 - (x % 8) # 位索引:高位在前 bit = 7 - (x % 8) # 位索引:高位在前
pix[x, y] = 0 if (bi < len(data) and (data[bi] >> bit) & 1) else 255 # 1→白 0→黑 pix[x, y] = 0 if (bi < len(data) and (data[bi] >> bit) & 1) else 255 # 1→白 0→黑
'''
for y in range(height):
for x in range(width):
pix[x, y] = data[y * width + x]
buf = io.BytesIO() # 内存缓冲区 buf = io.BytesIO() # 内存缓冲区
img.save(buf, format="PNG") # 保存为 PNG 格式 img.save(buf, format="PNG") # 保存为 PNG 格式
png_bytes = buf.getvalue() png_bytes = buf.getvalue()
@@ -305,15 +311,21 @@ def disconnect_device():
def _screen_refresh_loop(): def _screen_refresh_loop():
""" """
后台线程:每约 100ms 拉取一帧屏幕,转 PNG 后 base64 推送给各 WebSocket 客户端。 后台线程:每约 100ms 拉取一帧屏幕,转 PNG 后 base64 推送给各 WebSocket 客户端。
若检测到远程服务端断开(连续多次拉取失败),则断开设备并停止重复请求。
_refresh_stop.wait(0.1) 既作间隔,也便于收到 set 时快速退出。 _refresh_stop.wait(0.1) 既作间隔,也便于收到 set 时快速退出。
""" """
global _screen_clients, _refresh_stop global _screen_clients, _refresh_stop
logger.info("[_screen_refresh_loop] 刷新线程启动") logger.info("[_screen_refresh_loop] 刷新线程启动")
# 连续拉取失败次数,超过阈值则认为远程已断开
MAX_CONSECUTIVE_FAILURES = 5
consecutive_failures = 0
try: try:
while not _refresh_stop.is_set(): # 未被要求停止时持续循环 while not _refresh_stop.is_set(): # 未被要求停止时持续循环
if _screen_clients and _sock: # 有客户端且已连接设备 if _screen_clients and _sock: # 有客户端且已连接设备
data = fetch_screen() # 拉取屏幕位图 data = fetch_screen() # 拉取屏幕位图
logger.debug("[fetch_screen] 拉取屏幕位图数据: {data}", data=data)
if data: if data:
consecutive_failures = 0 # 成功则清零
# 当前协议未返回宽高,这里固定为 160x160可根据实际情况调整 # 当前协议未返回宽高,这里固定为 160x160可根据实际情况调整
w, h = 160, 160 w, h = 160, 160
png = mono_to_png(data, w, h) # 转为 PNG png = mono_to_png(data, w, h) # 转为 PNG
@@ -332,6 +344,24 @@ def _screen_refresh_loop():
sid=sid, sid=sid,
err=e, err=e,
) )
else:
# 拉取失败,累计连续失败次数
consecutive_failures += 1
if consecutive_failures >= MAX_CONSECUTIVE_FAILURES:
logger.warning(
"[_screen_refresh_loop] 连续 {n} 次拉取失败,判定远程服务端已断开,停止请求并断开连接",
n=consecutive_failures,
)
disconnect_device()
# 通知所有订阅客户端:设备已断开
for sid in list(_screen_clients):
try:
socketio.emit("device_disconnected", {"reason": "remote_closed"}, room=sid)
except Exception as e:
logger.debug("[_screen_refresh_loop] 推送 device_disconnected 失败 sid={sid} - {err}", sid=sid, err=e)
consecutive_failures = 0
else:
consecutive_failures = 0 # 无客户端或未连接时清零,便于下次连接后重新计数
_refresh_stop.wait(timeout=0.1) # 等待 100ms若被 set 则立即返回 _refresh_stop.wait(timeout=0.1) # 等待 100ms若被 set 则立即返回
finally: finally:
logger.info("[_screen_refresh_loop] 刷新线程退出") logger.info("[_screen_refresh_loop] 刷新线程退出")

View File

@@ -336,7 +336,7 @@
<div class="modal" id="connectModal"> <div class="modal" id="connectModal">
<div class="modal-content"> <div class="modal-content">
<h3>连接装置</h3> <h3>连接装置</h3>
<input type="text" id="hostInput" placeholder="装置 IP 地址" value="192.168.253.3"> <input type="text" id="hostInput" placeholder="装置 IP 地址" value="127.0.0.1">
<input type="number" id="portInput" placeholder="端口" value="7003"> <input type="number" id="portInput" placeholder="端口" value="7003">
<div class="btn-row"> <div class="btn-row">
<button class="btn-secondary" id="modalCancel">取消</button> <button class="btn-secondary" id="modalCancel">取消</button>