fix: MQTT PUBLISH 接收修复 — topic 过滤 + cmd/Method 双格式支持

问题: mqtt_data_manage() 的 PUBLISH 分支直接调用 manage_mqtt_recv_message(),
      跳过了 mqtt_deserialize_publish() 的 topic 过滤, 且只支持旧 Method 格式.

修复:
- mqtt_data_manage: PUBLISH 改为走 mqtt_deserialize_publish 做 topic 匹配
- mqtt_deserialize_publish: topic 过滤已改用 g_iot_topic.topic_sub
- manage_mqtt_recv_message: 优先解析 cmd, 兼容旧 Method 字段
This commit is contained in:
wangfq
2026-07-07 12:09:07 +08:00
parent ab3a4cea0a
commit 3cdc5b6286
@@ -396,7 +396,12 @@ void mqtt_data_manage(uint8_t id)
case PUBLISH:
MQTTDeserialize_publish(&dup, &qos, &retained, &packetid,
&topicName, &payload, &payloadlen, MyBuf, len);
manage_mqtt_recv_message((char *)payload, payloadlen);
/* V1.01: 通过 mqtt_deserialize_publish 做 topic 过滤 */
{
char TmpBuf[128] = {0};
memcpy(TmpBuf, topicName.lenstring.data, topicName.lenstring.len);
mqtt_deserialize_publish(TmpBuf, (char *)payload, payloadlen);
}
reset_net_active_timeup();
break;
case SUBACK:
@@ -1052,7 +1057,12 @@ void manage_mqtt_recv_message(char * msg, int length)
}
reset_temp_guide();
simple_parse_json(msg, DPG_API_KEY_METHOD, temp_guide);
// V1.01: 优先解析新协议 cmd 字段,兼容旧 Method 字段
simple_parse_json(msg, "\"cmd\"", temp_guide);
if(strlen(temp_guide) == 0) {
simple_parse_json(msg, DPG_API_KEY_METHOD, temp_guide);
}
if(strlen(temp_guide) == 0)
{
@@ -1060,9 +1070,16 @@ void manage_mqtt_recv_message(char * msg, int length)
return;
}
PRINT("Rcv_Dis_LED_m:%s\n", temp_guide);
// 旧协议: Method = Heartbeat → 回复心跳
if(strstr(temp_guide, "Heartbeat") != NULL)
{
dev_response_heartbeat(NULL);
}
// 新协议: 解析 cmd 并打印(后续可扩展命令处理)
else if(strlen(temp_guide) > 0)
{
PRINT("MQTT cmd/method: %s, raw: %s\n", temp_guide, msg);
}
else {
PRINT("Unknown MQTT method: %s\n", msg);