Just upgraded to 2.4 from 2.3
Very odd thing with the network binding. Took me 2 days to find this.
I have some micro controllers with WiFi modules controlling garden lighting. These cortex M0’s went offline when 2.4 was installed.
Resetting them, they boot, connect to WiFi/mqtt, then in less than one minute hang.
Traced it to the network health binding, this “pings” them every 60 seconds. When the “ping” occurs, the microcontrollers hang.
I can ping them from system (ICMP, Windows or Linux), with no problem, also arping works fine. Just networkhealth “ping” causes them to hang. I have tried every setting on the network health thing for each of them, but they still hang. Maybe the java “ping”?
I have disabled the thing for these microcontrollers for now (but now I have no way of knowing if they are online or not).
Anyone have any ideas of how to fix this? Or what is different about the 2.4 networkhealth binding vs the 2.3? I already tried system_ping=“false”, port=0, changing arping to /dev/null.
Any suggestions are welcome.
Make sure you are not using arping fur these controllers. I’d expect using the system point might work better since you say you can ping them from the terminal without problem.
Thanks, I tried setting arping to /dev/null (in fact I don’t think arping was installed before I tried troubleshooting). Anyway, arping from the command line works fine.
I suspect the “java ping” whatever that is. Is there any way to disable this to test the theory?
Java ping is just a normal ICMP ping but issued via the Java API (".reachable()"). This is quite unreliable though therefore the option to use the system ping (ping utility of the operating system).
But: No matter what you choose there is always also a udp packet send to wake up iOS devices from deep sleep. That might be the actual problem.
Interesting about the udp packet to wake up iOS devices. Both of the devices that hang are running servers, it might be that they are receiving the udp packet and going off to do something that causes them to hang.
I’ll take a look at the server code they are running (as they are microcontrollers the code is quite primitive, ie receive a packet - do something). Could be an untrapped error.