Hi Frank,
         
        That is the
            exact approach I have used successfully with another mode of
            operation on these devices called PSM (Power Save Mode).
            Unlike eDRX,  PSM is used when the device doesn’t need to be
            reachable at a given interval. In this mode of operation,
            the device internally decides when to connect to the broker
            based on some event. That event could be from a periodic
            timer expiration or parameter change.
            
         
        Waking up and
            connecting to the broker to check for or send a message
            consumes a lot more power than for the device to wake up and
            quickly check if the network is attempting to communicate
            with it because it has a pending message to deliver to it.
         
        I thought about
            using another application to send a page to the device when
            a message on the broker is pending for it, but I was hoping
            for a cleaner approach.
         
        John
         
        
         
        Hello John,
          
          It's been a few years since I've deployed a cell modem, and I
          hadn't heard of eDRX. But it sounds great; much better than
          having to manually power the modem up and down each cycle
          through an external supply.
          
          Your scenario, however, sounds like a textbook case for using
          persistent MQTT sessions. The first time your embedded system
          powers up, do the following:
        
          - 
            Connect with the "clean sessions" flag set to false, and be
            sure to use a unique Client ID string for each device. (I
            typically use a combination of device type and serial
            number).  It's also handy to register an LWT message when
            you connect.
- 
            Then register the topics that you want to monitor.
- 
            Disconnect from the broker.
- 
            Let the modem power down
When the modem powers back up ("enters eDRX"):
        
          - 
            Reconnect with the same Client ID and clean_session=false.
            This time, you don't need to re-register the topics.
- 
            The broker will have kept all the messages destined to your
            device topics and will send them to you now.
- 
            Publish any of the messages that you want to send now. (Some
            clients will cache messages while you're off-line and
            transmit them automatically now).
- 
            Disconnect from the broker.
- 
            Let the modem 
The broker
          will treat your device as having a virtual session across
          actual connects and disconnects, and manage the traffic for
          you. In this way, your PC client can send messages to the
          device at any time, even when it's disconnected, and the
          server will hold onto it until the next connection.
          
          
          This is exactly what MQTT was designed to do and can make your
          life much easier.
          
          The downside, obviously, it the additional overhead and
          latency of sending connect and disconnect packets each time,
          but with LTE modems, this isn't usually a big problem. With
          something like a satellite modem, this is more problematic as
          the turnaround time is huge.
          
          An additional downside is that you can fill the server with a
          lot of data if you have devices that go off-line (break down)
          a lot. But MQTT5 has some features to deal with that like
          session timeouts ("Expiry").
          
          Give it a try and see if you can live with the additional
          overhead. If so, It'll be much easier in the long run.
          
          Frank
          
          
          
        
          On 2/23/19 5:55 AM, john rubis wrote:
         
        
          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
          
              
              
          _______________________________________________
          mosquitto-dev mailing list
          mosquitto-dev@xxxxxxxxxxx
          To change your delivery options, retrieve your password, or unsubscribe from this list, visit
          https://www.eclipse.org/mailman/listinfo/mosquitto-dev