BACnet Read
x/bacnetRead component: v0.37.0+ BACnet/IP building-automation client, reads object properties (present-value of analog/binary/multi-state objects, etc.). Results are written back to msg.Data as a unified iot_points.Data list, routing to Success/Failure.
Requires: rulego-components-iot (opens new window)
# Configuration
| Field | Type | Description | Default |
|---|---|---|---|
| server | string | Device address host:port, BACnet/IP default port 47808 | 127.0.0.1:47808 |
| timeout | int | Request timeout (seconds) | 5 |
| points | array | Default point table (addr=object address). Points in msg.Data take precedence (on-demand read) | see below |
# Point Table Fields
| Field | Description | Example |
|---|---|---|
| name | Point name | SupplyTemp |
| addr | Object address: objectType:instance[:property], property defaults to present-value | analog-input:0, ai:1, device💯object-name |
| type | Data type (optional, the type is taken from the response) | FLOAT32 |
| scale | Engineering scale factor, eng = raw × scale + offset | 0.1 |
| offset | Engineering offset | 0 |
Object type accepts full names (analog-input), short aliases (ai/ao/av/bi/bo/bv/msi/mso/msv) or numbers; likewise for properties (present-value/pv/description/object-name/units or numbers).
All fields support ${msg.xx} / ${metadata.xx} templates.
# Acquisition Model
For multi-point collection, points are grouped by object and read in a single ReadPropertyMultiple request (N points in one round-trip — the standard efficient BACnet acquisition method); single-point reads or devices that reject RPM fall back to per-point ReadProperty automatically. Supports application data types: boolean (binary objects), enumerated (multi-state), unsigned/signed integers, real/double floats, strings. Per-point failure is marked with error and collection continues; connection-level failures auto-reconnect and retry.
# Input/Output
- Input (optional):
msg.Datawith point list JSON takes precedence (dynamic acquisition) - Output:
[{"name","value","timestamp","error"}](timestamp in nanoseconds; error only on per-point failure)
[
{"name": "SupplyTemp", "value": 21.5, "timestamp": 1789999999000000000},
{"name": "Fan", "value": true, "timestamp": 1789999999000000000}
]
2
3
4
# Example
Scheduled acquisition (schedule endpoint in front):
{
"id": "bacnet_read",
"type": "x/bacnetRead",
"configuration": {
"server": "192.168.1.10:47808",
"timeout": 5,
"points": [
{"name": "SupplyTemp", "addr": "analog-input:0", "scale": 0.1},
{"name": "Fan", "addr": "bi:1"},
{"name": "Mode", "addr": "multistate-value:2"}
]
}
}
2
3
4
5
6
7
8
9
10
11
12
13
On-demand read (msg.Data with point list, takes precedence):
[{"name": "DeviceName", "addr": "device:100:object-name"}]
# Related
- Write: x/bacnetWrite
- Universal acquisition entry: x/iotRead (driver=bacnet)
- To time-series storage: x/tsdbWrite (measurement configured)