MQTT ethernet gateway Works great for 3+ hours then stops
-
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); } } }
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login