BACnet-automatiseringsvoorbeelden voor Home Assistant
Complete automatiseringen voor veelvoorkomende taken. Vervang de entity-ID's door je eigen. De voorbeelden gebruiken de automatiseringssyntaxis van Home Assistant 2024.10 en nieuwer.
Bezetting overschrijven vanuit een agenda
Geef een ruimte de opdracht occupied zolang een agenda-afspraak loopt, en geef de opdracht vrij als die eindigt, zodat het eigen schedule van de controller het weer overneemt. Acties: bacnet.write_value en bacnet.relinquish. Het bezettingsobject is hier een Multi-State Output (een number-entiteit); kijk in het attribuut bacnet_state_text welke waarde op jouw apparaat occupied betekent.
alias: Meeting room occupied during calendar events
triggers:
- trigger: calendar
event: start
entity_id: calendar.meeting_room
id: start
- trigger: calendar
event: end
entity_id: calendar.meeting_room
id: end
actions:
- choose:
- conditions:
- condition: trigger
id: start
sequence:
- action: bacnet.write_value
target:
entity_id: number.meeting_room_occupancy
data:
value: 1 # occupied on this device
priority: 11
default:
- action: bacnet.relinquish
target:
entity_id: number.meeting_room_occupancy
data:
priority: 11 # release the same priority you wrote at
Geef altijd vrij op de prioriteit waarop je hebt geschreven. Een switch uitzetten of 0 schrijven geeft het object de opdracht uit te gaan; alleen bacnet.relinquish geeft het vrij.
Tijdelijk setpoint met een climate-entiteit
Stel 's ochtends een comfortsetpoint in en geef 's avonds de regeling terug aan de controller. Een BACnet climate-entiteit uit zetten geeft het setpoint vrij. Zie Climate.
alias: Office comfort setpoint on weekdays
triggers:
- trigger: time
at: "07:00:00"
id: "on"
- trigger: time
at: "18:00:00"
id: "off"
conditions:
- condition: time
weekday: [mon, tue, wed, thu, fri]
actions:
- if:
- condition: trigger
id: "on"
then:
- action: climate.set_temperature
target:
entity_id: climate.office_setpoint
data:
temperature: 21.5
else:
- action: climate.set_hvac_mode
target:
entity_id: climate.office_setpoint
data:
hvac_mode: "off"
Een melding krijgen als een apparaat niet meer reageert
Entiteiten worden unavailable als hun apparaat niet antwoordt. Na 10 mislukte polls verschijnt ook een melding in Settings → Repairs; deze automatisering waarschuwt je eerder. Zie ook Probleemoplossing.
alias: BACnet device offline
triggers:
- trigger: state
entity_id: sensor.ahu_1_supply_temperature
to: unavailable
for: "00:05:00"
actions:
- action: notify.notify
data:
message: "AHU 1 is not responding to BACnet requests."
Melding bij BACnet-alarmen
Gebruikt het event bacnet_alarm; zie Alarmen.
alias: BACnet alarm notification
triggers:
- trigger: event
event_type: bacnet_alarm
actions:
- action: notify.notify
data:
message: >-
{% if trigger.event.data.event_state == 'normal' %}
Alarm cleared: {{ trigger.event.data.object_name }}
{% else %}
Alarm: {{ trigger.event.data.object_name }} is {{ trigger.event.data.event_state }}
{% endif %}
Agenda-afspraken als schedule-uitzonderingen
In plaats van de controller te overschrijven, voeg je elke agenda-afspraak als uitzondering toe aan het Schedule-object. De controller kent de afspraak dan van tevoren, zodat functies zoals optimal start de ruimte kunnen voorbereiden. Zie Schedules voor de regels. Deze automatisering voegt de uitzondering 12 uur voor de afspraak toe en verwijdert haar als de afspraak eindigt.
alias: Calendar events as BACnet schedule exceptions
triggers:
- trigger: calendar
event: start
entity_id: calendar.meeting_room
offset: "-12:00:00"
id: add
- trigger: calendar
event: end
entity_id: calendar.meeting_room
id: remove
actions:
- action: bacnet.read_schedule
target:
entity_id: sensor.meeting_room_schedule
response_variable: schedule
- variables:
event_start: "{{ trigger.calendar_event.start }}"
event_end: "{{ trigger.calendar_event.end }}"
current: "{{ schedule['sensor.meeting_room_schedule'].exception_schedule or [] }}"
- if:
- condition: trigger
id: add
then:
- action: bacnet.write_schedule
target:
entity_id: sensor.meeting_room_schedule
data:
exception_schedule: >-
{% set start = as_local(as_datetime(event_start)) %}
{% set end = as_local(as_datetime(event_end)) %}
{{ current + [{
'period': {'date': start.date().isoformat()},
'priority': 11,
'time_values': [
{'time': start.strftime('%H:%M:%S'), 'value': 1},
{'time': end.strftime('%H:%M:%S'), 'value': none}
]
}] }}
else:
- action: bacnet.write_schedule
target:
entity_id: sensor.meeting_room_schedule
data:
exception_schedule: >-
{% set start = as_local(as_datetime(event_start)) %}
{% set ns = namespace(keep=[]) %}
{% for ex in current %}
{% set d = ex.period.get('date') %}
{% if not (d and ex.priority == 11 and d.year == start.year
and d.month == start.month and d.day == start.day) %}
{% set ns.keep = ns.keep + [ex] %}
{% endif %}
{% endfor %}
{{ ns.keep }}
allow_removal: true
value: 1is de waarde voor bezet en moet overeenkomen met devalue_typevan het schedule; voerbacnet.read_scheduleeenmalig uit in Developer tools → Actions om te zien wat jouw schedule gebruikt.noneop het eindtijdstip geeft de regeling terug aan het weekschema.- De verwijderstap schrapt elke uitzondering met prioriteit 11 op de datum van de afspraak. Gebruik een prioriteit die niets anders op de controller voor uitzonderingen gebruikt.
- Afspraken die over middernacht heen lopen hebben een
date_range-periode nodig in plaats van ééndate.