diff --git a/src/mqtt.cpp b/src/mqtt.cpp index 32286a611..b18a7052b 100644 --- a/src/mqtt.cpp +++ b/src/mqtt.cpp @@ -41,6 +41,7 @@ std::vector Mqtt::mqtt_subfunctions_; uint16_t Mqtt::mqtt_publish_fails_ = 0; bool Mqtt::connecting_ = false; +bool Mqtt::initialized_ = false; uint8_t Mqtt::connectcount_ = 0; uint16_t Mqtt::mqtt_message_id_ = 0; std::list Mqtt::mqtt_messages_; @@ -268,22 +269,20 @@ void Mqtt::on_message(const char * topic, const char * payload, size_t len) { bool cmd_known = false; JsonVariant data = doc["data"]; - JsonObject json; // empty object - if (data.is()) { - cmd_known = Command::call(mf.device_type_, command, data.as(), n, json); + cmd_known = Command::call(mf.device_type_, command, data.as(), n); } else if (data.is()) { char data_str[10]; - cmd_known = Command::call(mf.device_type_, command, Helpers::itoa(data_str, (int16_t)data.as()), n, json); + cmd_known = Command::call(mf.device_type_, command, Helpers::itoa(data_str, (int16_t)data.as()), n); } else if (data.is()) { char data_str[10]; - cmd_known = Command::call(mf.device_type_, command, Helpers::render_value(data_str, (float)data.as(), 2), n, json); + cmd_known = Command::call(mf.device_type_, command, Helpers::render_value(data_str, (float)data.as(), 2), n); } else if (data.isNull()) { - cmd_known = Command::call(mf.device_type_, command, "", n, json); + cmd_known = Command::call(mf.device_type_, command, "", n); } if (!cmd_known) { - LOG_ERROR(F("MQTT: no matching cmd (%s), invalid data or command failed"), command); + LOG_ERROR(F("No matching cmd (%s), invalid data or command failed"), command); } return; @@ -358,9 +357,10 @@ void Mqtt::start() { }); // if MQTT disabled, quit - if (!mqtt_enabled_) { + if (!mqtt_enabled_ || initialized_) { return; } + initialized_ = true; mqttClient_->onConnect([this](bool sessionPresent) { on_connect(); }); @@ -475,7 +475,7 @@ void Mqtt::on_connect() { // first time to connect if (connectcount_ == 1) { // send info topic appended with the version information as JSON - StaticJsonDocument<90> doc; + StaticJsonDocument doc; doc["event"] = "start"; doc["version"] = EMSESP_APP_VERSION; #ifndef EMSESP_STANDALONE @@ -821,7 +821,7 @@ void Mqtt::register_mqtt_ha_sensor(const char * prefix, LOG_ERROR(F("Failed to publish topic %s"), topic); } else { #if defined(EMSESP_STANDALONE) - LOG_DEBUG(F("Publishing topic=%s, payload=%s"), topic, payload_text); + LOG_DEBUG(F("Publishing topic=%s, payload=%s"), topic, payload_text.c_str()); #else LOG_DEBUG(F("Publishing topic %s"), topic); #endif diff --git a/src/mqtt.h b/src/mqtt.h index 7d2decdc3..377ba11ee 100644 --- a/src/mqtt.h +++ b/src/mqtt.h @@ -219,6 +219,7 @@ class Mqtt { uint32_t last_publish_sensor_ = 0; static bool connecting_; + static bool initialized_; static uint16_t mqtt_publish_fails_; static uint8_t connectcount_;