mirror of
https://github.com/arendst/Tasmota.git
synced 2025-04-25 07:17:16 +00:00
Merge pull request #8529 from abmaonline/encode-json
Encode json string from serial to mqtt
This commit is contained in:
commit
ed543d93c3
@ -1345,12 +1345,23 @@ void SerialInput(void)
|
||||
|
||||
if (Settings.flag.mqtt_serial && serial_in_byte_counter && (millis() > (serial_polling_window + SERIAL_POLLING))) { // CMND_SERIALSEND and CMND_SERIALLOG
|
||||
serial_in_buffer[serial_in_byte_counter] = 0; // Serial data completed
|
||||
char hex_char[(serial_in_byte_counter * 2) + 2];
|
||||
bool assume_json = (!Settings.flag.mqtt_serial_raw && (serial_in_buffer[0] == '{'));
|
||||
Response_P(PSTR("{\"" D_JSON_SERIALRECEIVED "\":%s%s%s}"),
|
||||
(assume_json) ? "" : "\"",
|
||||
(Settings.flag.mqtt_serial_raw) ? ToHex_P((unsigned char*)serial_in_buffer, serial_in_byte_counter, hex_char, sizeof(hex_char)) : serial_in_buffer,
|
||||
(assume_json) ? "" : "\"");
|
||||
|
||||
Response_P(PSTR("{\"" D_JSON_SERIALRECEIVED "\":"));
|
||||
if (assume_json) {
|
||||
ResponseAppend_P(serial_in_buffer);
|
||||
} else {
|
||||
ResponseAppend_P(PSTR("\""));
|
||||
if (Settings.flag.mqtt_serial_raw) {
|
||||
char hex_char[(serial_in_byte_counter * 2) + 2];
|
||||
ResponseAppend_P(ToHex_P((unsigned char*)serial_in_buffer, serial_in_byte_counter, hex_char, sizeof(hex_char)));
|
||||
} else {
|
||||
ResponseAppend_P(EscapeJSONString(serial_in_buffer).c_str());
|
||||
}
|
||||
ResponseAppend_P(PSTR("\""));
|
||||
}
|
||||
ResponseAppend_P(PSTR("}"));
|
||||
|
||||
MqttPublishPrefixTopic_P(RESULT_OR_TELE, PSTR(D_JSON_SERIALRECEIVED));
|
||||
XdrvRulesProcess();
|
||||
serial_in_byte_counter = 0;
|
||||
|
@ -129,7 +129,7 @@ const uint16_t FLOATSZ = 16; // Max number of characters in float
|
||||
const uint16_t CMDSZ = 24; // Max number of characters in command
|
||||
const uint16_t TOPSZ = 151; // Max number of characters in topic string
|
||||
const uint16_t LOGSZ = 700; // Max number of characters in log
|
||||
const uint16_t MIN_MESSZ = 1040; // Min number of characters in MQTT message (1000 - TOPSZ - 9 header bytes)
|
||||
const uint16_t MIN_MESSZ = 1040; // Min number of characters in MQTT message (1200 - TOPSZ - 9 header bytes)
|
||||
|
||||
const uint8_t SENSOR_MAX_MISS = 5; // Max number of missed sensor reads before deciding it's offline
|
||||
|
||||
|
@ -76,12 +76,23 @@ void SerialBridgeInput(void)
|
||||
|
||||
if (serial_bridge_in_byte_counter && (millis() > (serial_bridge_polling_window + SERIAL_POLLING))) {
|
||||
serial_bridge_buffer[serial_bridge_in_byte_counter] = 0; // Serial data completed
|
||||
char hex_char[(serial_bridge_in_byte_counter * 2) + 2];
|
||||
bool assume_json = (!serial_bridge_raw && (serial_bridge_buffer[0] == '{'));
|
||||
Response_P(PSTR("{\"" D_JSON_SSERIALRECEIVED "\":%s%s%s}"),
|
||||
(assume_json) ? "" : "\"",
|
||||
(serial_bridge_raw) ? ToHex_P((unsigned char*)serial_bridge_buffer, serial_bridge_in_byte_counter, hex_char, sizeof(hex_char)) : serial_bridge_buffer,
|
||||
(assume_json) ? "" : "\"");
|
||||
|
||||
Response_P(PSTR("{\"" D_JSON_SSERIALRECEIVED "\":"));
|
||||
if (assume_json) {
|
||||
ResponseAppend_P(serial_bridge_buffer);
|
||||
} else {
|
||||
ResponseAppend_P(PSTR("\""));
|
||||
if (serial_bridge_raw) {
|
||||
char hex_char[(serial_bridge_in_byte_counter * 2) + 2];
|
||||
ResponseAppend_P(ToHex_P((unsigned char*)serial_bridge_buffer, serial_bridge_in_byte_counter, hex_char, sizeof(hex_char)));
|
||||
} else {
|
||||
ResponseAppend_P(EscapeJSONString(serial_bridge_buffer).c_str());
|
||||
}
|
||||
ResponseAppend_P(PSTR("\""));
|
||||
}
|
||||
ResponseAppend_P(PSTR("}"));
|
||||
|
||||
MqttPublishPrefixTopic_P(RESULT_OR_TELE, PSTR(D_JSON_SSERIALRECEIVED));
|
||||
XdrvRulesProcess();
|
||||
serial_bridge_in_byte_counter = 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user