BACnet actions for Home Assistant automations

The integration adds six actions (formerly called services) in the bacnet domain. Use them in automations, scripts and Developer tools → Actions. Most work on a target entity of this integration. A few can also reach objects you did not import; those need an administrator account, because they reach every object on the device.

ActionWhat it does
bacnet.write_valueWrite a value once, at a chosen priority, or write any other property
bacnet.relinquishRelease Home Assistant's command on an object
bacnet.read_propertyRead any property and return it as response data
bacnet.read_scheduleReturn a Schedule object as response data
bacnet.write_scheduleChange parts of a Schedule object
bacnet.read_trend_logReturn the records of a Trend Log

Actions that return data use response_variable in an automation.

bacnet.write_value

Writes a value once: the present value of an object at a chosen priority, without changing the device's Write Priority setting, or any other property. Target: any entity of this integration. Binary objects take 0 (inactive) or 1 (active).

FieldRequiredDescriptionExample
valueYesValue to write. Binary objects: 0 = inactive, 1 = active. Other properties take a number, true/false or text.21.5
priorityNoPriority level to write at (1 to 16). Defaults to the device's Write Priority. Only applies to the present value.11
propertyNoBACnet property to write, by name or number. Without it: the property an extra-property entity shows, otherwise the present value.minimumOnTime
deviceNoOnly for objects that are not imported: the BACnet device. Then also give the object type and instance; the target entity is ignored.
object_typeNoOnly with device: type of the object, by name or number.analog-value
instanceNoOnly with device: instance number of the object.12
action: bacnet.write_value
target:
  entity_id: number.meeting_room_occupancy
data:
  value: 1
  priority: 11

Writes to other properties never carry a priority; only the present value has a Priority Array. Values are sent in the BACnet type of the property. Writing a property other than the present value changes the configuration of the object, so it is only allowed for administrators. See Extra properties.

bacnet.relinquish

Releases Home Assistant's command on an object by writing Null at a priority level, so lower priorities or the Relinquish Default take over. Target: a switch, number or climate entity of this integration.

FieldRequiredDescriptionExample
priorityNoPriority level to release (1 to 16). Defaults to the device's Write Priority.8
action: bacnet.relinquish
target:
  entity_id: switch.ahu_1_supply_fan
data:
  priority: 8

Always relinquish at the priority you wrote at. Switching off or writing 0 commands the object off; only bacnet.relinquish releases it. See How writes work.

bacnet.read_property

Reads any property of an object and returns it as response data. Target: any entity of this integration.

FieldRequiredDescriptionExample
propertyNoBACnet property to read, by name or number. Without it: the property an extra-property entity shows, otherwise the present value.minimumOnTime
array_indexNoRead one element of an array property (0 = number of elements).0
deviceNoOnly for objects that are not imported: the BACnet device.
object_typeNoOnly with device: type of the object, by name or number.analog-value
instanceNoOnly with device: instance number of the object.12
action: bacnet.read_property
target:
  entity_id: switch.ahu_1_ventilation_fan
data:
  property: minimumOnTime
response_variable: result

The response looks like {"switch.ahu_1_ventilation_fan": {"object": "4:3", "property": "minimumOnTime", "value": 300}}. If the device refuses, for example with unknown-property, the action fails with the error of the device.

bacnet.read_schedule

Returns a Schedule object as response data. Target: a Schedule sensor. It has no fields. Details and the shape of the response are in Schedules.

action: bacnet.read_schedule
target:
  entity_id: sensor.meeting_room_schedule
response_variable: schedule

bacnet.write_schedule

Changes parts of a Schedule object, in the same shape bacnet.read_schedule returns. Fields you leave out are not touched. The schedule is read back afterwards and the action fails if the device rejected the change or stored something different. Target: a Schedule sensor.

FieldRequiredDescriptionExample
weekly_scheduleNoWeekdays (monday to sunday) mapped to a list of entries with a time and a value. Only the days you pass are changed. A value of null releases to the default.{"monday": [{"time": "08:00:00", "value": 21.0}, {"time": "17:00:00", "value": 16.0}]}
exception_scheduleNoComplete list of exceptions, replacing the existing list.[{"period": {"date": "2026-12-25"}, "priority": 10, "time_values": [{"time": "00:00:00", "value": 12.0}]}]
schedule_defaultNoValue used when no weekly or exception entry applies.16.0
effective_periodNoStart and end date between which the schedule is active.{"start": "2026-01-01", "end": "2026-12-31"}
allow_removalNoAllow the exception schedule to be written even if that removes exceptions the device currently has. Default off.false
action: bacnet.write_schedule
target:
  entity_id: sensor.ddc_heating_schedule
data:
  weekly_schedule:
    monday:
      - { time: "06:30:00", value: 21.5 }
      - { time: "22:00:00", value: null }

Read Schedules before you write: exceptions, dates and allow_removal have rules that protect the controller.

bacnet.read_trend_log

Reads the records of a Trend Log and returns them as response data. Target: a Trend Log sensor.

FieldRequiredDescriptionExample
deviceNoOnly for a Trend Log that is not imported: the BACnet device.
instanceNoOnly with device: instance number of the Trend Log object.4
startNoReturn records from this time on (device local time). Without it, the most recent records are returned.{{ now() - timedelta(hours=24) }}
countNoMaximum number of records, 1 to 1000. Default 100.500
action: bacnet.read_trend_log
target:
  entity_id: sensor.ahu_1_supply_temperature_log
data:
  start: "{{ now() - timedelta(hours=24) }}"
  count: 500
response_variable: trend

See Trend logs for the response format.