Skip to main content
Version: 8.3

Configuration

Configuration is managed through the admin web UI under Connections > LoRaWAN and is persisted as Ignition resources. The same objects can be managed via the REST API and the system.lorawan.* scripting functions.

Module Settings

Navigate to Connections > LoRaWAN > Settings to configure the network server. Settings are a singleton (resource lorawan-settings) split into Regional Parameters and Server Configuration.

SettingTypeDefaultAppliedDescription
RegionDropdownEU868Requires gateway restartRegional frequency plan
UDP PortInteger1700Requires gateway restartSemtech Packet Forwarder listening port
Bind AddressString0.0.0.0Requires gateway restartNetwork interface to bind to
Gateway TimeoutInteger120LiveSeconds before marking a gateway disconnected

The module also maintains internal state (a blocked-gateways list and a join-nonce counter) that is not typically edited directly.

Supported Regions

The Region dropdown offers 11 frequency plans. Pick the one your national regulator allows — it must match what your gateways and devices are provisioned for.

RegionBandWhere it is used
EU868 (default)Europe 863–870 MHzMost of Europe (Albania, Andorra, Austria, Belgium, Bosnia and Herzegovina, Bulgaria, Croatia, Cyprus, Czechia, Denmark, Estonia, Finland, France, Germany, Greece, Hungary, Iceland, Ireland, Italy, Latvia, Liechtenstein, Lithuania, Luxembourg, Malta, Moldova, Montenegro, Netherlands, North Macedonia, Norway, Poland, Portugal, Romania, Serbia, Slovakia, Slovenia, Spain, Sweden, Switzerland, United Kingdom), plus Türkiye, much of Africa (Angola, Botswana, DR Congo, Eswatini, Madagascar, Malawi, Mauritius, Morocco, Mozambique, Namibia, Seychelles, South Africa, Tanzania, Zambia, Zimbabwe) and the Gulf (Bahrain, Saudi Arabia, UAE)
US915North/South America 902–928 MHzUnited States, Canada, Mexico, Puerto Rico, and much of South and Central America (Argentina, Bolivia, Colombia, Costa Rica, Dominican Republic, Ecuador, Guyana, Panama, Paraguay, Peru, Suriname, Uruguay, Venezuela)
AU915Australia 915–928 MHzAustralia, New Zealand, Brazil, Chile, and parts of South America (Argentina and Ecuador also permit US915)
AS923Asia 920–923 MHz (Group 1)Japan, Malaysia, Singapore, Brunei, Cambodia, Hong Kong, Laos, Taiwan, Thailand
AS923-2Group 2 — shifted −1.8 MHzIndonesia, Vietnam
AS923-3Group 3 — shifted −6.6 MHzPhilippines, Cuba
AS923-4Group 4 — shifted −5.9 MHzIsrael
CN470China 470–510 MHzChina
IN865India 865–867 MHzIndia
KR920South Korea 920–923 MHzSouth Korea
RU864Russia 864–870 MHzRussia
Country lists are indicative

A few countries permit more than one plan (Argentina and Ecuador allow both US915 and AU915; Russia allows RU864 and EU868), and national allocations change. The authority is your local regulator, cross-checked against the LoRa Alliance RP002 Regional Parameters and The Things Network's frequency plans by country.

Region Selection

Choose the region that matches your LoRaWAN devices and local regulations. Changing the region requires a gateway restart.


Gateway Management

Navigate to Connections > LoRaWAN > Gateways to manage gateways (grid view with an add wizard). Each gateway is stored as a gateway resource.

Registering a Gateway

  1. Click Add Gateway
  2. Enter the Gateway EUI (16-character hex, e.g., A840411234567890)
  3. Optionally provide a Name, Description, and Location
  4. Click Save

If no name is provided, it defaults to Gateway_<last 8 of EUI>.

Gateway Properties

PropertyDescription
NameFriendly name for the gateway (defaults to Gateway_<last8>)
EUI64-bit identifier, 16 hex characters (required)
DescriptionOptional description
LocationOptional location information
Only Registered Gateways Are Accepted

Uplinks from gateways that are not registered are rejected. Register every gateway before it can forward traffic. A blocked-gateways list is also maintained to explicitly deny specific gateways.

Runtime Status

The gateway list shows real-time status:

ColumnDescription
StatusConnected or Disconnected
AddressGateway IP address
Last SeenTimestamp of last communication
Uplink CountTotal uplinks received
Downlink CountTotal downlinks sent

Device Management

Navigate to Connections > LoRaWAN > Devices to manage devices. Each device is stored as a device resource. If no name is provided, it defaults to Device_<last 8 of DevEUI>.

Device Registration Wizard

