#pragma once // ============================================================================= // mqtt_client.h - MQTT-Verbindung, Publish und Subscribe // Projekt: MQTT-Display LaserCutter // // Wrapper um PubSubClient mit Non-Blocking Reconnect. // // Publish: // publishSession() - beim Ende eines Laser-Bursts (aus LaserTracker) // publishStatus() - Heartbeat alle MQTT_HEARTBEAT_MS // // Subscribe: // lasercutter/reset - Payload "1" oder {"reset":true} -> laserTracker.resetTotal() // Payload {"reset_session":true} -> laserTracker.resetSessionSum() // // Verwendung: // mqttClient.begin(); // einmalig in setup(), nach WiFi-Connect // mqttClient.loop(); // in jedem loop()-Aufruf // ============================================================================= #include #include #include #include #include "config.h" #include "settings.h" class MqttClient { public: MqttClient(); // MQTT konfigurieren und erste Verbindung versuchen (einmalig in setup()) void begin(); // Verbindung halten, Reconnect, Heartbeat - in jedem loop()-Aufruf void loop(); // Publish: Session-Ende (wird von LaserTracker-Logik in main aufgerufen) // lastSessionSec : Netto-Sekunden der letzten Session // gratisSec : konfigurierte Gratiszeit // JSON-Felder: session_minutes (ceiling int), session_seconds (raw), freetime_s, ip void publishSession(int lastSessionSec, int gratisSec); // Verbindungsstatus bool isConnected(); // Debug-Ausgabe auf Serial void printToSerial(); private: WiFiClient _wifiClient; WiFiClientSecure _secureClient; // fuer TLS (Port 8883) PubSubClient _client; uint32_t _lastReconnectMs; uint32_t _lastHeartbeatMs; char _clientId[32]; // MQTT_CLIENT_ID + MAC-Suffix (eindeutig auf Public Broker) // Verbindungsaufbau (intern, non-blocking: gibt true zurueck wenn verbunden) bool reconnect(); // Heartbeat-Publish (lasercutter/status) void publishHeartbeat(); // Callback fuer eingehende Nachrichten (static wegen PubSubClient-API) static void onMessage(const char* topic, byte* payload, unsigned int length); }; // Globale Instanz extern MqttClient mqttClient;