diff --git a/src/mqtt.cpp b/src/mqtt.cpp index 3a3acfb3f..ea6dec345 100644 --- a/src/mqtt.cpp +++ b/src/mqtt.cpp @@ -789,8 +789,11 @@ void Mqtt::register_mqtt_ha_sensor(const char * prefix, } new_name[0] = toupper(new_name[0]); // capitalize first letter +#if defined(ESP32) + StaticJsonDocument doc; +#else DynamicJsonDocument doc(EMSESP_MAX_JSON_SIZE_HA_CONFIG); - +#endif doc["name"] = new_name; doc["uniq_id"] = uniq; if (uom != nullptr) { @@ -805,9 +808,14 @@ void Mqtt::register_mqtt_ha_sensor(const char * prefix, JsonArray ids = dev.createNestedArray("ids"); ids.add(ha_device); +#if defined(ESP32) + // queue MQTT publish + publish_retain(topic, doc.as(), true); +#else // convert json to string and publish immediately with retain forced to true std::string payload_text; serializeJson(doc, payload_text); // convert json to string + uint16_t packet_id = mqttClient_->publish(topic, 0, true, payload_text.c_str()); if (!packet_id) { LOG_ERROR(F("Failed to publish topic %s"), topic); @@ -820,6 +828,7 @@ void Mqtt::register_mqtt_ha_sensor(const char * prefix, } delay(50); // enough time to send the short message out +#endif } } // namespace emsesp diff --git a/src/mqtt.h b/src/mqtt.h index 41e2899f6..7d2decdc3 100644 --- a/src/mqtt.h +++ b/src/mqtt.h @@ -39,7 +39,7 @@ using uuid::console::Shell; #define EMSESP_MAX_JSON_SIZE_HA_CONFIG 384 // for small HA config payloads -#define EMSESP_MAX_JSON_SIZE_SMALL 384 // for smaller json docs when using StaticJsonDocument +#define EMSESP_MAX_JSON_SIZE_SMALL 256 // for smaller json docs when using StaticJsonDocument #define EMSESP_MAX_JSON_SIZE_MEDIUM 768 // for medium json docs from ems devices, when using StaticJsonDocument #define EMSESP_MAX_JSON_SIZE_LARGE 1024 // for large json docs from ems devices, like boiler or thermostat data. Using StaticJsonDocument #define EMSESP_MAX_JSON_SIZE_DYN 2048 // for large json docs from web. Using DynamicJsonDocument @@ -176,6 +176,8 @@ class Mqtt { #if defined(EMSESP_STANDALONE) static constexpr size_t MAX_MQTT_MESSAGES = 70; // size of queue +#elif defined(ESP32) + static constexpr size_t MAX_MQTT_MESSAGES = 100; // size of queue #else static constexpr size_t MAX_MQTT_MESSAGES = 20; // size of queue #endif