feat(DBNMQTTool): 脱机日志支持快照流 stream=snapshot (2026-08-18)
- protocol.py: STREAM_EVENT/STREAM_SNAPSHOT 常量, data_log_query 加 stream 参数(快照流 count≤2), 新增 data_log_clear(stream), SNAP_MISC_TYPE_DESC - main.py: 日志流选择器 + 三命令按流发请求 + log_stat/log_query 响应区分流(快照 channels 逐字段展示) - 验证: protocol 断言 6 例 + offscreen MainWindow 快照/事件流展示实测全过 - devlog 置顶 + .gitignore (venv/)
This commit is contained in:
@@ -78,6 +78,10 @@ CONFIG_QUERY_COMMANDS = {CMD_DEV_INFO_QUERY, CMD_SSC_NET_QUERY, CMD_IOT_NET_QUER
|
||||
CTRL_COMMANDS = {CMD_PWD_VERIFY, CMD_PWD_SET, CMD_FACTORY_RESET, CMD_DEVICE_RESET, CMD_REPORT_CONFIG}
|
||||
LOG_COMMANDS = {CMD_LOG_STAT, CMD_LOG_QUERY, CMD_LOG_CLEAR} # V1.06 脱机日志
|
||||
|
||||
# V1.07: log_* 命令日志流 (与 BLE 0x28/0x2A 同语义)
|
||||
STREAM_EVENT = "event"
|
||||
STREAM_SNAPSHOT = "snapshot"
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 错误码
|
||||
@@ -125,6 +129,14 @@ LOG_EVENT_TYPE_DESC = {
|
||||
"unknown": "未知类型",
|
||||
}
|
||||
|
||||
# 传感快照 channels[].misc_type 描述 (log_query stream=snapshot, MQTT V1.07)
|
||||
SNAP_MISC_TYPE_DESC = {
|
||||
"time": "时间量(50ms)",
|
||||
"cut_count": "线圈断开次数",
|
||||
"flow_count": "车流量",
|
||||
"relay_count": "继电器输出次数",
|
||||
}
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 消息构建
|
||||
@@ -235,12 +247,29 @@ def data_report_config(sensor_type: int = 12, enable: bool = True,
|
||||
}
|
||||
|
||||
|
||||
def data_log_query(start_seq: int = 1, count: int = 4) -> dict:
|
||||
"""V1.06 log_query 分页拉取脱机事件日志 (count 上限 4, 设备侧超限按 4 处理)"""
|
||||
return {
|
||||
def data_log_query(start_seq: int = 1, count: int = 4, stream: str = STREAM_EVENT) -> dict:
|
||||
"""V1.07 log_query 分页拉取脱机日志
|
||||
stream=event: 事件流, count 上限 4 (设备侧超限按 4 处理)
|
||||
stream=snapshot: 快照流, count 上限 2 (64B×2 记录); 显式传 stream 字段
|
||||
"""
|
||||
d: dict[str, Any] = {
|
||||
"start_seq": max(1, int(start_seq)),
|
||||
"count": min(4, max(1, int(count))),
|
||||
}
|
||||
if stream == STREAM_SNAPSHOT:
|
||||
d["stream"] = STREAM_SNAPSHOT
|
||||
d["count"] = min(2, max(1, int(count)))
|
||||
return d
|
||||
|
||||
|
||||
def data_log_clear(stream: str = STREAM_EVENT) -> dict:
|
||||
"""V1.07 log_clear 清除脱机日志 (审计留痕)
|
||||
stream=snapshot: 快照流清除 (~45ms, 审计写事件流)
|
||||
event 流省略 data (设备缺省 event, 兼容老固件)
|
||||
"""
|
||||
if stream == STREAM_SNAPSHOT:
|
||||
return {"stream": STREAM_SNAPSHOT}
|
||||
return {}
|
||||
|
||||
|
||||
# ============================================================
|
||||
|
||||
Reference in New Issue
Block a user