Connecting to the LoRaWAN Network
Aqua-Scope devices with LoRaWAN capability must be registered with their three keys at a LoRaWAN network operator that provides radio coverage at the device's location.
The Three Keys
| Key | Description | Where to Find |
|---|---|---|
| Dev EUI | Public device ID | On the device as a QR code and 16-character string |
| Join EUI | Network ID | Identical for all Aqua-Scope devices (see below) |
| Join Key | Private key | Retrieve via aqua-scope.com/lora |
Join EUI (App EUI)
The Join EUI is identical for all Aqua-Scope LoRaWAN devices:
49 43 48 54 48 59 20 21
(ASCII: I C H T H Y S ! — Ichthys, ancient Greek for "fish", is an early Christian symbol and fits as an acronym for Aqua-Scope's water theme.)
Retrieving Keys
Enter the public Device EUI key and your email address at aqua-scope.com/lora to receive the private Join Key.
Establishing a Connection (JOIN)
- Immediately after inserting batteries or connecting a power supply, the device attempts to connect to the LoRaWAN network.
- The LEDs blink during this process. After approximately 25 seconds, the JOIN process has either succeeded or been aborted.
- On battery power, the device immediately enters sleep mode if the join fails.
- If the sensor loses its connection to the server, an automatic Rejoin is performed.
Pressing the button always triggers a LoRaWAN communication, which also initiates a Rejoin if the connection has been lost.
Be aware of the duty cycle regulation for LoRaWAN. Sending messages or rejoins too rapidly in succession may be ignored by the LoRaWAN network.
Rejoin Behavior
When a device loses its connection to the LoRaWAN network (e.g., due to a gateway failure or network change), it automatically attempts to reconnect (Rejoin). The exact behavior depends on the device family.
Devices with WiFi (LoRaWAN 1.0.2, PHY V1.0.2 REV B)
Applies to: AQS, AQX, AQM, PRE series (devices with an additional WiFi module).
These devices use LoRaWAN specification 1.0.2 (PHY V1.0.2 REV B). Rejoin behavior and other LoRaWAN settings are controlled via configuration parameter 3 (LoRaWAN Register).
Configuration Parameter 3 — LoRaWAN Register
Default value: 0x0ffd
Lower 16 bits (configurable via LoRaWAN downlink 0x04):
| Bit(s) | Mask | Field | Default | Description |
|---|---|---|---|---|
| 0 | 0x0001 | Class C | 0 | 0 = Class A, 1 = Class C |
| 1 | 0x0002 | ADR | 0 | 0 = off, 1 = Adaptive Data Rate enabled |
| 2 | 0x0004 | Duty Cycle Control | 0 | 0 = off, 1 = enabled |
| 3 | 0x0008 | — | — | Not used |
| 4–7 | 0x00F0 | Join Retries | 3 | Number of rejoin attempts on connection loss |
| 8–11 | 0x0F00 | Confirmed Interval | 10 | Every x-th message is sent as Confirmed |
| 12–15 | 0xF000 | TX Power | 7 | Transmit power (0 = 0 dB, 7 = 14 dB, ≥11 = 22 dB) |
Upper 16 bits (configurable only via WiFi/serial):
| Bit(s) | Mask | Field | Description |
|---|---|---|---|
| 16 | 0x00010000 | Alarm Reporting | Send/clear alarm messages via LoRaWAN |
| 17 | 0x00020000 | Consumption Report | Send consumption reports |
| 18 | 0x00040000 | Sensor Report | Send sensor values periodically |
| 19 | 0x00080000 | Config Report | Report configuration changes |
| 20 | 0x00100000 | Pipe-Check | Enable pipe check via LoRaWAN |
| 21 | 0x00200000 | Periodic Config | Report configuration periodically |
| 22 | 0x00400000 | Fixed Payload | Use fixed payload format |
| 25–31 | — | Frequency Band | 0=EU868, 1=US915, 2=AS923, 3=AU915, 4=CN779, 5=IN865, 6=KR920, 7=RU864 |
Devices without WiFi (LoRaWAN 1.0.3)
Applies to: FLO, CLP, BUT, DRY, BVS, KFR series (pure LoRaWAN/LoRa devices).
These devices use LoRaWAN specification 1.0.3 and are based on the RAK3172 module from RAK Wireless. The rejoin strategy follows the RAK Wireless implementation — details can be found in the RAK3172 datasheet.
Usage with TTN
All Aqua-Scope LoRaWAN devices can be operated on The Things Network (TTN). The devices are already listed in the TTN Device Repository, and a valid payload decoder is activated during setup.
Daisychain Protocol
All Aqua-Scope LoRaWAN devices use a unified Daisychain protocol on FPort=10. Multiple commands can be chained together in a single LoRaWAN message (up to a maximum of 51 bytes). The receiver identifies where one command ends and the next begins based on the command ID and defined length.
Uplink Commands (Device → Network)
0x03 — Hardware Version Report (4 bytes)
Sent automatically at boot and as a response to downlink 0x03.
| Byte | Field | Description |
|---|---|---|
| 0 | 0x03 | Command ID |
| 1 | HW | Hardware version |
| 2 | CAP_MSB | Capabilities bitmap (high byte) |
| 3 | CAP_LSB | Capabilities bitmap (low byte) |
0x04 — Configuration Report (4 bytes)
Response to downlink 0x14 (Config Get) or confirmation after 0x04 (Config Set).
| Byte | Field | Description |
|---|---|---|
| 0 | 0x04 | Command ID |
| 1 | IDX | Parameter index |
| 2 | VAL_MSB | Parameter value (high byte) |
| 3 | VAL_LSB | Parameter value (low byte) |
0x06 — Sensor Report (4 or 6 bytes)
Response to downlink 0x06 (Sensor Get) or sent periodically.
| Byte | Field | Description |
|---|---|---|
| 0 | 0x06 | Command ID |
| 1 | ID | Sensor type (see sensor types table) |
| 2 | VAL_MSB | Sensor value (high byte) |
| 3 | VAL_LSB | Sensor value (low byte) |
Special case for sensor type 0x83 (water meter): 32-bit value across 4 bytes (6 bytes total length).
0x0a — Firmware Version Report (5 bytes)
Sent automatically at boot.
| Byte | Field | Description |
|---|---|---|
| 0 | 0x0a | Command ID |
| 1–4 | VER | Firmware version as 32-bit value |
0x0b — Alarm Report (5 bytes)
Sent when an alarm is triggered or cleared.
| Byte | Field | Description |
|---|---|---|
| 0 | 0x0b | Command ID |
| 1 | STATE | 0x01 = alarm active, 0x00 = alarm cleared |
| 2 | TYPE | Alarm type ID (device-specific, see product manual) |
| 3 | VAL_MSB | Alarm value high byte (e.g., temperature, pressure) |
| 4 | VAL_LSB | Alarm value low byte |
0x12 — Battery Report (4 bytes)
| Byte | Field | Description |
|---|---|---|
| 0 | 0x12 | Command ID |
| 1 | VOLT | Battery voltage in 100 mV steps (e.g., 0x21 = 3.3 V) |
| 2 | BAT_MSB | Consumed capacity in mAh (high byte) |
| 3 | BAT_LSB | Consumed capacity in mAh (low byte) |
0x16 — Pressure Statistics (9 bytes)
Periodic report with pressure statistics (pressure sensors only).
| Byte | Field | Description |
|---|---|---|
| 0 | 0x16 | Command ID |
| 1–2 | PMIN | Minimum pressure in interval (mBar) |
| 3–4 | PMAX | Maximum pressure in interval (mBar) |
| 5–6 | PAVR | Average pressure (mBar) |
| 7–8 | PDEV | Standard deviation (mBar) |
0x1a — Extended Version Report (12 bytes)
Extended version information with status.
| Byte | Field | Description |
|---|---|---|
| 0 | 0x1a | Command ID |
| 1–4 | STM_FW | STM firmware version (32-bit) |
| 5–8 | MSP_FW | MSP firmware version (32-bit) |
| 9 | STAT | Device status |
| 10–11 | CONF | System configuration (16-bit) |
Downlink Commands (Network → Device)
0x03 — Hardware Version Get (1 byte)
| Byte | Field | Description |
|---|---|---|
| 0 | 0x03 | Command ID |
Triggers an uplink 0x03 (Hardware Version Report).
0x04 — Configuration Set (4 bytes)
| Byte | Field | Description |
|---|---|---|
| 0 | 0x04 | Command ID |
| 1 | IDX | Parameter index (device-specific, see product manual) |
| 2 | VAL_MSB | New parameter value (high byte) |
| 3 | VAL_LSB | New parameter value (low byte) |
The device confirms with an uplink 0x04 (Configuration Report).
0x06 — Sensor Get (2 bytes)
| Byte | Field | Description |
|---|---|---|
| 0 | 0x06 | Command ID |
| 1 | ID | Requested sensor type (see sensor types table) |
Triggers an uplink 0x06 (Sensor Report) with the requested value.
0x07 — Valve Position (2 bytes)
| Byte | Field | Description |
|---|---|---|
| 0 | 0x07 | Command ID |
| 1 | STATE | 0x00 = close valve, 0x64 = open valve |
Only for devices with valve control (BVS, KFR).
0x0b — Alarm Clear (2 bytes)
| Byte | Field | Description |
|---|---|---|
| 0 | 0x0b | Command ID |
| 1 | TYPE | Alarm type ID, 0x00 = clear all active alarms |
0x14 — Configuration Get (2 bytes)
| Byte | Field | Description |
|---|---|---|
| 0 | 0x14 | Command ID |
| 1 | IDX | Parameter index to read |
Triggers an uplink 0x04 (Configuration Report).
0x17 — Valve Status Get (1 byte)
| Byte | Field | Description |
|---|---|---|
| 0 | 0x17 | Command ID |
Triggers a status report with the current valve status.
Sensor Types (Uplink 0x06)
| ID | Sensor | Unit | Example |
|---|---|---|---|
0x01 | Temperature | 1/10 °C (two's complement) | 0x00CD = 20.5 °C; 0xFFEA = −2.2 °C |
0x02 | Humidity | %RH | 0x003C = 60 %RH |
0x03 | Uptime | Hours | 0x0168 = 360 h |
0x10 | Water pressure | mBar | 0x0C80 = 3200 mBar |
0x11 | Water consumption | ml | — |
0x12 | Flow State | — | Flow status |
0x81 | Rainfall | Tip count | — |
0x83 | Water meter | Liters (32-bit) | — |
Which sensor types, configuration parameters, and alarm types a device supports is documented in the respective product manual.
Example: Daisychain
A single uplink message can contain multiple commands:
06 01 00 CD 06 03 00 A8 0b 01 01 00 01 12 21 03 E8
│ │ │ └─ Battery: 3.3V, 1000mAh
│ │ └─ Alarm: active, Type 1 (flood), Value 1
│ └─ Sensor: Uptime = 168 h
└─ Sensor: Temperature = 20.5 °C