Quickstart

BACnet Quickstart: Write an HVAC Setpoint

Write an HVAC temperature setpoint over BACnet/IP and verify the new value with a separate property read.

Before you begin

Install SPX with the BACnet package and SPX UI. Have a BACnet/IP client that supports ReadProperty and WriteProperty. Use the Flexit Nordic YAML linked in the communication reference.

Run the test

  1. Import the YAML in Models → Load model from file. Create a fresh instance and start it. The model uses device instance 2 and UDP port 47808.
  2. Point your client at the reachable SPX host and published UDP port. Read analogValue:1994 / presentValue. Expect 19°C at the default state.
  3. Write Real 22.5 to the same property. After the SimpleACK, send another ReadProperty request.

Check the result

The readback is 22.5°C. The write acknowledgement confirms the operation; the separate read confirms the setpoint. Restore Real 19.0, read it back and stop the instance. This test changes the setpoint without enabling the heater.

Protocol communication

Use these settings and messages with the library’s Flexit Nordic HVAC model.

Client / transport
BACnet/IP → SPX_HOST:47808 over UDP; device instance 2
Property
presentValue; identify values by object type and object instance
Docker / discovery
Publish UDP 47808; use direct unicast when broadcasts cannot cross the network

Replace host placeholders with reachable addresses and use your published ports.

Swipe the table to see requests and replies.

Addresses, requests and expected replies
Address / messageOperation / payloadExpected reply
analogInput:1 / presentValueReadProperty — outside air temperatureReal in °C; nominal value 5.0
analogInput:4 / presentValueReadProperty — supply air temperature; read-onlyReal in °C; changes with heating/cooling
analogValue:1994 / presentValueReadProperty / WriteProperty — home setpointInitially 19.0°C; write Real 22.5, then read 22.5
binaryValue:445 / presentValueReadProperty / WriteProperty — heater enableBinaryPV / Enumerated: inactive (0) or active (1)

Values describe this model’s nominal setup unless noted. Live measurements change as the simulation runs.

Example request and reply

Write setpoint 22.5 and heater active, read both back, then poll analogInput:4. Restore setpoint 19.0 and heater inactive after the response.

ReadProperty analogValue:1994 presentValue → Real 19.0
WriteProperty analogValue:1994 presentValue = Real 22.5 → SimpleACK
ReadProperty analogValue:1994 presentValue → Real 22.5
WriteProperty binaryValue:445 presentValue = active → SimpleACK
ReadProperty analogInput:4 presentValue → rising temperature
Restore: analogValue:1994 = 19.0; binaryValue:445 = inactive
No reply or an unexpected value?
  • Device instance 2 is not the UDP port or object instance. Both object type and number matter: analogInput:4 differs from analogOutput:4.
  • Send a BACnet Real for the setpoint and BinaryPV/Enumerated for the heater, not text. ReadProperty returns an ACK containing the value; WriteProperty returns a SimpleACK. Read again to verify the change.
  • A UDP mapping does not guarantee Who-Is/I-Am broadcast discovery. Check the client interface/subnet, UDP mapping and reachable unicast destination.

Next steps

Follow the heating-response walkthrough with the heater enabled. For adapter settings, use the BACNET guide.