I noticed that some useful ESP stats are missing on the MQTT feed, so this adds: - ESP temperature - ESP heap stats (size, free, minFree, maxAlloc)
48 lines
1.6 KiB
C++
48 lines
1.6 KiB
C++
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
/*
|
|
* Copyright (C) 2022-2024 Thomas Basler and others
|
|
*/
|
|
#include "MqttHandleDtu.h"
|
|
#include "Configuration.h"
|
|
#include "MqttSettings.h"
|
|
#include "NetworkSettings.h"
|
|
#include <Hoymiles.h>
|
|
#include <CpuTemperature.h>
|
|
|
|
MqttHandleDtuClass MqttHandleDtu;
|
|
|
|
MqttHandleDtuClass::MqttHandleDtuClass()
|
|
: _loopTask(TASK_IMMEDIATE, TASK_FOREVER, std::bind(&MqttHandleDtuClass::loop, this))
|
|
{
|
|
}
|
|
|
|
void MqttHandleDtuClass::init(Scheduler& scheduler)
|
|
{
|
|
scheduler.addTask(_loopTask);
|
|
_loopTask.setInterval(Configuration.get().Mqtt.PublishInterval * TASK_SECOND);
|
|
_loopTask.enable();
|
|
}
|
|
|
|
void MqttHandleDtuClass::loop()
|
|
{
|
|
_loopTask.setInterval(Configuration.get().Mqtt.PublishInterval * TASK_SECOND);
|
|
|
|
if (!MqttSettings.getConnected() || !Hoymiles.isAllRadioIdle()) {
|
|
_loopTask.forceNextIteration();
|
|
return;
|
|
}
|
|
|
|
MqttSettings.publish("dtu/uptime", String(millis() / 1000));
|
|
MqttSettings.publish("dtu/ip", NetworkSettings.localIP().toString());
|
|
MqttSettings.publish("dtu/hostname", NetworkSettings.getHostname());
|
|
MqttSettings.publish("dtu/temperature", String(CpuTemperature.read()));
|
|
MqttSettings.publish("dtu/heap/size", String(ESP.getHeapSize()));
|
|
MqttSettings.publish("dtu/heap/free", String(ESP.getFreeHeap()));
|
|
MqttSettings.publish("dtu/heap/minfree", String(ESP.getMinFreeHeap()));
|
|
MqttSettings.publish("dtu/heap/maxalloc", String(ESP.getMaxAllocHeap()));
|
|
if (NetworkSettings.NetworkMode() == network_mode::WiFi) {
|
|
MqttSettings.publish("dtu/rssi", String(WiFi.RSSI()));
|
|
MqttSettings.publish("dtu/bssid", WiFi.BSSIDstr());
|
|
}
|
|
}
|