You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在第二段MQTT Payload构建代码中添加Topic字段?

解决MQTT Payload添加Topic字段的问题

我明白你想让第二段代码生成的Payload带上Topic字段,和第一段的格式对齐。咱们直接看具体的修改方案:

核心思路

原来的S_JSON_COMMAND_INDEX_SVALUE宏应该只定义了生成RfKey键值对的格式化字符串,咱们需要扩展这个字符串,加上Topic字段的模板,同时在snprintf_P的参数里补上Settings.mqtt_topic的值。

具体修改方案

方案1:直接修改snprintf_P的格式化字符串(无需改动宏)

把原来的代码替换成下面这段:

snprintf_P(mqtt_data, sizeof(mqtt_data), 
           PSTR("{\"%s%d\":\"%s\", \"" D_TOPIC "\":%s}"), 
           D_CMND_RFKEY, sonoff_bridge_learn_key, D_LEARNED, Settings.mqtt_topic); 
MqttPublishPrefixTopic_P(5, PSTR(D_CMND_RFKEY));

如果Settings.mqtt_topic是整数类型(看你第一段的示例里Topic是数字10101019),记得把格式化字符串里的%s改成%d:

snprintf_P(mqtt_data, sizeof(mqtt_data), 
           PSTR("{\"%s%d\":\"%s\", \"" D_TOPIC "\":%d}"), 
           D_CMND_RFKEY, sonoff_bridge_learn_key, D_LEARNED, Settings.mqtt_topic); 

方案2:更新宏定义(如果允许修改S_JSON_COMMAND_INDEX_SVALUE)

如果你希望复用这个宏,直接更新它的定义:

// 替换原来的宏定义
#define S_JSON_COMMAND_INDEX_SVALUE PSTR("{\"%s%d\":\"%s\", \"" D_TOPIC "\":%s}")

然后调用的时候补上Settings.mqtt_topic参数:

snprintf_P(mqtt_data, sizeof(mqtt_data), S_JSON_COMMAND_INDEX_SVALUE, 
           D_CMND_RFKEY, sonoff_bridge_learn_key, D_LEARNED, Settings.mqtt_topic); 
MqttPublishPrefixTopic_P(5, PSTR(D_CMND_RFKEY));

同样,如果Settings.mqtt_topic是整数,把宏里的%s改成%d。

验证效果

修改后生成的Payload就会变成你想要的格式:
{"RfKey1":"Learned", "Topic":10101019}

内容的提问来源于stack exchange,提问作者diego jimenez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:42:28