Skip to content

Commit

Permalink
Serialize text in string attribute messages #140
Browse files Browse the repository at this point in the history
  • Loading branch information
fvanroie committed Apr 16, 2021
1 parent 8194744 commit e420b72
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 4 deletions.
14 changes: 11 additions & 3 deletions src/hasp/hasp_attribute.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1776,10 +1776,18 @@ void attr_out_str(lv_obj_t* obj, const char* attribute, const char* data)
if(hasp_find_id_from_obj(obj, &pageid, &objid)) {
if(!attribute || !data) return;

char payload[32 + strlen(data) + strlen(attribute)];
snprintf_P(payload, sizeof(payload), PSTR("{\"%s\":\"%s\"}"), attribute, data);
StaticJsonDocument<32> doc; // Total (recommended) size
doc[attribute].set(data);

object_dispatch_state(pageid, objid, payload);
size_t size = measureJson(doc); // strlen(data) + strlen(attribute);
if(size < MQTT_MAX_PACKET_SIZE) {
char payload[MQTT_MAX_PACKET_SIZE];
serializeJson(doc, payload);
object_dispatch_state(pageid, objid, payload);

} else {
LOG_ERROR(TAG_ATTR, F(D_MQTT_PAYLOAD_TOO_LONG), size);
}
}
}

Expand Down
1 change: 1 addition & 0 deletions src/lang/en_US.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
#define D_MQTT_SUBSCRIBED "Subscribed to %s"
#define D_MQTT_NOT_SUBSCRIBED "Failed to subscribe to %s"
#define D_MQTT_HA_AUTO_DISCOVERY "Register HA auto-discovery"
#define D_MQTT_PAYLOAD_TOO_LONG "Payload too long (%d bytes)"

#define D_TELNET_CLOSING_CONNECTION "Closing session from %s"
#define D_TELNET_CLIENT_LOGIN_FROM "Client login from %s"
Expand Down
1 change: 1 addition & 0 deletions src/lang/hu_HU.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
#define D_MQTT_SUBSCRIBED "Feliratkozva: %s"
#define D_MQTT_NOT_SUBSCRIBED "Nem sikerült feliratkozni: %s"
#define D_MQTT_HA_AUTO_DISCOVERY "Regisztrálás HA automatikus felfedezésre"
#define D_MQTT_PAYLOAD_TOO_LONG "$$$Payload too long (%d bytes)"

#define D_TELNET_CLOSING_CONNECTION "Munkamenet befejezése %s-el"
#define D_TELNET_CLIENT_LOGIN_FROM "Kliens bejelentkezés innen: %s"
Expand Down
1 change: 1 addition & 0 deletions src/lang/nl_NL.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
#define D_MQTT_SUBSCRIBED "Ingeschreven op %s"
#define D_MQTT_NOT_SUBSCRIBED "Inschrijving op %s mislukt"
#define D_MQTT_HA_AUTO_DISCOVERY "Registeren HA auto-configuratie"
#define D_MQTT_PAYLOAD_TOO_LONG "Payload is te lang (%d bytes)"

#define D_TELNET_CLOSING_CONNECTION "Sessie sluiten van %s"
#define D_TELNET_CLIENT_LOGIN_FROM "Client aangemeld van %s"
Expand Down
1 change: 1 addition & 0 deletions src/lang/ro_RO.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
#define D_MQTT_SUBSCRIBED "Abonat la %s"
#define D_MQTT_NOT_SUBSCRIBED "Abonarea la %s a eșuat"
#define D_MQTT_HA_AUTO_DISCOVERY "Înregistrare la auto-descoperire în HA"
#define D_MQTT_PAYLOAD_TOO_LONG "$$$Payload too long (%d bytes)"

#define D_TELNET_CLOSING_CONNECTION "Terminarea sesiunii de la %s"
#define D_TELNET_CLIENT_LOGIN_FROM "Conectare client de la %s"
Expand Down
2 changes: 1 addition & 1 deletion src/mqtt/hasp_mqtt_pubsubclient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ int mqtt_send_state(const char* subtopic, const char* payload)
static void mqtt_message_cb(char* topic, byte* payload, unsigned int length)
{ // Handle incoming commands from MQTT
if(length + 1 >= mqttClient.getBufferSize()) {
LOG_ERROR(TAG_MQTT_RCV, F("Payload too long (%d bytes)"), length);
LOG_ERROR(TAG_MQTT_RCV, F(D_MQTT_PAYLOAD_TOO_LONG), length);
return;
} else {
payload[length] = '\0';
Expand Down

0 comments on commit e420b72

Please sign in to comment.