The wizard guides you through 4 steps: Activation Mode → Device Class → Details → Payload Decoder.

Step 1: Activation Mode

ModeDescription
OTAAOver-the-Air Activation - device joins dynamically using AppKey (default)
ABPActivation By Personalization - pre-provisioned session keys
Recommended

OTAA is recommended for most deployments as it provides better security through dynamic session keys.

Step 2: Device Class

ClassDescription
Class ABattery-optimized; receives only after transmitting (RX1/RX2 windows). Default.
Class CAlways listening; receives downlinks with minimal delay
Class B is not implemented

Only Class A and Class C are offered here. Class B (beacon-synchronised receive windows) is not implemented — setting it through CSV import, the REST API, or scripting is rejected with "Class B is not supported. Use Class A or Class C."

Step 3: Device Details

For OTAA devices:

FieldFormatDescription
Device EUI16 hex chars (required)Unique device identifier
Application Key32 hex charsRoot key for join and session derivation
NameTextFriendly name

For ABP devices:

FieldFormatDescription
Device EUI16 hex chars (required)Unique device identifier
Device Address8 hex charsPre-assigned network address
Network Session Key32 hex charsKey for network layer
App Session Key32 hex charsKey for application layer
NameTextFriendly name

Step 4: Payload Decoder (Optional)

Select a JavaScript decoder to parse uplink payloads into structured tags (stored on the device as decoderName).


Payload Decoders

Payload decoders transform raw LoRaWAN payloads into meaningful Ignition tags. They are managed on the Decoders tab (a code editor) under Connections > LoRaWAN > Devices, and each is stored as a decoder resource.

Creating a Decoder

  1. Go to Connections > LoRaWAN > Devices
  2. Click the Decoders tab
  3. Add a decoder with a Name (matching ^[a-zA-Z][a-zA-Z0-9_]*$) and JavaScript code
  4. Assign it to a device via the device's Decoder setting

Decoder Script Format

Decoders follow the ChirpStack/TTN decodeUplink(input) contract.

function decodeUplink(input) {
var bytes = input.bytes; // number[] - raw payload bytes
var fPort = input.fPort; // number - LoRaWAN port

var temp = bytes[0] | (bytes[1] << 8);
if (temp > 0x7FFF) temp -= 0x10000; // sign-extend int16

return {
data: {
Temperature: temp / 10,
Humidity: bytes[2]
}
};
}

Input Object

PropertyTypeDescription
bytesnumber[]Raw payload as a byte array
fPortnumberLoRaWAN port

The decoder runs only for uplinks with fPort > 0 and a non-empty payload.

Return Object

The function returns { data: { field: value } }. Each field under data becomes a dynamic tag at the device root ([LoRaWAN]/Devices/{Name}/{field}).

Type Mapping

JavaScript TypeIgnition Tag Type
integerInt
numberDouble
booleanBoolean
stringString
Decoder Sandboxing

Decoders run in a sandboxed GraalJS environment with no file, network, or system access. Execution is limited by a 500ms watchdog.


Device Extended Configuration

Each device has additional settings accessible via the edit dialog (also available through the API and scripting):

SettingDescription
NameFriendly name (can be changed anytime)
Application KeyOTAA root key
Device ClassA or C (B is rejected)
DecoderAssigned payload decoder name

Session data (DevAddr, NwkSKey, AppSKey, FCntUp, FCntDown, LastRssi, LastSnr, and related fields) is stored per device and, for OTAA devices, populated after join.


Bulk Import / Export

Devices and gateways can be bulk-managed via CSV. Import and export (and a downloadable template) are available through the REST API and the scripting functions.


Per-Device Tags

When a device is registered, tags are created automatically under [LoRaWAN]/Devices/{DeviceName}/:

[LoRaWAN]/Devices/{DeviceName}/
├── {DecodedField} Dynamic tags produced by the decoder (device root)
├── Config/
│ ├── Name
│ ├── DevEUI
│ ├── DevAddr
│ ├── DeviceClass
│ └── Decoder
├── Uplink/
│ ├── Timestamp
│ ├── Counter
│ ├── Port
│ ├── PayloadHex
│ ├── RSSI
│ ├── SNR
│ ├── Frequency
│ ├── DataRate
│ └── GatewayEUI
├── Downlink/
│ ├── Port (writable)
│ ├── Confirmed (writable)
│ ├── Payload (writable, sticky hex)
│ ├── Send (writable, edge-trigger)
│ └── Queue (dataset)
└── Status/
├── Battery
├── Margin
├── Timestamp
└── Request (writable - set true to request DevStatusReq)

Gateway tags are created under [LoRaWAN]/Gateways/{GatewayName}/ with: Name, EUI, Status, Address, LastSeen, UplinkCount, DownlinkCount.