From aab72fd0d8c897da825f81f637000ec9b8135b49 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Wed, 14 Dec 2022 19:32:24 +0100 Subject: [PATCH] Move mqtt dtu topic publishing to separate class --- include/MqttHandleDtu.h | 15 +++++++++++++++ src/MqttHandleDtu.cpp | 35 +++++++++++++++++++++++++++++++++++ src/MqttHandleInverter.cpp | 8 -------- src/main.cpp | 4 ++++ 4 files changed, 54 insertions(+), 8 deletions(-) create mode 100644 include/MqttHandleDtu.h create mode 100644 src/MqttHandleDtu.cpp diff --git a/include/MqttHandleDtu.h b/include/MqttHandleDtu.h new file mode 100644 index 0000000..71c47b7 --- /dev/null +++ b/include/MqttHandleDtu.h @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +#pragma once + +#include + +class MqttHandleDtuClass { +public: + void init(); + void loop(); + +private: + uint32_t _lastPublish; +}; + +extern MqttHandleDtuClass MqttHandleDtu; \ No newline at end of file diff --git a/src/MqttHandleDtu.cpp b/src/MqttHandleDtu.cpp new file mode 100644 index 0000000..818a1b4 --- /dev/null +++ b/src/MqttHandleDtu.cpp @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright (C) 2022 Thomas Basler and others + */ +#include "MqttHandleDtu.h" +#include "Configuration.h" +#include "MqttSettings.h" +#include "NetworkSettings.h" +#include + +MqttHandleDtuClass MqttHandleDtu; + +void MqttHandleDtuClass::init() +{ +} + +void MqttHandleDtuClass::loop() +{ + if (!MqttSettings.getConnected() || !Hoymiles.getRadio()->isIdle()) { + return; + } + + const CONFIG_T& config = Configuration.get(); + + if (millis() - _lastPublish > (config.Mqtt_PublishInterval * 1000)) { + MqttSettings.publish("dtu/uptime", String(millis() / 1000)); + MqttSettings.publish("dtu/ip", NetworkSettings.localIP().toString()); + MqttSettings.publish("dtu/hostname", NetworkSettings.getHostname()); + if (NetworkSettings.NetworkMode() == network_mode::WiFi) { + MqttSettings.publish("dtu/rssi", String(WiFi.RSSI())); + } + + _lastPublish = millis(); + } +} \ No newline at end of file diff --git a/src/MqttHandleInverter.cpp b/src/MqttHandleInverter.cpp index c6a5a60..c049cba 100644 --- a/src/MqttHandleInverter.cpp +++ b/src/MqttHandleInverter.cpp @@ -4,7 +4,6 @@ */ #include "MqttHandleInverter.h" #include "MqttSettings.h" -#include "NetworkSettings.h" #include MqttHandleInverterClass MqttHandleInverter; @@ -22,13 +21,6 @@ void MqttHandleInverterClass::loop() const CONFIG_T& config = Configuration.get(); if (millis() - _lastPublish > (config.Mqtt_PublishInterval * 1000)) { - MqttSettings.publish("dtu/uptime", String(millis() / 1000)); - MqttSettings.publish("dtu/ip", NetworkSettings.localIP().toString()); - MqttSettings.publish("dtu/hostname", NetworkSettings.getHostname()); - if (NetworkSettings.NetworkMode() == network_mode::WiFi) { - MqttSettings.publish("dtu/rssi", String(WiFi.RSSI())); - } - // Loop all inverters for (uint8_t i = 0; i < Hoymiles.getNumInverters(); i++) { auto inv = Hoymiles.getInverterByPos(i); diff --git a/src/main.cpp b/src/main.cpp index 992d763..5fc75eb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,6 +4,7 @@ */ #include "Configuration.h" #include "Hoymiles.h" +#include "MqttHandleDtu.h" #include "MqttHandleHass.h" #include "MqttHandleInverter.h" #include "MqttSettings.h" @@ -68,6 +69,7 @@ void setup() // Initialize MqTT Serial.print(F("Initialize MqTT... ")); MqttSettings.init(); + MqttHandleDtu.init(); MqttHandleInverter.init(); MqttHandleHass.init(); Serial.println(F("done")); @@ -133,6 +135,8 @@ void loop() yield(); Hoymiles.loop(); yield(); + MqttHandleDtu.loop(); + yield(); MqttHandleInverter.loop(); yield(); MqttHandleHass.loop();