broadcast scan+targeted scan→device state→point model
responding · enumerating · timed-out · rejected
devices · networks · addresses · latency · point counts
devices · points · tags · units · current values
id,dis,equip,net,unit,curVal,tags @p:1a4f,Discharge Air Temp,AHU-1,1,°F,54.6,point sensor temp air discharge @p:2b7c,Supply Fan Cmd,AHU-1,1,,on,point cmd fan @p:3d19,Mixed Air Damper,AHU-1,1,%,38,point cmd damper @p:5f22,Zone Temp,VAV-204,12,°F,71.2,point sensor temp air zone @p:7a04,kW Demand,MTR-Main,1,kW,48.6,point sensor power elec … 209 more rows
ver:"3.0" id,dis,equipRef,unit,curVal,sensor,temp @p:1a4f "Discharge Air Temp" @e:AHU-1 "°F" 54.6°F M M @p:5f22 "Zone Temp" @e:VAV-204 "°F" 71.2°F M M … 212 more rows
{
"meta": { "ver": "3.0" },
"cols": [{ "name": "id" }, { "name": "curVal" }],
"rows": [{ "id": "r:p:1a4f Discharge Air Temp",
"curVal": "n:54.6 °F", "sensor": "m:" }]
}
one process per driver · gRPC over unix sockets · independent restart
local storage · offline operation · static core binary
| Metric | Target | Design basis |
|---|---|---|
| Idle RAM | < 150 MB | Pi 4-class edge host |
| Point load | 2–5k @ 15 s | subscription-first, poll fallback |
| Cold start | < 3 s | single Go core daemon |
| Core binary | 20–40 MB | static core; native protocol drivers isolated |
| Storage | local | SQLite registry → Parquet historian |
Not in the current release. A future write path is capability-gated per point, disabled unless explicitly configured, priority-scoped, and audited.
No. Local BACnet broadcast discovery is limited to its Layer-2 segment. Known remote devices can be targeted over a routed path; unknown remote broadcast domains need BBMD or Foreign Device support, which is not shipped.
REST · WebSocket · OpenAPI · token authentication
$ curl -H "Authorization: Bearer $TOKEN" edge.local/v1/devices { "id":"@d:AHU-1", "proto":"bacnet", "net":1, "points":40, "status":"ok", "latencyMs":12 } $ websocat wss://edge.local/v1/ws ◂ { "ev":"i-am", "dev":"@d:VAV-204", "ms":47 } ◂ { "ev":"cur", "pt":"@p:1a4f", "val":54.6 } ◂ { "ev":"tagged", "pt":"@p:1a4f", "conf":0.93 }