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