Sensor configuration
On this page you will find a detailed description on how to configure forwarding and heartbeat functionality of the Scout in the Sensor mode. For full description of the capabilities and concept please refer to the Sensor mode page.

Forwarders
Scout can run multiple Forwarders in parallel. Each Forwarder instance pushes telemetry to its own destination using its own protocol/format settings. If the given instance is not processing the data sent to it fast enough only that instance is affected. The Scout has two pre-defined forwarders available in the configuration UI each can be disable if not desired.
The Dronetag Forwarder can be used simultaneously with any other forwarder this is mainly intended for the Cloud/On-premise for further details on how to operate the Scout in Cloud/On-premise refer to this page.
The Local Map Forwarder is builtin as quick way on how to check the data received by the Scout. This data are visualized by the Sample Map in the Sensor mode described bellow.
Sample Map for Scout in Sensor Mode

The Sample Map is a built-in demonstration tool used to visualize detection data from the Dronetag Scout in Sensor Mode. It offers a quick way to verify that the Scout is properly receiving and processing nearby drone data.
This tool is also available as an open-source reference project on GitHub:
👉 scout‑sensor‑demo‑map
It is not intended for production use, as it lacks advanced features like:
- Alerts or notifications
- Persistent historical data
- Export capabilities
All data is stored in memory and is cleared when the webpage is closed.
This map is intended as a development reference and a basic visualization tool. It displays the real-time positions and trajectories of detected drones along with the Scout’s own location.
This demo map will be deprecated in future releases and replaced by a full-featured application running directly on the Scout—DroneScanner. DroneScanner will be a part of Sensor+ Mode, offering persistent history, data export, and advanced scanning features.
Pre‑defined Forwarders
Forwarder | Description |
---|---|
Dronetag Forwarder | Uses Dronetag’s protobuf-based format for on‑prem or Cloud ingestion. |
Local Map Forwarder | Publishes json+odid to a sample map served at http://<SCOUT_IP>/map . |

