Using BACnet protocol
Starting TAO version 2.1.0, a BACnet flow is provided in Node-RED. It allows LoRaWAN sensors to automatically expose data inside a built-in BACnet server. This server is by default available on the standard UDP multicast port 47808 (BAC0), but you may change the port as described in BACnet server configuration.
The flow requires that all uplinks are published to the internal MQTT topic /uplink-topic
.
This is the default setup with the 'UPLINK / DOWNLINK' flow provided during the installation.
BACnet server configuration
In the BACnet flow, double-click the bacnet-adapter
node and stay on the Server Properties tab to customize
any of the following settings:
- Server port: from 'BAC0' (47808), to 'BACF' (47823).
- Server broadcast: it is the desired subnet for global messages to be broadcast and received on. This should be as strict as possible. Use 255.255.255.255 if unsure.
- APDU timeout: this parameter defines the timeout in milliseconds before a transaction is interpreted as error.
- Device ID: default is 817001.
- Device Name: default is 'TAO-XXXX', where XXXX corresponds to the MAC address of the gateway.
- Vendor ID: set to 1562, which is Actility's vendor-ID allocated by the BACnet committee.
- Vendor Name: set to Actility.
- COV subscription max lifetime: this parameter defines the maximum allowed lifetime of a COV subscription. The default setting is 432000 seconds (12 hours).
- COV subscription errors before deletion: this parameter defines the maximum allowed consecutive notification errors before automatically deleting the COV subscription. The default setting is 50.
Visualization
Once the flow is running, each extracted data from your LoRaWAN sensors is exposed as BACnet object.
You can use a tool like YABE (Yet Another BACnet Explorer) to visualize and interact with the BACnet objects:
Example of an uplink message extracted by TAO, corresponding to a DevEUI_uplink
,
with temperature measured at 28.8° celsius.
{
"DevEUI_uplink": {
"Time": "2024-09-24T13:51:10.920+00:00"
"DevEUI": "20635F0106000244"
"FPort": 17
...
"LrrRSSI": -30.600006
...
"payload": {
"messageType": "POSITION_MESSAGE"
"trackingMode": "PERMANENT_TRACKING"
"batteryVoltage": 4.05
"ackToken": 0
...
}
"points": {
"temperature": {
"unitId": "Cel"
"record": 28.8
},
"batteryVoltage": {
"unitId": "V"
"record": 4.05
}
},
"Frequency": 867.7
"DynamicClass": "A"
}
}
The corresponding visualization in YABE: