nrf9160: LTE + GPS + MQTT - GPS Blocked


Hi,

I am trying to understand either the timing or feature I am missing with respect to LTE, GPS and MQTT.  I have read a number of posts and questions on a similar topic, but didnt find what I was doing wrong.

I have a 9160DK which connects fine to LTE and MQTT or LTE and GPS but I cant get all 3 to connect.

When I have LTE and MQTT connected, the GPS stays in NRF_MODEM_GNSS_EVT_BLOCKED state and never gets UNBLOCKED. But when I have LTE and GPS only (no MQTT) it gets UNBLOCKED in a few seconds. I can only think that the MQTT is keeping the LTE connection open or busy such that LTE never goes into PSM.

When setting up the modem, I believe I am setting PSM with the following commands, and dont get any errors:
```
lte_lc_init();
lte_lc_psm_req(true);
lte_lc_edrx_req(true);
lte_lc_connect();
```

Output of CPSMS, indicates to me it is in PSM.
```
AT+CPSMS? : +CPSMS: 1,,,"00000011","00100001"
```

After the LTE is connected/setup, I call the following sequence without error (error checking is in the code, removed from the post)

nrf_modem_gnss_init();
nrf_modem_gnss_event_handler_set(gnss_event_handler)
nrf_modem_gnss_nmea_mask_set(NRF_MODEM_GNSS_NMEA_RMC_MASK |
    NRF_MODEM_GNSS_NMEA_GGA_MASK |
    NRF_MODEM_GNSS_NMEA_GLL_MASK |
    NRF_MODEM_GNSS_NMEA_GSA_MASK |
    NRF_MODEM_GNSS_NMEA_GSV_MASK)
    nrf_modem_gnss_fix_retry_set(0)
    nrf_modem_gnss_fix_interval_set(1)
    nrf_modem_gnss_start()

For testing purposes, If I have a while (1) {}, after the above,  it will connect to LTE and GPS and all works fine.

But the goal of the project is to send GPS and ANT+ data to an MQTT broker, so after the LTE + GPS setup above, I have;


mqtt_client_init( client );
… set up the broker details - as per mqtt_simple example …
mqtt_connect( &client );

MQTT connects and I can send a sample string to the broker, so I know that is all working - connectivity etc…

But, if I have MQTT connected, it never connects to GPS, its GPS stays in a BLOCKED state

I have an external modem connected and its outside. I know there is no issues with the physical setup, because as soon as I dont connect to the broker it all works fine.

Q: Do I need to set the modem differently ?

Q: Do I need to disconnect from MQTT for GPS to work and then reconnect when I want to send any data ?

Q: Am I missing a setting on the MQTT setup/config so it allows the LTE go into PSM mode ?

regards

-brett

Parents Reply
  • Hi Håkon,

    Thanks for the reply, a couple of follow up questions:

    Is there a reason the following commands all give a different answer, are they all looking at different components of the LTE connection?

    Query:

    AT+CPSMS? : +CPSMS: 1,,,"00000011","00100001"

    AT%XMONITOR : %XMONITOR: 1,"Telstra@","Telstra@","50501","3012",7,28,"0829550D",66,9410,36,22,"","00011110","11100000","01001110"

    lte_lc_psm_get( &tau, &active_timer );

    returns: TAU: -1 , Active_timer: 60

    Set:

    If I want to change the TAU and RAT values I was looking to use:
    lte_lc_psm_param_set( ), or

    should I use at_cmd_write()

    regards

    -brett

Children
  • Hi,

     

    Brett said:
    If I want to change the TAU and RAT values I was looking to use:
    lte_lc_psm_param_set( ), or

    should I use at_cmd_write()

    The first is a helper function to set the PSM parameters, while the second is a generic AT command write. Both can be used for setting preferred PSM TAU/ActiveTime.

     

    Brett said:
    Is there a reason the following commands all give a different answer, are they all looking at different components of the LTE connection?

    You have to differentiate between what you request, and what the network applies.

    You can request 10 minute TAU, but the network will most likely change this to its own defined minimum level (could be 30, could be 60 minutes or higher for that matter).

     

    Brett said:

    AT%XMONITOR : %XMONITOR: 1,"Telstra@","Telstra@","50501","3012",7,28,"0829550D",66,9410,36,22,"","00011110","11100000","01001110"

    lte_lc_psm_get( &tau, &active_timer );

    returns: TAU: -1 , Active_timer: 60

    Try changing the active timer, which is currently set at 1 minute, via the CONFIG_LTE_PSM_REQ_RAT="00000001"

    This can be 2 seconds (or even disabled, as the network will have a hard-coded timing wise paging before entering PSM)

     

    Kind regards,

    Håkon

Related