Outdoor Location Engine

Outdoor Location Engine

The outdoor-location-engine is built on nRF Connect SDK (Zephyr) and in essence does the following two things:

  • Listen and Respond to External Commands
  • Report Location to the Cloud

The above two responsibilites are managed by the following sub-systems:


UDP Listener

The UDPListener listens on port 12345 for Commands and relays them to the Dispatcher.


We listen on GPIO port 0; Pin 10. GPIO P0.10 for PowerUp (0)/PowerDown (1) bit from the IndoorLocationEngine, this controls the power mode of the NRF-9160. When a PowerDown bit is received, the NRF-9160 puts itself into deep-sleep and wakes up on PowerUp interrupt.


The role of the Dispatcher is to manage the active, idle, ping and lost mode state for the Responder. It comes into play when commands are sent via UDP Listener or GPIO pin, in turn triggering the Dispatcher to initiate an appropriate callback to the Responder.


When directed to be in an activated state, the Responder takes charge of coordinating the processes that lead to the establishment of a connection with the MQTT-SN gateway. It then communicates with the LocationEngine to get a location fix and subsequently initiates periodic location reports according to the predefined interval.

Location Engine

The LocationEngine is reponsible for communicating with the NRF-9160 modem and getting a location fix. It uses a fallback of Cellular location for when GNSS is unavailable.

Config Options

Following are the required config options to set before you can flash the firmware onto the Tracker.

  • CONFIG_DEVICE_ID: Set this to the same as the unique ble ID as scanned by the iOS app.
  • CONFIG_FINDMYCAT_CLOUD_HOSTNAME: FindMyCat Cloud instance hostname.
  • CONFIG_MQTT_SN_PUBLISH_TOPIC: Your MQTT topic string that device should publish to. (also see this step)

(optional, for fine tuning)

  • CONFIG_LTE_EDRX_REQ_VALUE_LTE_M: controls how long device sleeps before being reachable for external commands.
  • CONFIG_ACTIVE_MODE_LOCATION_REFRESH_PERIOD_SECONDS: Interval for location refreshes in active mode. (420s default (7 mins))
  • CONFIG_LOST_MODE_LOCATION_REFRESH_PERIOD_SECONDS: Interval for location refreshes in lost mode. (30s default)