mqtt cleanup

This commit is contained in:
Patrick Haßel 2024-04-10 12:56:55 +02:00
parent 8ecf88cdb6
commit cbc1a5bacb

View File

@ -1,13 +1,16 @@
#include "mqtt.h" #include "mqtt.h"
#include "base.h"
#include <WiFiClient.h> #include <WiFiClient.h>
#include <WiFi.h> #include <WiFi.h>
#include "log.h" #include "log.h"
#include "PubSubClient.h" #include "PubSubClient.h"
#include "console.h" #include "console.h"
#include "wifi.h"
#define CONNECT_TIMEOUT_MILLISECONDS 5000 #define CONNECT_TIMEOUT_MILLISECONDS 5000
#define MQTT_HOST "10.0.0.50"
#define TOPIC_LOG_FORMAT "log/%s" #define TOPIC_LOG_FORMAT "log/%s"
#define TOPIC_CMD_FORMAT "cmd/%s" #define TOPIC_CMD_FORMAT "cmd/%s"
#define TOPIC_DATA_FORMAT "data/%s/%s" #define TOPIC_DATA_FORMAT "data/%s/%s"
@ -22,26 +25,41 @@ char logTopic[64] = "log/UNSET";
char cmdTopic[64] = "cmd/UNSET"; char cmdTopic[64] = "cmd/UNSET";
bool mqttConnected = false;
void mqttSetup() { void mqttSetup() {
snprintf(logTopic, sizeof logTopic, TOPIC_LOG_FORMAT, HOSTNAME); snprintf(logTopic, sizeof logTopic, TOPIC_LOG_FORMAT, HOSTNAME);
snprintf(cmdTopic, sizeof cmdTopic, TOPIC_CMD_FORMAT, HOSTNAME); snprintf(cmdTopic, sizeof cmdTopic, TOPIC_CMD_FORMAT, HOSTNAME);
} }
void mqttDisconnect() { void mqttDisconnect() {
if (mqttConnected) {
error("MQTT", "Disconnecting...");
mqtt.disconnect(); mqtt.disconnect();
}
} }
void mqttLoop() { void mqttLoop() {
if (WiFi.localIP() != 0 && !mqtt.connected() && (mqttLastConnectTry == 0 || millis() - mqttLastConnectTry > CONNECT_TIMEOUT_MILLISECONDS)) { const bool connected = mqtt.loop();
if (mqttConnected != !connected) {
if (!connected) {
error("MQTT", "DISCONNECTED");
}
mqttConnected = connected;
}
if (WiFi.localIP() != 0 && isTimeSet() && !connected && (mqttLastConnectTry == 0 || millis() - mqttLastConnectTry > CONNECT_TIMEOUT_MILLISECONDS)) {
error("MQTT", "Connecting: \"%s\"", MQTT_HOST);
mqttLastConnectTry = millis(); mqttLastConnectTry = millis();
mqtt.setServer("10.0.0.50", 1883); mqtt.setServer(MQTT_HOST, 1883);
if (!mqtt.connect(HOSTNAME, logTopic, 0, false, "disconnected")) { if (!mqtt.connect(HOSTNAME, logTopic, 0, false, "MQTT disconnected")) {
error("MQTT", "Failed to connect MQTT server!"); error("MQTT", "FAILED TO CONNECT");
return; return;
} }
info("MQTT", "MQTT server connected!"); info("MQTT", "CONNECTED");
mqtt.setKeepAlive(10);
mqtt.setBufferSize(512); mqtt.setBufferSize(512);
mqtt.subscribe(cmdTopic); // mqtt.subscribe(cmdTopic);
mqtt.setCallback([](const char *topic, const uint8_t *bytes, const unsigned int length) { mqtt.setCallback([](const char *topic, const uint8_t *bytes, const unsigned int length) {
char content[64]; char content[64];
if (length > sizeof content - 1) { if (length > sizeof content - 1) {
@ -57,7 +75,6 @@ void mqttLoop() {
} }
}); });
} }
mqtt.loop();
} }
void mqttPublishLog(const char *datetime, const char *header, const char *message) { void mqttPublishLog(const char *datetime, const char *header, const char *message) {