fix(iot_mqtt): 精简 loop_data JSON 避免 WCHNET_SocketSend 超大包崩溃
问题: 4通道传感器数据 JSON ~700字节 → MQTT Publish 733字节
超过 WCHNET TCP MSS(576) 和原始 MAX_MQTTBUF_LEN(512) 设计上限
WCHNET_SocketSend(733) 导致设备重启
修复:
- 移除非必要字段: freq_current, freq_diff, condition
- 展平 misc 嵌套对象 → mt(类型) + mv(数值)
- 缩短 key 名: freq_level→fl, has_car→car, loop_ok→ok, sensitivity→sens
- 每通道 ~70字, 4通道 ~280, 全包 ~400字节
- 加安全检查: payload >450 时跳过并打印警告
This commit is contained in:
@@ -414,17 +414,14 @@ void iot_mqtt_publish_sensor(void) {
|
||||
const char *freq_level_names[] = {"high", "mid_high", "mid_low", "low"};
|
||||
|
||||
written = snprintf(p, remaining,
|
||||
"%s{\"ch\":%d,\"freq_level\":\"%s\",\"has_car\":%s,"
|
||||
"\"loop_ok\":%s,\"freq_current\":%lu,\"freq_diff\":%d,"
|
||||
"\"sensitivity\":%d,\"condition\":%d,"
|
||||
"\"misc\":{\"type\":\"%s\",\"value\":%lu}}",
|
||||
"%s{\"ch\":%d,\"fl\":\"%s\",\"car\":%s,"
|
||||
"\"ok\":%s,\"sens\":%d,\"mt\":\"%s\",\"mv\":%lu}",
|
||||
(i > 0) ? "," : "",
|
||||
i + 1,
|
||||
freq_level_names[cs->freq_level],
|
||||
cs->car_state ? "true" : "false",
|
||||
cs->loop_state ? "false" : "true",
|
||||
cs->freq, cs->variation,
|
||||
cs->sensitivity, cs->condition,
|
||||
cs->sensitivity,
|
||||
misc_type_str, misc_val);
|
||||
if (written < 0 || written >= remaining) goto done;
|
||||
p += written; remaining -= written;
|
||||
@@ -440,7 +437,14 @@ void iot_mqtt_publish_sensor(void) {
|
||||
|
||||
char topic[IOT_MQTT_TOPIC_MAX_LEN];
|
||||
iot_make_topic(topic, sizeof(topic), "dev", "data", "loop");
|
||||
iot_mqtt_publish(topic, payload, strlen(payload), 0);
|
||||
{
|
||||
uint16_t plen = (uint16_t)strlen(payload);
|
||||
if (plen > 450) {
|
||||
PRINT("IOT: payload too large (%u bytes), skipping\n", plen);
|
||||
} else {
|
||||
iot_mqtt_publish(topic, payload, plen, 0);
|
||||
}
|
||||
}
|
||||
|
||||
done:
|
||||
InitPkgUart(&g_pkg_uart_2);
|
||||
|
||||
Reference in New Issue
Block a user