From 5ee1c7029bba05705543e96b63316bbbaf1299fd Mon Sep 17 00:00:00 2001 From: Yurii Date: Sun, 14 Jan 2024 15:48:57 +0300 Subject: [PATCH] fix: updated connection logic to MQTT and enable/disable emergency mode --- src/MqttTask.h | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/MqttTask.h b/src/MqttTask.h index b48256d..599a1e9 100644 --- a/src/MqttTask.h +++ b/src/MqttTask.h @@ -165,7 +165,7 @@ protected: this->onDisconnect(); } - if (this->wifiClient == nullptr || (!this->client->connected() && millis() - this->lastReconnectTime >= MQTT_RECONNECT_INTERVAL)) { + if (this->wifiClient == nullptr || (!this->connected && millis() - this->lastReconnectTime >= MQTT_RECONNECT_INTERVAL)) { Log.sinfoln(FPSTR(L_MQTT), F("Connecting to %s:%u..."), settings.mqtt.server, settings.mqtt.port); this->client->setId(networkSettings.hostname); @@ -180,14 +180,16 @@ protected: this->onConnect(); } - if (!this->client->connected()) { - if (settings.emergency.enable && !vars.states.emergency) { - if (millis() - this->disconnectedTime > EMERGENCY_TIME_TRESHOLD) { - vars.states.emergency = true; - Log.sinfoln(FPSTR(L_MQTT), F("Emergency mode enabled")); - } - } + if (!this->connected && settings.emergency.enable && !vars.states.emergency && millis() - this->disconnectedTime > EMERGENCY_TIME_TRESHOLD) { + vars.states.emergency = true; + Log.sinfoln(FPSTR(L_MQTT), F("Emergency mode enabled")); + } else if (this->connected && vars.states.emergency && millis() - this->connectedTime > 10000) { + vars.states.emergency = false; + Log.sinfoln(FPSTR(L_MQTT), F("Emergency mode disabled")); + } + + if (!this->connected) { return; } @@ -242,11 +244,6 @@ protected: unsigned long downtime = (millis() - this->disconnectedTime) / 1000; Log.sinfoln(FPSTR(L_MQTT), F("Connected (downtime: %u s.)"), downtime); - if (vars.states.emergency) { - vars.states.emergency = false; - Log.sinfoln(FPSTR(L_MQTT), F("Emergency mode disabled")); - } - this->client->subscribe(this->haHelper->getDeviceTopic("settings/set").c_str()); this->client->subscribe(this->haHelper->getDeviceTopic("state/set").c_str()); }