arduino-libraries / ArduinoMqttClient

ArduinoMqttClient Library for Arduino
GNU Lesser General Public License v2.1
187 stars 73 forks source link

Client stops sending mqtt data after some hours #14

Open valerionew opened 4 years ago

valerionew commented 4 years ago

Hi, I'm using this library on a mkr 1010 to send some data every 5 seconds. I based my sketch on the WiFi Simple Sender example. After 1-2 hours the library stops sending mqtt messages to my broker. For now i did the following observations:

  1. the loop() code is still running
  2. i'm still able to ping my arduino
  3. my broker is still running, other devices on the network can still publish on it

The code is hosted on arduino create

Testato commented 4 years ago

Same problem. mkr1010 to a mosquitto on Rpi

attilagyurman commented 4 years ago

Same problem. Broker is mosquitto, it says after about 23 hour:

1572082448: Client Arduino-0000273f has exceeded timeout, disconnecting.
1572082448: Socket error on client Arduino-0000273f, disconnecting.

If i restart arduino, i can see the ping requests in mosquitto log, but if i restart mosquitto while arduino is connected, arduino doesn't reconnect.

valerionew commented 4 years ago

@attilagyurman in the meantime see this example, you should be able to operate for longer.

https://github.com/fablab-bergamo/ArduinoMqttClient/blob/master/examples/WiFiSimpleSenderReconnect/WiFiSimpleSenderReconnect.ino

valerionew commented 4 years ago

@attilagyurman have you tried the code? Does it patch the problem?

attilagyurman commented 4 years ago

@attilagyurman have you tried the code? Does it patch the problem?

@5N44P Yes, it's working perfectly.

sandeepmistry commented 4 years ago

@5N44P just to clarify this topic, was it related to the WiFi or the socket disconnecting?

valerionew commented 4 years ago

I set up this code to try and see if it is a wifi disconnection or just the connection with the MQTT broker. The result is that it is both, but:

sandeepmistry commented 4 years ago

Ok, so if it's a socket or WiFi level issue I think this can be closed or moved to the WiFiNINA repo if applicable.

You have a pull request #15 open to track adding reconnection to the examples, which is good.

tiszavolgyi commented 4 years ago

I have the same problem on an MKR1000. Usually, it only works for like 20-30 minutes, sometimes a few hours. The wifi is connected, i'm still able to ping my arduino, the loop() code is still running, my MQTT broker is running as well.

However, my device does not send data to the MQTT topic...

Trying the reconnecting solution from @5N44P I will report back if it is working. Thank you!

gregor2004ua commented 3 years ago

Having the same issue. Initially it was happening every hour, after making poll() calls less frequent it now happens every 8-10 hours. Does anyone have a permanent solution for this?

Webbeh commented 3 years ago

...instead of using poll(), which seems to be VERY blocking on my end, I tend to send a random message on a random "keepalive" topic every 30s or so, seems to work by me.

I have quite critical applications where the arduino is really not easily reachable (avalanche level displays on ski slopes) and this is the only thing that seemed to work okay.

valerionew commented 3 years ago

I have had my reconnecting example going for more than a year and it's working fine too

pesor commented 3 years ago

As far as I can see, the algoritm disconnect the MQTT connection after 60 minutes, this is hardcoded in the library file.

I have solved the issue, by adding this statement at the end of the loop():

if (!mqttClient.connected()) { mqttClient.connect(broker, port); }