Hi,
I have been experimenting with eDRX on a
CAT M1 LTE modem that is connecting to a Mosquitto MQTT
Broker. For those of you that are not familiar with eDRX, it’s
a power saving feature available on newer low power, low data
rate LTE modems. It allows the normal “check-in” time with the
cellular network to be adjusted from around 1 second to
several thousand. By increasing the time between check-ins,
power is conserved. The tradeoff is that between check-ins,
the device is not reachable.
My embedded test application is pretty
simple, it connects to the broker, subscribes to a topic and
then enters eDRX mode. The application doesn’t disconnect from
the broker once it has initially connected. Periodically at
the set eDRX interval, the device wakes up and checks for any
MQTT messages. It will also wake up and send a KA if needed at
the KA interval which is 3600 seconds.
On the other side, I have a simple PC based
client that can post messages to the topic the embedded device
is subscribed to. The test procedure is to wait for the device
to enter eDRX and then post a message to be delivered to the
device.
My initial testing went well up to the
point I set the eDRX time to 1310 seconds. At that point, if I
sent a message to the device while it wasn’t reachable, I
noticed Mosquitto would report a socket error and disconnect
around 1000 seconds. I thought maybe the OS was closing the
socket for inactivity, but that timeout is 2 hours. So some
error handling in Mosquitto must be timing out and giving up
at 1000 seconds. If I do not attempt to send a message to the
device it stays connected with no socket errors and at the KA
interval, I see a KA sequence between the broker and the
device.
It's possible the way I am attempting to
use eDRX with MQTT is flawed, but I don't see another way.
Thanks,
John