hotloop
GitHub

Integrations BACnet/IP

BACnet/IP

Verified live

Building controllers, meters, and thermostats on the IP network, read-only. HotLoop never writes a BACnet property.

Verified live against a software device. Not read off a physical controller.

BACnet/IP has not been read off a physical controller. The device it was proven against is bacpypes3's, an independent implementation of the standard, and it is not any vendor's firmware. Vendors differ about what they put in the object list, how they answer a request that is too big, and whether they answer a unicast Who-Is at all, and HotLoop's answers to the last two are tested only against the behavior bacpypes3 has. A controller on an MS/TP trunk behind a router cannot be reached.

Verified against bacpypes3 0.0.110, an independent BACnet stack in Python, serving every object type HotLoop readsFrames recorded off that device, decoded by tests that always run. The client is written for HotLoop from the standard and shares no code with bacpypes3.

Read-only, on purpose. A BACnet write lands on a commandable output through a priority array, and a priority left set holds the equipment where it was put after whoever set it has gone home. That is a feature to design deliberately, not one to leave lying around.

Connecting asks the device who it is: a unicast Who-Is, and the device instance from the I-Am. A device that does not answer one is asked for its own device object under the wildcard instance. Set `deviceInstance` and a different device answering at a reused address, or a swapped controller, is refused instead of read.

ReadPropertyMultiple answers each property on its own, so an object that is not there fails its tag and no other. Nothing is segmented: a device whose answer will not fit one frame is asked for half as many objects at a time.

Routing is not built. HotLoop talks to a device it can send a UDP datagram to, so a controller on an MS/TP trunk behind a BACnet router is not reachable. Address the router's own BACnet/IP side, or put a gateway in front. You point HotLoop at a device through the integrations flow, and nothing it makes is armed.

Addressing

AddressMeans
analog-input:1The present value of analog input 1. ai:1 is the same.
av:3.unitsA property other than the present value, by name.
multi-state-value:2The present value of a multi-state value.
The trap

Status flags are part of the reading. An object whose fault flag is set reads bad, with the reason. One that is out of service or overridden reads uncertain, because its present value is something a person or a program put there, not a measurement.

Configuration

deviceInstancelocalAddressretriesbrowseMaxObjects