Aquarium Cooling Controller
ESP32 firmware for aquarium cooling fan control, monitoring, telemetry, and fault handling.
Loading...
Searching...
No Matches
mqtt_telemetry.h
Go to the documentation of this file.
1#pragma once
2
12#include <Arduino.h>
13#include <PubSubClient.h>
14#include <WiFi.h>
15
16#include "control_engine.h"
17#include "fault_monitor.h"
18#include "fault_policy.h"
19
24 bool active;
25 const char* stateLabel;
26 const char* lastMessage;
27 const char* firmwareVersion;
28 const char* networkIp;
29 const char* uploadUrl;
30};
31
43
53 public:
54 using RemoteConfigCallback = void (*)(const char* suffix,
55 const uint8_t* payload,
56 size_t length,
57 void* context);
58
63
69 void begin(uint32_t nowMs);
70
76 void update(uint32_t nowMs);
77
95 bool publishTelemetry(uint32_t nowMs,
96 const ControlSnapshot& controlSnapshot,
97 const ControlConfig& controlConfig,
98 const OtaTelemetrySnapshot& otaSnapshot,
99 const FaultMonitorSnapshot& faultSnapshot,
100 const FaultPolicySnapshot& policySnapshot,
101 const RemoteConfigStatus& remoteConfigStatus,
102 bool force);
103
114 void setRemoteConfigCallback(RemoteConfigCallback callback, void* context);
115
121 void printStatus(Stream& out);
122
128 bool enabled() const;
129
135 bool wifiConnected() const;
136
142 bool mqttConnected();
143
144 private:
145 bool configComplete() const;
146 void maintainWifi(uint32_t nowMs);
147 void maintainMqtt(uint32_t nowMs);
148 bool connectMqtt();
149 bool subscribeRemoteConfigTopics();
150 bool publishText(const char* suffix, const char* payload, bool retained);
151 bool publishBool(const char* suffix, bool value, bool retained = false);
152 bool publishUInt(const char* suffix, uint32_t value, bool retained = false);
153 bool publishInt(const char* suffix, int32_t value, bool retained = false);
154 bool publishFloatOrUnavailable(const char* suffix,
155 bool valid,
156 float value,
157 bool retained = false);
158 bool buildTopic(const char* suffix, char* topic, size_t topicSize) const;
159 void handleMqttMessage(char* topic, const uint8_t* payload, unsigned int length);
160 static void mqttMessageThunk(char* topic, uint8_t* payload, unsigned int length);
161
162 WiFiClient wifiClient_;
163 PubSubClient mqttClient_;
164 RemoteConfigCallback remoteConfigCallback_;
165 void* remoteConfigContext_;
166 bool initialized_;
167 bool wifiBeginIssued_;
168 uint32_t lastWifiAttemptMs_;
169 uint32_t lastMqttAttemptMs_;
170 uint32_t lastPublishMs_;
171};
Maintains Wi-Fi/MQTT connections and publishes controller telemetry.
Definition mqtt_telemetry.h:52
void setRemoteConfigCallback(RemoteConfigCallback callback, void *context)
Registers a callback for validated MQTT /set topic dispatch.
Definition mqtt_telemetry.cpp:205
bool publishTelemetry(uint32_t nowMs, const ControlSnapshot &controlSnapshot, const ControlConfig &controlConfig, const OtaTelemetrySnapshot &otaSnapshot, const FaultMonitorSnapshot &faultSnapshot, const FaultPolicySnapshot &policySnapshot, const RemoteConfigStatus &remoteConfigStatus, bool force)
Publishes a complete telemetry snapshot when connected.
Definition mqtt_telemetry.cpp:100
bool wifiConnected() const
Indicates whether Wi-Fi is currently connected.
Definition mqtt_telemetry.cpp:244
void begin(uint32_t nowMs)
Starts telemetry connection management.
Definition mqtt_telemetry.cpp:61
bool enabled() const
Indicates whether network telemetry is configured and enabled.
Definition mqtt_telemetry.cpp:240
bool mqttConnected()
Indicates whether MQTT is currently connected.
Definition mqtt_telemetry.cpp:248
void update(uint32_t nowMs)
Maintains Wi-Fi and MQTT reconnect attempts.
Definition mqtt_telemetry.cpp:82
MqttTelemetry()
Creates an uninitialized telemetry publisher.
Definition mqtt_telemetry.cpp:50
void printStatus(Stream &out)
Prints current Wi-Fi/MQTT status to a stream.
Definition mqtt_telemetry.cpp:211
Computes cooling PWM commands from temperature inputs and policy limits.
Fan RPM plausibility monitor with latched fault recovery.
Converts sensor and fan health into alarms, severity, and responses.
Tunable limits and hysteresis settings for cooling control.
Definition control_engine.h:21
Complete result of one control calculation.
Definition control_engine.h:80
Diagnostic result from one fan fault-monitor evaluation.
Definition fault_monitor.h:35
Complete policy decision for diagnostics and telemetry.
Definition fault_policy.h:64
Operator-visible OTA maintenance window state for MQTT publication.
Definition mqtt_telemetry.h:23
const char * lastMessage
Latest OTA status message.
Definition mqtt_telemetry.h:26
const char * uploadUrl
Active OTA upload URL or "unavailable".
Definition mqtt_telemetry.h:29
bool active
True when the OTA HTTP window is active.
Definition mqtt_telemetry.h:24
const char * networkIp
Current Wi-Fi station IP or "unavailable".
Definition mqtt_telemetry.h:28
const char * stateLabel
Stable OTA state label.
Definition mqtt_telemetry.h:25
const char * firmwareVersion
Running firmware version string.
Definition mqtt_telemetry.h:27
Last-result summary for MQTT remote configuration commands.
Definition mqtt_telemetry.h:35
uint32_t rejectedCount
Total rejected remote commands since boot.
Definition mqtt_telemetry.h:39
uint32_t acceptedCount
Total accepted remote commands since boot.
Definition mqtt_telemetry.h:38
bool lastCommandSeen
True once at least one remote command was processed.
Definition mqtt_telemetry.h:36
bool lastCommandAccepted
True when the last command was accepted.
Definition mqtt_telemetry.h:37
char lastKey[32]
Key name of the last processed command.
Definition mqtt_telemetry.h:40
char lastDetail[96]
Short apply/reject detail for the last command.
Definition mqtt_telemetry.h:41