From 409eeb489540a38b4ea21f9b1a416670fbba8f2b Mon Sep 17 00:00:00 2001 From: "Adrian A. Baumann" Date: Sat, 27 Jun 2026 01:39:26 +0200 Subject: [PATCH] Allow anonymous MQTT broker connections --- src/main.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 210e399..21f9f19 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -296,9 +296,9 @@ static void mqttSubscribe() { } static bool mqttConnect() { - if (!mqttCfg.enabled || strlen(mqttCfg.host) == 0 || strlen(mqttCfg.user) == 0 || strlen(mqttCfg.pass) == 0) { - Serial.printf("[MQTT] connect skipped en=%d host=%d user=%d pass=%d\n", - mqttCfg.enabled, strlen(mqttCfg.host) > 0, strlen(mqttCfg.user) > 0, strlen(mqttCfg.pass) > 0); + if (!mqttCfg.enabled || strlen(mqttCfg.host) == 0) { + Serial.printf("[MQTT] connect skipped en=%d host=%d\n", + mqttCfg.enabled, strlen(mqttCfg.host) > 0); return false; } @@ -316,8 +316,13 @@ static bool mqttConnect() { mqttClient.setCallback(mqttCallback); mqttClient.setBufferSize(1024); + // Pass NULL for empty credentials so the broker treats it as an anonymous + // connection rather than an empty-string login (which some brokers reject). + const char* user = strlen(mqttCfg.user) > 0 ? mqttCfg.user : nullptr; + const char* pass = strlen(mqttCfg.pass) > 0 ? mqttCfg.pass : nullptr; + Serial.printf("[MQTT] connecting to %s:%d as %s\n", mqttCfg.host, mqttCfg.port, clientId); - bool ok = mqttClient.connect(clientId, mqttCfg.user, mqttCfg.pass, + bool ok = mqttClient.connect(clientId, user, pass, statusTopic, 0, true, "online: false"); if (ok) { @@ -334,7 +339,7 @@ static bool mqttConnect() { } static void mqttLoop() { - if (!mqttCfg.enabled || strlen(mqttCfg.host) == 0 || strlen(mqttCfg.user) == 0 || strlen(mqttCfg.pass) == 0) return; + if (!mqttCfg.enabled || strlen(mqttCfg.host) == 0) return; if (!mqttClient.connected()) { unsigned long now = millis();