#include "mqtt.h" #include #include #include "log.h" #include "wifi.h" #define MQTT_RETRY_DELAY_MILLIS 3000 WiFiClient wifiClient; PubSubClient mqtt(wifiClient); auto mqttHost = "10.0.0.50"; auto mqttPort = 1883; auto mqttLastConnectMillis = 0UL; char mqttWillTopic[128]; void mqttLoop() { if (mqtt.loop()) { return; } if (!isWiFiConnected()) { mqttLastConnectMillis = 0; return; } if (mqttLastConnectMillis == 0 || millis() - mqttLastConnectMillis > MQTT_RETRY_DELAY_MILLIS) { snprintf(mqttWillTopic, sizeof(mqttWillTopic), "%s/online", WiFiClass::getHostname()); mqtt.setServer(mqttHost, mqttPort); mqtt.setKeepAlive(10); mqtt.setBufferSize(512); mqttLastConnectMillis = millis(); info("mqtt connecting: host=%s, port=%d", mqttHost, mqttPort); if (mqtt.connect(WiFiClass::getHostname(), mqttWillTopic, 1, true, "false")) { info("mqtt connected"); yield(); mqtt.publish(mqttWillTopic, "true", true); yield(); } else { error("mqtt failed to connect"); } } } bool mqttPublish(const String& topic, const String& payload, const Retain retain) { return mqtt.publish(topic.c_str(), payload.c_str(), retain == RETAIN); }