Currently, we support specification of additional two forwarders in our UI. Each forwarder can specify a protocol, URL and Format. In the future, we might add an option on how to specify more, if needed.
- Select Protocol from the combobox
- Enter URL in format described bellow
- Select desired payload format from the combobox
- (Optionally) Select desired batching options
- Apply the forwarder by clicking on the Update Forwarding button
Batching Behavior
Forwarders support configurable batching to reduce load and network overhead:
- Default batch size:
100
entries - Default timeout:
0.1 seconds
This means data is buffered until either:
- 100 messages are collected, or
- 0.1 seconds have elapsed since the last batch was sent
...whichever happens first. Both parameters are configurable per forwarder.
Supported Protocols & URL Schemes
- HTTP/HTTPS
- MQTT
The HTTP/HTTPS protocol sends the selected payload format via a POST
method to the URL. THe HTTP/HTTPS URL is capable of adding a custom headers. This can be leveraged to implement a basic authorization against your sever in form of static tokens or HTTP/HTTPS basic authorization.
URL format
http(s)://[[header-name:header-value][,other-header:other-value...]@]host:port/path
Static HTTP headers can be embedded in the user‑info part of the URL, separated by commas.
Example
http://Authorization:Bearer jlsadoHIO@nkad=@myserver.cz:8081/dronetag/odid
Dynamic authentication mechanisms (e.g. OAuth 2) are not supported yet.
URL format
mqtt(s)(+ws)://[username:password@]host:port/path#topic
Supported schemes:
mqtt://
mqtts://
mqtt+ws://
mqtts+ws://
Secure variants (mqtts
, mqtts+ws
) currently do not support client certificates.
Custom/Internal Trust
Some of the protocols, described above, needs for its operation a trusted certificate authority. Generally common issues, traditionally available on the internet, are included. For use with Custom or Internal authorities in tightly controlled enviroment, that do not have access to internet, refer to the System Configuration for adding a trusted CA.
Payload Formats
All JSON-based forwarders (e.g., json+dronetag
, json+odid
) use the JSON Lines (JSONL) format. This means:
- Each entry is a standalone JSON object placed on a separate line
- The overall payload is not wrapped in an array; it is newline-delimited for easy streaming and processing
Example
{"sn": "1000033", "rssi": -57, "tech": "B5", ...}
{"sn": "1000044", "rssi": -60, "tech": "B4", ...}
- JSON+ODID Format
- JSON+Dronetag
Top-Level Fields
Key | Type | Example | Description |
---|---|---|---|
sn | str | 1000033 | Serial number |
mac | str | MAC in format XX:YY:ZZ:AA:BB:CC | |
counter | int | 13 | Counter of received messages |
rssi | int | -57 | Signal strength |
tech | str[2] | B5 | Receiving tech: B4, B5, WN, WB |
recv_id | int | Receiver ID | |
module_id | int | 2 | Antenna/module number |
module_type | int | 11 | Internal module type |
msg_type | int | 15 | ODID message type |
odid | dict | - | This contains a preprocessed payload of the protocol. Regrading the possible values and message structure refer to ODID Library. Also for more details see the full protocol description bellow |
Textual JSON format with raw fields parsed from ODID sources bellow is just a representation formatted for clear understanding the format sent will additionally be:
- No indentation the object will be always a single line since its send in JSONL
- All Invalid fields are processed and converted to
null
(Example Lat,Lon0,0
is converted tonull
)
Example JSON+ODID Messages
{
"rssi": -92,
"tech": "B5",
"recv_id": 2,
"module_id": 0,
"module_type": 11,
"msg_type": 15,
"odid": {
"BasicID": [{"UAType": 0, "IDType": 1, "UASID": "1596F359746167260079"}],
"Location": {
"Status": 1,
"Direction": null,
"SpeedHorizontal": null,
"SpeedVertical": null,
"Latitude": null,
"Longitude": null,
"AltitudeBaro": -23.5,
"AltitudeGeo": null,
"HeightType": 0,
"Height": 0.0,
"HorizAccuracy": 0,
"VertAccuracy": 0,
"BaroAccuracy": 0,
"SpeedAccuracy": 0,
"TSAccuracy": 0,
"Timestamp": "2025-04-06T06:22:58"
},
"SelfID": null,
"System": {
"OperatorLocationType": 0,
"ClassificationType": 1,
"OperatorLatitude": null,
"OperatorLongitude": null,
"AreaCount": 1,
"AreaRadius": 0,
"AreaCeiling": null,
"AreaFloor": null,
"CategoryEU": 1,
"ClassEU": 0,
"OperatorAltitudeGeo": null,
"Timestamp": "2025-04-06T07:22:58"
},
"OperatorID": {
"OperatorIdType": 0,
"OperatorId": ""
}
}
}
{
"rssi": -75,
"tech": "B4",
"recv_id": 2,
"module_id": 0,
"module_type": 11,
"msg_type": 1,
"odid": {
"BasicID": [],
"Location": {
"Status": 1,
"Direction": null,
"SpeedHorizontal": null,
"SpeedVertical": null,
"Latitude": null,
"Longitude": null,
"AltitudeBaro": -22.5,
"AltitudeGeo": null,
"HeightType": 0,
"Height": 0.0,
"HorizAccuracy": 0,
"VertAccuracy": 0,
"BaroAccuracy": 0,
"SpeedAccuracy": 0,
"TSAccuracy": 0,
"Timestamp": "2025-04-06T06:22:59"
},
"SelfID": null,
"System": null,
"OperatorID": null
}
}
Internal protobuf‑derived JSON that allows you to process the RAW Opendroneid frames by your application. The format has a additional fields regarding the reception such as technology, channels, timestamp, location and etc.
Top-level Object (DriMessage
)
Key | Type / Value | Description |
---|---|---|
receiver_data | object | null | Details about the module that captured the frame (see below). |
odid_payload | object | null | Encoded Open Drone ID information (see below). |
Receiver metadata (receiver_data
)
Key | Type / Example | Notes |
---|---|---|
location | object | null | Optional GNSS fix of the receiver. |
receiver_type | int (0 – 3) | Internal receiver type identifier. |
component_id | uint32 | Distinguishes multiple identical chips on one board. |
timestamp | uint32 | Custom epoch (2021-01-01 T00:00:00Z) in 0.1-s ticks. |
Receiver location (location
)
Key | Type / Example | Notes |
---|---|---|
latitude | float | Latitude in Degrees as a decimal number |
longitude | float | Longitude in Degrees as a decimal number |
Received message payload (odid_payload
)
Key | Type / Example | Description |
---|---|---|
counter | uint32 | Monotonic per-receiver message counter. |
standard | int | 0 = ASD-STAN , 1 = ASTM . |
encoded_message | string (Base64) | Raw binary ODID message encoded in Base64. Can be parsed by ODID Library |
wifi_beacon_info | object | null | If present identifies Wifi Beacon. Transmission-specific metadata (see below). |
wifi_nan_info | object | null | If present identifies Wifi NaN. Transmission-specific metadata (see below). |
bluetooth_legacy_info | object | null | If present identifies Bluetooth Legacy. Transmission-specific metadata (see below). |
bluetooth_long_range_info | object | null | If present identifies Bluetooth Long range. Transmission-specific metadata (see below). |
Transmission info objects
Field | Wi-Fi Beacon / NAN | BT Legacy / Long-Range | Description |
---|---|---|---|
mac | ✔ | ✔ | Transmitter MAC in bytes → hex (e.g. "F09FC2001122" ). |
rssi | ✔ | ✔ | Signal level in dBm (signed int). |
channel | ✔ (Wi-Fi only) | — | Wi-Fi channel (1-165). |
frequency | ✔ (Wi-Fi) | — | 0 = 2.4 GHz , 1 = 5 GHz . |
noise_floor | ✔ (optional) | ✔ (optional) | dBm value if reported. |
Example json+dronetag
Line
{
"receiver_data": {
"location": { "latitude": 50.0739989, "longitude": 14.4666903 },
"receiver_type": 1,
"component_id": 0,
"timestamp": 130503488
},
"odid_payload": {
"counter": 42,
"standard": 1,
"wifi_beacon_info": {
"mac": "F09FC2001122",
"rssi": -54,
"channel": 36,
"frequency": 1,
"noise_floor": -96
},
"encoded_message": "ABEiM0R.....q7zN3u8g=="
}
}
Bluetooth Legacy Eg. tech=B4 sends each message type (System, Location...) separately. PACKED messages are not supported over B4. Aggregation may be introduced later.
- Recommended: ignore Bluetooth legacy (B4) messages unless you will be composing manually using the mac address as identifier
- Note: This behavior can be similar with the other technologies it depends on the implementation of the transmitter. Generally Wifi Beacon, Wifi NaN and Bluetooth 5 Long range sends all of the information in single pack but it is not guaranteed. We do not know any transmitter that would do so but it is possible. So take into account that not all of the information has to be valid when processing to prevent unnecessary crashes.

Heartbeat
Scout currently supports one configured Heartbeat endpoint to which it sends JSON messages every 10 s. The heartbeat has the same protocols and URL format as described above. These messages contain:
- Basic device information
- GNSS position (when GNSS is enabled)
- LTE network status (when an LTE modem is present)
⚠️ Note: In a future release, Heartbeat will be merged with Forwarders so every Forwarder endpoint will receive Scout status information. At the moment, Heartbeat is limited to a single, separately‑configured endpoint.
Example Heartbeat message:
{
"sn": "D1031854C53D1B8BD0",
"timestamp": 1750441875,
"gnss_position": null,
"gnss_satellites": 0,
"last_observation": 0,
"receivers": 0
}
Due to the implementation constrains the heartbeat is pre-configured to sent the information to the Local Demo map, when changed the Scout will not be visible in the Demo map.