Hi
my MQTT seems unstable, but I'm pretty shure connection is ok. I have a stable LAN use Ubiquity devises and my net is stable. And when I trigger the code I receive a MQTT package to Home assistant, 100%
Is there something in my MQTT code that triggers a reconnection?
Thanks up front!
I use this MQTT code:
if (!client.connected()) {
while (!client.connected() && retryMQTT < maxRetryMQTT) {
Serial.println("Connect to MQTT...");
if (client.connect(mqtt_clientID, mqtt_username, mqtt_password)) {
Serial.println("MQTT IP 192.168.0.60:1883, web :8123");
delay(1000);
retryMQTT = 0; // Reset the retry count if the connection is successful
MQTTstatus = "Connect to til HA";
} else {
Serial.print("Error MQTT connection, Return Code = ");
Serial.println(client.state());
delay(500);
retryMQTT++;
MQTTstatus = "Not connected to HA, RC = " + client.state();;
}
//ESP.restart();
}
}
After reboot:
Connecting to LAN
WiFi connected
IP address:
192.168.0.140
Connect to MQTT...
MQTT IP 192.168.0.60:1883, web :8123
After a while this happens on serial:
Connect to MQTT...
MQTT IP 192.168.0.60:1883, web :8123
Connect to MQTT...
MQTT IP 192.168.0.60:1883, web :8123
Connect to MQTT...
MQTT IP 192.168.0.60:1883, web :8123
Connect to MQTT...
MQTT IP 192.168.0.60:1883, web :8123
Det renner vann, sender verdi: 6
Det renner ikke vann, sender verdi: 0
Det renner vann, sender verdi: 7
Det renner ikke vann, sender verdi: 0
Connect to MQTT...
MQTT IP 192.168.0.60:1883, web :8123
Connect to MQTT...
MQTT IP 192.168.0.60:1883, web :8123
Connect to MQTT...
MQTT IP 192.168.0.60:1883, web :8123
Connect to MQTT...
MQTT IP 192.168.0.60:1883, web :8123
All code:
#include <ESP8266WiFi.h>
#include <PubSubClient.h> // MQTT
const char* ssid = "LAN"; // Your WiFi network SSID
const char* password = "xxx"; // Your WiFi network password
const int buttonPin = D2; // D2 pin
int buttonState = 0; // variable for reading the button status
int lastButtonState = 0; // variable to store the previous button state
int vannRennerFlagg = 0;
int previousState = 0;
// MQTT
WiFiClient espClient;
PubSubClient client(espClient);
int maxRetryMQTT = 3;
int retryMQTT = 0;
String MQTTstatus = "_"; // For å skrive til serial at kobling til HA er OK
const char* mqtt_username = "yyy"; // MQTT username virker 2023.07.05
const char* mqtt_password = "zzzz"; // MQTT password virker 2023.07.05
const char* mqtt_clientID = "dam"; // MQTT client ID, må være unikt pr IoT
char vannRennerMsg[10];
//int vannRennerFlagg = 0;
//uint8_t vannRennerFlagg = 0;
//--------------------------
IPAddress MQTTserver(192, 168, 0, 60); //MQTT server IP
void setup() {
Serial.begin(115200); // initialize serial communication
delay(500);
PrintFileNameDateTime();
client.setServer(MQTTserver , 1883); // MQTT server 192.168.0.60:1883 riktig ift mqtt mottak
pinMode(buttonPin, INPUT); // set the D2 pin as an input
digitalWrite(buttonPin, LOW); // enable internal pull-down resistor
// Connect to WiFi
WiFi.begin(ssid, password);
Serial.print("Connecting to ");
Serial.println(ssid);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// Print connection established
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {
// kobler til mqtt
if (!client.connected()) {
while (!client.connected() && retryMQTT < maxRetryMQTT) {
Serial.println("Connect to MQTT...");
if (client.connect(mqtt_clientID, mqtt_username, mqtt_password)) {
Serial.println("MQTT IP 192.168.0.60:1883, web :8123");
delay(1000);
retryMQTT = 0; // Reset the retry count if the connection is successful
MQTTstatus = "Connect to til HA";
} else {
Serial.print("Error MQTT connection, Return Code = ");
Serial.println(client.state());
delay(500);
retryMQTT++;
MQTTstatus = "Not connected to HA, RC = " + client.state();;
}
//ESP.restart(); // ###################### behold denne muligheten se på versjon tidligere
}
}
// read the state of the pushbutton value
buttonState = digitalRead(buttonPin);
// check if the button state has changed
if (buttonState != lastButtonState) {
// check if the pushbutton is NOT pressed
if (buttonState == HIGH) {
vannRennerFlagg = 0; // nullstiller etter en lekkasje
Serial.print(" Det renner ikke vann, sender verdi: ");
Serial.println(vannRennerFlagg);
client.loop(); // MQTT loop
String vannRennerTopic = "dam/vannRenner";
snprintf(vannRennerMsg, 10, "%d" , vannRennerFlagg);
client.publish(vannRennerTopic.c_str(), vannRennerMsg);
} else {
vannRennerFlagg = previousState;
vannRennerFlagg++;
previousState = vannRennerFlagg;
Serial.print(" Det renner vann, sender verdi: ");
Serial.println(vannRennerFlagg);
client.loop(); // MQTT loop
String vannRennerTopic = "dam/vannRenner";
snprintf(vannRennerMsg, 10, "%d" , vannRennerFlagg);
client.publish(vannRennerTopic.c_str(), vannRennerMsg);
}
// update lastButtonState to the current buttonState
lastButtonState = buttonState;
}
delay(100); // small delay to debounce the button
}
// helper-functions
void PrintFileNameDateTime() {
Serial.println( F("Code running comes from file: ") );
Serial.println( F(__FILE__) );
Serial.print( F("Compilert") );
Serial.print( F(__DATE__) );
Serial.print( F(" ") );
Serial.println( F(__TIME__) );
}