如何在第二段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
相关产品推荐
相关产品推荐

