MQTT ethernet gateway Works great for 3+ hours then stops
Troubleshooting
24
Posts
6
Posters
13.4k
Views
-
Well it's very simple to detect if the network has gone away.
In the processEthernetMessage() function, it checks
if (client) {
if there's a client connection then the network must be working. If not then either the network has stopped or nothing is connected. Well OpenHAB always maintains a connection.
So I've just added the
} else {
part to say the connection has gone. I also setup a timeout by counting the micros() since boot. so it's not constantly firing the reboot.
I then raise digital pin 3 which is linked to my 555 timer circuit, which causes the power cycle.
unsigned long resetCounter = micros(); int rebootAborted = 0; void processEthernetMessages() { char inputString[MQTT_MAX_PACKET_SIZE] = ""; uint8_t inputSize = 0; EthernetClient client = server.available(); if (client) { resetCounter=micros(); if (rebootAborted) { Serial.println("Rebooting Aborted"); rebootAborted = 0; } while (client.available()) { char inChar = client.read(); inputString[inputSize] = inChar; inputSize++; } #ifdef TCPDUMP Serial.print("<<"); char buf[4]; for (uint8_t a=0; a<inputSize; a++) { sprintf(buf,"%02X ", (uint8_t)inputString[a]); Serial.print(buf); } Serial.println(""); #endif gw.processMQTTMessage(inputString, inputSize); } else { if ((micros() - resetCounter) >= 100000000 && !client.connected() && !rebootAborted) { rebootAborted = 1; Serial.println("Rebooting"); pinMode(3,OUTPUT); digitalWrite(3,HIGH); delay(100); digitalWrite(3,LOW); } } }