From 2456ae1dc880757fd79d1bdc2fb7a04262738e6c Mon Sep 17 00:00:00 2001 From: Nicu Hodos Date: Wed, 9 Oct 2024 00:02:41 +0200 Subject: [PATCH] use StatusRequest to signal mqtt connectivity - fixes updates being published only after mqtt has been connected --- src/esp.h | 15 +++++++++------ src/mqtt.h | 6 ++++++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/esp.h b/src/esp.h index db65f76..00c4d51 100644 --- a/src/esp.h +++ b/src/esp.h @@ -1,20 +1,21 @@ #pragma once #include "TaskScheduler.h" +#include "mqtt.h" #include "ha.h" using namespace Ha; namespace HaESP { - Task tHeap(1 * TASK_MINUTE, TASK_FOREVER, []() { + Task tHeap(5 * TASK_MINUTE, TASK_FOREVER, []() { Sensor::mapSensors["heap_fragmentation"]->updateState(to_string(ESP.getHeapFragmentation()).c_str()); Sensor::mapSensors["heap_free"]->updateState(to_string(ESP.getFreeHeap()).c_str()); Sensor::mapSensors["heap_max_free_block"]->updateState(to_string(ESP.getMaxFreeBlockSize()).c_str()); }, &ts); - Task tRestartInfo(TASK_IMMEDIATE, TASK_ONCE, [](){ - Sensor::mapSensors["restart_reason"]->updateState(ESP.getResetReason().c_str()); - }, &ts); + Task tRestartInfo(TASK_IMMEDIATE, TASK_ONCE, []() { + Sensor::mapSensors["restart_reason"]->updateState(ESP.getResetReason().c_str()); + }, &ts); template Builder& heapStats(Builder& builder) { @@ -34,14 +35,16 @@ namespace HaESP { .withPrecision(0) .build() ); + Mqtt::connectedStatus.setWaiting(); tHeap.enable(); return builder; } template Builder& restartInfo(Builder& builder) { - builder.addDiagnostic(Builder::instance((new Sensor{"Restart reason", "restart_reason"})).build()); - tRestartInfo.enable(); + builder.addDiagnostic(Builder::instance((new Sensor{ "Restart reason", "restart_reason" })).build()); + Mqtt::connectedStatus.setWaiting(); + tRestartInfo.waitFor(&Mqtt::connectedStatus); return builder; } } \ No newline at end of file diff --git a/src/mqtt.h b/src/mqtt.h index 66e8d46..9572780 100644 --- a/src/mqtt.h +++ b/src/mqtt.h @@ -2,10 +2,15 @@ #include #include +#include +#include "ha.h" #define MAIN_TOPIC "homeassistant/+/" MAIN_DEVICE_ID "/#" +using namespace Ha; + namespace Mqtt { + StatusRequest connectedStatus; AsyncMqttClient client; @@ -61,6 +66,7 @@ namespace Mqtt { client.subscribe(MAIN_TOPIC, 0); tReConnect.disable(); Serial.println("Connected to MQTT"); + connectedStatus.signal(); if (onConnected) onConnected(); }); client.onDisconnect([onDisconnected](AsyncMqttClientDisconnectReason reason) {