Configuration
Module Settings
Navigate to Connections > LoRaWAN > Settings to configure the network server.
| Setting | Type | Default | Description |
|---|---|---|---|
| Region | Dropdown | EU868 | Regional frequency plan (EU868, US915, AU915, AS923) |
| UDP Port | Integer | 1700 | Semtech Packet Forwarder listening port |
| Bind Address | String | 0.0.0.0 | Network interface to bind to |
| Gateway Timeout | Integer | 120 | Seconds before marking gateway disconnected |
Choose the region that matches your LoRaWAN devices and local regulations. This affects RX2 window parameters and frequency plans.
Gateway Management
Navigate to Connections > LoRaWAN > Gateways to manage gateways.
Registering a Gateway
- Click Add Gateway
- Enter the Gateway EUI (16-character hex, e.g.,
A840411234567890) - Optionally provide a Name, Description, and Location
- Click Save
Gateway Properties
| Property | Description |
|---|---|
| Name | Friendly name for the gateway |
| EUI | Unique 64-bit identifier (from gateway configuration) |
| Description | Optional description |
| Location | Optional location information |
Runtime Status
The gateway list shows real-time status:
| Column | Description |
|---|---|
| Status | Connected (green) or Disconnected (red) |
| Address | Gateway IP address and port |
| Last Seen | Timestamp of last communication |
| Uplink Count | Total uplinks received |
| Downlink Count | Total downlinks sent |
Device Management
Navigate to Connections > LoRaWAN > Devices to manage devices.
Device Registration Wizard
The wizard guides you through 4 steps:
Step 1: Activation Mode
| Mode | Description |
|---|---|
| OTAA | Over-the-Air Activation - Device joins dynamically using AppKey |
| ABP | Activation By Personalization - Pre-provisioned session keys |
OTAA is recommended for most deployments as it provides better security through dynamic session keys.
Step 2: Device Class
| Class | Description |
|---|---|
| Class A | Battery-optimized; receives only after transmitting (RX1/RX2 windows) |
| Class C | Always listening; receives downlinks immediately |
Step 3: Device Details
For OTAA devices:
| Field | Format | Description |
|---|---|---|
| Device EUI | 16 hex chars | Unique device identifier |
| Application Key | 32 hex chars | Root key for join and session derivation |
| Name | Text | Friendly name |
For ABP devices:
| Field | Format | Description |
|---|---|---|
| Device EUI | 16 hex chars | Unique device identifier |
| Device Address | 8 hex chars | Pre-assigned network address |
| Network Session Key | 32 hex chars | Key for network layer encryption |
| App Session Key | 32 hex chars | Key for application layer encryption |
| Name | Text | Friendly name |
Step 4: Payload Decoder (Optional)
Select a JavaScript decoder to parse uplink payloads into structured tags.
Payload Decoders
Payload decoders transform raw LoRaWAN payloads into meaningful Ignition tags.
Creating a Decoder
- Go to Connections > LoRaWAN > Devices
- Click the Decoders tab
- Click Add Decoder
- Enter a Name and JavaScript code
Decoder Script Format
function decodeUplink(input) {
// input.bytes: array of payload bytes
// input.fPort: LoRaWAN port number
var temperature = (input.bytes[0] << 8 | input.bytes[1]) / 100;
var humidity = input.bytes[2];
return {
data: {
temperature: temperature,
humidity: humidity
}
};
}
Input Object
| Property | Type | Description |
|---|---|---|
bytes | number[] | Raw payload as byte array |
fPort | number | LoRaWAN port (1-223) |
Return Object
{
data: {
fieldName: value, // Creates tag: Devices/{Name}/fieldName
// ...
}
}
Type Mapping
| JavaScript Type | Ignition Tag Type |
|---|---|
| number (integer) | Int4 or Int8 |
| number (float) | Float8 |
| boolean | Boolean |
| string | String |
Example Decoders
Temperature/Humidity Sensor:
function decodeUplink(input) {
return {
data: {
temperature: ((input.bytes[0] << 8) | input.bytes[1]) / 10 - 40,
humidity: input.bytes[2],
battery: input.bytes[3] / 255 * 100
}
};
}
GPS Tracker:
function decodeUplink(input) {
var lat = (input.bytes[0] << 16 | input.bytes[1] << 8 | input.bytes[2]) / 10000 - 90;
var lon = (input.bytes[3] << 16 | input.bytes[4] << 8 | input.bytes[5]) / 10000 - 180;
return {
data: {
latitude: lat,
longitude: lon
}
};
}
Decoders run in a sandboxed JavaScript environment with no file, network, or system access. Execution is limited to 500ms.
Device Extended Configuration
Each device has additional settings accessible via the edit dialog:
| Setting | Description |
|---|---|
| Name | Friendly name (can be changed anytime) |
| Decoder | Assigned payload decoder |
| Device Class | A or C (ABP only - OTAA devices cannot change class) |
Per-Device Tags
When a device is registered, tags are created automatically:
[LoRaWAN]/Devices/{DeviceName}/
├── Name Device name
├── DevEUI Device EUI
├── DevAddr Network address (after join)
├── DeviceClass "A" or "C"
├── Decoder Assigned decoder name
├── {DecodedField} Dynamic tags from decoder
├── Radio/
│ ├── RSSI Signal strength (dBm)
│ ├── SNR Signal-to-noise ratio (dB)
│ ├── Frequency Uplink frequency (MHz)
│ ├── DataRate e.g., "SF7BW125"
│ └── GatewayEUI Last receiving gateway
├── Frame/
│ ├── Counter Uplink frame counter
│ ├── Port LoRaWAN port
│ ├── PayloadHex Raw payload hex
│ ├── PayloadLength Bytes
│ ├── DecoderError Error message if decode failed
│ └── LastDecode Timestamp
└── Status/
├── Connection "Online"/"Offline"/"Pending"
├── LastSeen Last uplink timestamp
├── Battery 0-255 (from DevStatusAns)
├── BatteryLevel "XX%", "External", "Unknown"
├── Margin SNR margin (-32 to +31)
├── LastStatusUpdate When status received
└── Request Write true to request status