HAB PADD is an app for Android tablets and car head units, that provides all the functions required when chasing a high altitude balloon (ideally one transmitting LoRa packets, but other modes can be integrated). It’s similar to HAB Explora but makes use of the extra screen space to add more functions. It offers (extra to Explora in bold):

  • Chase car upload to HABHUB and sondehub/amateur
  • LoRa reception and upload, via USB or Bluetooth or Pi LoRa Gateway
  • Backup reception of telemetry via HABHUB, Sondehub/amateur andhab.link
  • Reception of telemetry via UDP over WiFi
  • Transmission of received telemetry via UDP over WiFi
  • Display of telemetry
  • Display of distance and direction to payload
  • Display of map with balloon and chase positions
  • Function to display driving route on map
  • Function to provide navigation to balloon using external navigation app
  • SSDV (live imaging) page
  • Audio indication of new packets
  • Audio indication of alarms
  • Speech “e.g. payload XYZ is descending”

The app is available in the Google Play store.

There are several options for local LoRa reception. First, it can use an OTG USB connection (if supported by your device) to a simple receiver comprising a LoRa module plus microprocessor with USB port; this is now available in the Uputronics store, or to build one see this article. Or it can use a Bluetooth connection to similar hardware, using a Bluetooth adapter (e.g. HC-06) connected to the Arduino, or an ESP32 board (e.g. TTGO ESP32 LoRa). Finally, it can use one or two LoRa gateways on the same network. In all of these cases, the LoRa parameters (frequency etc.) can be controlled from the app.


Install and start the program. When it starts it will ask for permission to use the device’s location; since this is needed for almost all program functions then it’s best that you agree!

Connect HAB Receiver

For USB, connect the LoRa receiver via a USB OTG cable, taking care to connect the host end to the phone and the slave end to the receiver. Android will ask you if you wish to allow the app to use the device (again, you do!). Check the box so that this app is automatically started when you reconnect this USB LoRa device.

For Bluetooth, you will need to pair the phone with the receiver before it can be used, and then choose the paired device under Settings –> BT. Within a few seconds the app should then connect to the Bluetooth receiver.

For a LoRa Gateway, enter the IP address or hostname of the gateway device on the Settings –> Gateway 1 (or 2) screen. Note: Android will not normally work with local hostnames, however if you configure your gateway(s) to emit UDP metadata, then that data contains the gateway hostname and IP address. You can then set the Android app to listen to the same UDP port, and when it hears that data it will match the hostname to the IP address so it can connect via that.

If you have other receiving devices – LoRa or otherwise – that broadcast HAB telemetry over a network connection using UDP, then provided they use a supported format then you can tell the app to listen to them (Settings –> UDP). Supported formats include raw UKHAS telemetry, OziMux and OziPlotter formats. The LoRa Gateway emits telemetry via UDP on port 12004 by default, so this is a good one to use.

Screen Elements

The app has 3 screen sections. At the top is the HAB status bar with up to 3 payload buttons (gree text = good; red text = telemetry loss), plus the position of the selected payload (if you have multiple payloads, select by touching the appropriate button):

On the left is the main menu with 9 buttons.

The buttons are:

  • Payloads – Shows received telemetry for up to 3 payloads
  • Direction – Shows the direction and distance to the selected payload
  • Map – Embedded Google map showing balloon(s) and chase device
  • Navigate – Open an external app for on or off-road navigation to selected payload or predicted landing point.
  • SSDV – Embedded SSDV page for the current payload(s)
  • Log – Event log – e.g. “Payload PITS has launched”
  • Uplink – For sending commands to the balloon
  • Settings – Shows the various setup screens
  • Sources – Shows all of the sources of telemetry

At the bottom there’s a status bar with source status for the various HAB data sources and local GPS source, plus the local GPS position and UTC time:

This shows the status for local GPS, the 2 LoRa gateways (GW1 and GW2), USB, Bluetooth (BT), sondehub/amateur (SH), UDP, Habhub (HH) and hab.link (HL). The bar also shows current UTC time from the tablet’s GPS. The circles, where present, show the upload status (Green = Good, Red = Failed, Gray = Not in use).

The central area is for function-specific screens, and initially just shows a splash screen with the app version number.

The area on the right shows the upload status for each online service: HH=HABHUB, HL=HabLink, SH=Sondehub/amateur, MQ=MQTT, SS=SSDV.


Up to 3 payloads can be displayed; if a 4th is heard then it will replace whichever of the other 3 has the oldest data.

Each displayed payload shows the payload ID, time since last message received, UTC time of that message (as sent by the payload), latitude and longitude, altitude (with maximum altitude in brackets), ascent/descent rate,

If you do have multiple payloads then you can select between them by touching the button at the top; once done, the selected payload will be used on the direction screen and for navigation.

Direction Screen

This screen shows the distance and direction from your location to the latest position received from the payload.

If your tablet has a magnetic compass then that will be used; if not then the GPS “heading” value will be used. The former gives direction to the phone’s orientation; the latter gives the the phone’s direction of movement and for tor this to be accurate you need to be moving, so if you aren’t then drive or walk approx 10-20 metres in a straight line. If the tablet isn’t reporting a heading then the compass marker will be in red, and will show the payload direction relative to North (North = straight ahead).

To the right there are blocks for the payload latitude, longitude, altitude, ascent rate and TTL (Time Till Landing, filled in during descent).

Map Screen

This shows an embedded Google map:

The map will initially centre on your location, but will then allow you to drag the map around at will. If you wish it to remain centred on your location then touch the “Car” button; if you wish it to centre on the payload then touch the “HAB” button.

