feat: V1.03 initialize 上线消息 — 固件+工具同步
vd960DBN:
- dev_initialize_pub() 改为 V1.03 格式 (msg_id/cmd/ts/data/extra_info)
- iot_mqtt_srv: 订阅改双主题 dld960/{sn}/srv, 响应 topic 改 dev
- SUBACK 后自动发 initialize 告知服务器上线
- net_srv.h: 加 dev_initialize_pub 声明
DBNMQTTool:
- protocol.py: 加 CMD_INITIALIZE
- device_manager: DeviceInfo 加 extra_info, 加 mark_online()
- main.py: 接收 initialize 消息, 自动标记设备上线
- docs: 协议 V1.03 + devlog V3.1
This commit is contained in:
@@ -22,6 +22,7 @@ class DeviceInfo:
|
||||
online: bool = False
|
||||
loop_data: Optional[dict] = None
|
||||
events: list = field(default_factory=list)
|
||||
extra_info: dict = field(default_factory=dict) # from initialize 消息
|
||||
|
||||
|
||||
class DeviceManager:
|
||||
@@ -91,6 +92,17 @@ class DeviceManager:
|
||||
dev.online = True
|
||||
self._notify()
|
||||
|
||||
def mark_online(self, dev_serial: str, extra_info: Optional[dict] = None):
|
||||
"""V1.03: 设备上线初始化标记"""
|
||||
with self._lock:
|
||||
dev = self.get_or_create(dev_serial)
|
||||
dev.online = True
|
||||
dev.last_seen = datetime.now()
|
||||
if extra_info:
|
||||
dev.extra_info = extra_info
|
||||
dev.soft_ver = extra_info.get("version", dev.soft_ver)
|
||||
self._notify()
|
||||
|
||||
def set_offline(self):
|
||||
"""标记所有设备离线(断开连接时调用)"""
|
||||
with self._lock:
|
||||
|
||||
@@ -65,6 +65,7 @@ CMD_REPORT_CONFIG = "report_config"
|
||||
CMD_LOOP_DATA = "loop_data"
|
||||
CMD_EVENT_REPORT = "event_report"
|
||||
CMD_HEARTBEAT = "heartbeat"
|
||||
CMD_INITIALIZE = "initialize" # V1.03: 设备上电初始化
|
||||
|
||||
# 配置类命令 → topic
|
||||
CONFIG_SET_COMMANDS = {CMD_DEV_SERIAL_SET, CMD_SSC_NET_SET, CMD_IOT_NET_SET, CMD_IOT_TOPIC_SET, CMD_LOOP_PARAM_SET}
|
||||
|
||||
+10
-1
@@ -30,7 +30,7 @@ from dbn_mqtt_tool.protocol import (
|
||||
CMD_IOT_TOPIC_QUERY, CMD_LOOP_PARAM_QUERY, CMD_REPORT_CONFIG,
|
||||
CMD_SSC_NET_SET, CMD_IOT_NET_SET, CMD_IOT_TOPIC_SET,
|
||||
CMD_PWD_VERIFY, CMD_PWD_SET, CMD_FACTORY_RESET, CMD_DEVICE_RESET,
|
||||
CMD_LOOP_DATA, CMD_EVENT_REPORT, CMD_HEARTBEAT,
|
||||
CMD_LOOP_DATA, CMD_EVENT_REPORT, CMD_HEARTBEAT, CMD_INITIALIZE,
|
||||
ERROR_MSGS, FREQ_LEVELS, OUTPUT_MODES, EVENT_TYPES,
|
||||
data_ssc_net_set, data_iot_net_set, data_iot_topic_set,
|
||||
data_pwd_verify, data_pwd_set, data_report_config,
|
||||
@@ -857,6 +857,15 @@ class MainWindow(QMainWindow):
|
||||
self._devmgr.update_heartbeat(dev_serial, data)
|
||||
self._log_recv(topic, payload, f"heartbeat uptime={data.get('uptime', 0)}s")
|
||||
|
||||
elif cmd == CMD_INITIALIZE:
|
||||
# V1.03: 设备上线初始化
|
||||
data = payload.get("data", {})
|
||||
dev_sn = data.get("dev_serial", dev_serial)
|
||||
extra = data.get("extra_info", {})
|
||||
self._devmgr.mark_online(dev_sn, extra)
|
||||
self._log_recv(topic, payload, f"initialize sn={dev_sn} ver={extra.get('version','?')}")
|
||||
self._show_json({"online": dev_sn, "info": extra})
|
||||
|
||||
# 旧协议 / 无 cmd 字段 的消息(如 Initialize)
|
||||
elif "Method" in payload:
|
||||
self._log_recv(topic, payload, f"Method={payload.get('Method', '?')}")
|
||||
|
||||
Reference in New Issue
Block a user