From 71c14c96c8266307cdcfa5cbb2f43adcd16d4cbb Mon Sep 17 00:00:00 2001 From: fvanroie Date: Thu, 7 Jan 2021 02:01:52 +0100 Subject: [PATCH] Change dispatch_send_obj_attribute_str format --- src/hasp/hasp_dispatch.cpp | 10 +++++++--- src/svc/hasp_mqtt.cpp | 36 +++++++++++++++--------------------- src/svc/hasp_mqtt.h | 1 + 3 files changed, 23 insertions(+), 24 deletions(-) diff --git a/src/hasp/hasp_dispatch.cpp b/src/hasp/hasp_dispatch.cpp index f0b40eff..677bbacc 100644 --- a/src/hasp/hasp_dispatch.cpp +++ b/src/hasp/hasp_dispatch.cpp @@ -245,9 +245,13 @@ void dispatch_output_idle_state(uint8_t state) void IRAM_ATTR dispatch_send_obj_attribute_str(uint8_t pageid, uint8_t btnid, const char * attribute, const char * data) { - char payload[44 + strlen(data) + strlen(attribute)]; - snprintf_P(payload, sizeof(payload), PSTR("{\"page\":%u,\"id\":%u,\"%s\":\"%s\"}"), pageid, btnid, attribute, data); - dispatch_state_msg(F("json"), payload); + char topic[12]; + char payload[32 + strlen(data) + strlen(attribute)]; + // snprintf_P(payload, sizeof(payload), PSTR("{\"page\":%u,\"id\":%u,\"%s\":\"%s\"}"), pageid, btnid, attribute, + // data); dispatch_state_msg(F("json"), payload); + snprintf_P(topic, sizeof(payload), PSTR("p%ub%u"), pageid, btnid); + snprintf_P(payload, sizeof(payload), PSTR("{\"%s\":\"%s\"}"), attribute, data); + mqtt_send_state_str(topic, payload); } #if HASP_USE_CONFIG > 0 diff --git a/src/svc/hasp_mqtt.cpp b/src/svc/hasp_mqtt.cpp index 8c5eb81a..25532bd6 100644 --- a/src/svc/hasp_mqtt.cpp +++ b/src/svc/hasp_mqtt.cpp @@ -129,26 +129,20 @@ bool IRAM_ATTR mqttIsConnected() return mqttEnabled && mqttClient.connected(); } -void IRAM_ATTR mqtt_send_state(const __FlashStringHelper * subtopic, const char * payload) +void IRAM_ATTR mqtt_send_state_str(char * subtopic, char * payload) { - // page = 0 - // p[0].b[0].attr = abc - // dim = 100 - // idle = 0/1 - // light = 0/1 - // brightness = 100 - - // if(mqttIsConnected()) { char tmp_topic[strlen(mqttNodeTopic) + 20]; snprintf_P(tmp_topic, sizeof(tmp_topic), PSTR("%sstate/%s"), mqttNodeTopic, subtopic); bool res = mqttPublish(tmp_topic, payload); mqttResult(res, tmp_topic, payload); - // } else { - // return mqtt_log_no_connection(); - // } +} - // Log after char buffers are cleared - // Log.notice(TAG_MQTT_PUB, F("%sstate/%S = %s"), mqttNodeTopic, subtopic, payload); +void IRAM_ATTR mqtt_send_state(const __FlashStringHelper * subtopic, const char * payload) +{ + char tmp_topic[strlen(mqttNodeTopic) + 20]; + snprintf_P(tmp_topic, sizeof(tmp_topic), PSTR("%sstate/%s"), mqttNodeTopic, subtopic); + bool res = mqttPublish(tmp_topic, payload); + mqttResult(res, tmp_topic, payload); } void IRAM_ATTR mqtt_send_obj_attribute_str(uint8_t pageid, uint8_t btnid, const char * attribute, const char * data) @@ -157,9 +151,11 @@ void IRAM_ATTR mqtt_send_obj_attribute_str(uint8_t pageid, uint8_t btnid, const char tmp_topic[strlen(mqttNodeTopic) + 12]; char payload[25 + strlen(data) + strlen(attribute)]; - snprintf_P(tmp_topic, sizeof(tmp_topic), PSTR("%sstate/json"), mqttNodeTopic); - unsigned int len = - snprintf_P(payload, sizeof(payload), PSTR("{\"p[%u].b[%u].%s\":\"%s\"}"), pageid, btnid, attribute, data); + // snprintf_P(tmp_topic, sizeof(tmp_topic), PSTR("%sstate/json"), mqttNodeTopic); + // unsigned int len = + // snprintf_P(payload, sizeof(payload), PSTR("{\"p[%u].b[%u].%s\":\"%s\"}"), pageid, btnid, attribute, data); + snprintf_P(tmp_topic, sizeof(tmp_topic), PSTR("%sstate/p%ub%u"), mqttNodeTopic, pageid, btnid); + unsigned int len = snprintf_P(payload, sizeof(payload), PSTR("{\"%s\":\"%s\"}"), attribute, data); bool res = mqttPublish(tmp_topic, payload, len); //, false); mqttResult(res, tmp_topic, payload); @@ -175,15 +171,13 @@ void IRAM_ATTR mqtt_send_obj_attribute_str(uint8_t pageid, uint8_t btnid, const } void mqtt_ha_send_config() -{ - -} +{} //////////////////////////////////////////////////////////////////////////////////////////////////// // Receive incoming messages static void mqtt_message_cb(char * topic, byte * payload, unsigned int length) { // Handle incoming commands from MQTT - if(length+1 >= mqttClient.getBufferSize()) { + if(length + 1 >= mqttClient.getBufferSize()) { Log.error(TAG_MQTT_RCV, F("Payload too long (%d bytes)"), length); return; } else { diff --git a/src/svc/hasp_mqtt.h b/src/svc/hasp_mqtt.h index e63f0bba..16e896e9 100644 --- a/src/svc/hasp_mqtt.h +++ b/src/svc/hasp_mqtt.h @@ -12,6 +12,7 @@ void mqttEvery5Seconds(bool wifiIsConnected); void mqttStart(); void mqttStop(); +void IRAM_ATTR mqtt_send_state_str(char * subtopic, char * payload); void IRAM_ATTR mqtt_send_state(const __FlashStringHelper * subtopic, const char * payload); void IRAM_ATTR mqtt_send_obj_attribute_str(uint8_t pageid, uint8_t btnid, const char * attribute, const char * data);