This screen provides functions for for navigation and map directions to the payload. First, choose the payload on the left (if not already selected), then the target type (current balloon position or predicted landing position), then the type of navigation you wish to use.

You have these choices for navigation:

  • Navigate invokes a navigation app, and is intended for driving directions. First time you do this Android will ask you to choose which app you want to use for navigation (e.g. Waze, Google Maps).
  • Show Route uses an embedded (i.e. within this app) Google Map to show road directions to the payload.
  • Off Road is the same as Navigate, but is intended for off-road directions. It uses a different Android “intent” which means that Android will ask again for your choice and will remember that choice separately. So you can choose a different app e.g. Back Country Navigator or another OS mapping app.


This is simply an embedded web browser showing the SSDV page for the current payload(s).


This screen shows logged events, such as when the app notices that a payload has been launched or is descending.

Each event can be spoken out loud – see the Settings/General page.

This screen can be used to send commands to trackers that have been set up to periodically listen for commands from the ground.

Choose the payload to send to on the left; these buttons are filled in automatically as they are received by the app.

Choose the LoRa transceiver from the next column of buttons. These are enabled automatically according to which transceivers are connected to the app.

At top-right, choose the type of command to send.

Next, set when to send the command. If your tracker is set for a listening period at the start of each minute, select the “Send on n#’th second” option. If your tracker is set to transmit then listen for a period, choose “Send after Rx”. Note: This section is only visible for the USB and Bluetooth sources; the LoRa Gateway program has its own settings for when to upload.

If your payload needs a password to encrypt the commands, insert this. Finally, click the “Beam This Up” button to transmit the command.


There are 9 sections on the settings page:

  • General – Various settings that don’t have a home elsewhere
  • GPS – Controls upload of the tablet GPS position
  • GW 1/2 – Settings for network-connected LoRa gateways
  • USB – Settings for the attached USB LoRa receiver
  • BT – Setting for the attached Bluetooth LoRa receiver
  • UDP – Settings for listening to other receivers via UDP
  • From Web – Settings for downloads from web sources e.g. sondehub/amateur
  • To Web – Settings for uploads to web sources e.g. sondehub/amateur

Touch the appropriate button to enter your desired section. Once there, make your adjustments and then touch “Apply” or “Cancel”.

General Settings

GPS Settings

Gateway 1/2

  • “Network Address” is the IP address of the gateway (use this if it’s fixed and known) or the hostname. Note: Android will not normally work with local hostnames, however if you configure your gateway(s) to emit UDP metadata, then that data contains the gateway hostname and IP address. You can then set the Android app to listen to the same UDP port, and when it hears that data it will match the hostname to the IP address so it can connect via that.
  • “Port”is the TCP/IP port for to connection to the gateway (normally 6004).
  • “Ch0/1 Frequency” is the frequency to listen to for that channel (LoRa gateways can have 1 or 2 channels).
  • “Mode” is the LoRa mode from 0 to 7.

LoRa USB Settings

“Frequency” is the centre frequency to set the receiver to.

“Mode” is the LoRa mode to set from 0 to 7; most commonly 0 is used for telemetry, and 1 for SSDV with telemetry.

The 2 buttons enable upload of telemetry and SSDV from the tracker, using the callsign from the Settings/General page. Remember to enable the web services you wish to upload to, using the “To Web” page.

Sometimes the receiver and transmitter frequencies are offset by more than 4kHz which exceeds the lock range on LoRa modes 0 and 1. The Search button will search for a payload if you cannot receive it when you think you should be able to. It only works on mode 1 (mode 0 is too slow for this).

LoRa Bluetooth Settings

As for the USB section above, except for the addition of a “Device” box from where you can choose the paired Bluetooth device. This pairing must be done before entering the settings screen.

UDP Settings

This section is useful if you have receivers that broadcast telemetry – for example an installation of auto_rx (Sonde receiver) or HABDEC (RTTY receiver).

“Rx Port” is the port number that the app will listen telemetry toe the telemetry sent to. to listen to several ports, separate them by commas.

“Tx Port” is the port to transmit on. Only locally received telemetry is transmitted – i.e. from USB or Bluetooth.

From Web Settings

This configures use of the online sources of telemetry, allowing the app to fill in telemetry if you aren’t receiving it locally.

“White List” is one or more payloads, separated by commas, that the app will download telemetry for, in addition to any locally received payloads. This is useful if you do not have a receiver connected to your tablet.

The “Enable” buttons enable online download of payloads listed in the white list, or any received directly via LoRa etc.

To Web

This page controls uploading of local telemetry to various online services.

The online services support are:

  • SONDEHUB (sondehub/amateur)
  • MQTT – Any online MQTT broker to which you have access (note: websockets transport layer not supported for this). Enter the MQTT broker address etc on the left. In the payload topic, $PAYLOAD$ is replaced by the payload callsign, and $LISTENER$ is replaced by your callsign (general settings page). In the chase topic, $CALLSIGN$ is replaced by the chase car callsign (GPS settings page).
  • HABLINK is my MQTT broker free for your use. No configuration is required. You can view the uploaded telemetry by connecting to hab.link:1883 with no username/password, and subscribing to payloads/#, and to the chase car position by subscribing to chase/#. MQTT Explorer is a nice application for doing this.
  • SSDV is for uploading images.

Remember that you also need to enable uploads from each source – GPS, USB, Bluetooth, according to your requirements.


To see the status of the data sources, touch the status bar on any of the source buttons (USB/Habitat/GPS etc).

If you wish to change the settings for one of these sources, touch the source label e.g. “USB” and you will be taken directly to the settings page for that source.


If you want to change which apps are invoked from the Directions screen, go to Android Settings –> Apps, choose the existing app, then choose “Open by default”, then “Clear defaults”.