Select your language

Ziele und Hardware

Einer der maßgeblichen Gründe für mein Home-Automatisierungsprojekt waren die folgenden Anforderungen:

  • Erkennen von offenen Terrassentüren und Fenstern
  • Beim Verlassen der Wohnung eine Warnung auf das Telefon, dass Türen offen stehen.

Wahl der Türkontakte

aquara_tuersensor.JPG

Die anfänglichen Testinstallation von Kontakten auf der Innenseite der Türen (angeklebt) wurde direkt von der 'leitenden Ästhetikkommission' der Wohnung abgelehnt. Ging GAR nicht... :-). Deshalb habe ich die kleinsten verfügbaren Sensoren von XIAOMI angeschafft und innenliegend IM Türrahmen installiert. Alle anderen Kontakte (HomeMatic, enOcean, etc.) waren hierfür zu groß.

Verwendetet Türkontakte:

  • Produkt: XIAOMI mi Aqara Tür- und Fenstersensor (neu)
  • Preis: ca. 10€
  • Batterie: CR1632
  • Funkprotokoll: Zigbee
  • Abmessungen:
    • Magnet: 25,3 * 11 * 9+1 mm (B*T*H+Klebestreifen)
    • Sensor: 41 * 22 * 11+1 mm (B*T*H+Klebestreifen)

Die Installation der Sensoren mit Bildern ist in diesem saparaten Artikel beschrieben.

Wahl der Funk-Schnittstelle

husbzb-1.jpg

Ich möchte meine Home Automation weitgehend ohne Hersteller-Gateways und definitiv ohne Cloud-Componenten betreiben. Ziel war damit also, einen Zigbee Koordinator direkt an der Synology DS anzuschliessen und im Home-Assistant Docker zu nutzen. Dies funktioniert mit folgendem USB-Stick:

  • Produkt: NORTEK HUSBZB-1
  • Preis: ca 50€
  • Schnittstelle: USB 2
  • Funkprotokolle: Zigbee und Z-Wave

Installation des USB-Sticks an DSM und Docker wird hier beschrieben.

Konfiguration von ZigBee / ZHA

Die Erstinstallation erfolgte nach folgender Anleitung von Phil Hawthorne. Allerdings funktionierte die Referenzierung auf die im Docker benannte USB-Schnittstelle '/zigbeestick' ab HA v0.99 nicht mehr. Deshalb wird der Zigbee-Coordinator nun direkt mit /dev/ttyUSB1 angesprochen.

configuration.yaml

################################################################
## Radio-Devices
################################################################
# Zigbee-Coordinator (NORTEK HUSBZB-1)
zha:
  #usb_path: /zigbeestick #naming of USB device does not work anymore since v0.99
  usb_path: /dev/ttyUSB1
  database_path: /data/zigbee.db

Damit wird die Integration 'ZHA: /dev/ttyUSB1' in Home-Assistant aktiv. Der Zigbee Coordinator und alle verbundenen Geräte werden dort angezeigt. Verbinden neuer Geräte geht über den neuen Menüpunkt Einstellungen > ZHA > Add Devices. Beim Einbinden neuer Türsensoren muss man:

  • Einstellungen > ZHA > Add Devices  oder
    Einstellungen > ZHA > Repeater auswählen > Geräte hinzufügen  wählen
  • Sensor in ca. 5 cm Abstand zum Coordinator bringen
  • Taste auf dem Sensor für 5 sec drücken
  • Warten bis Sensor in Home Assistant vollständig eingerichtet wurde
  • Sensor bei Bedarf benennen und einem Raum zuordnen

Konfiguration der Sensoren

Zusammenfassen der einzelnen Sensoren in Gruppen:

packages/doors_windows.yaml

group:
  # 'group.all_doors' fasst den Status aller Türen zusammen.
  #   Ist ein Türesensor 'on'='Offen', dann wird die Gruppe 'on'.
  all_doors:
    name: alle Türen
    icon: mdi:door
    entities:
      - binary_sensor.lumi_lumi_sensor_magnet_aq2_031b3225_1_6 #1 
      - binary_sensor.lumi_lumi_sensor_magnet_aq2_03139f7b_1_6 #2 
      - binary_sensor.lumi_lumi_sensor_magnet_aq2_9ac61c04_1_6 #3
[...] all_windows: name: alle Fenster icon: mdi:window-closed entities: - binary_sensor.lumi_lumi_sensor_magnet_aq2_73c61c04_1_6 #12: - binary_sensor.lumi_lumi_sensor_magnet_aq2_c2e41c04_1_6 #13:

Zuweisen der Geräteklasse bewirkt das passende Icon:

packages/doors_windows.yaml

homeassistant:
  customize:
    binary_sensor.lumi_lumi_sensor_magnet_aq2_031b3225_1_6:
      friendly_name: Gästezimmer
      device_class: door
[...]
    binary_sensor.lumi_lumi_sensor_magnet_aq2_73c61c04_1_6:
      friendly_name: Bad
      device_class: window

Einrichten des Alarm

Für jeden Bereich (Seite in Lovelace) kann es bei mir Warnungen/Alarme geben. Für Türen und Fenster sind es 2 Warnstufen: offene Fenster (kann ok sein --> Warnung) und offene Türen (ist nicht ok --> Alarm).

packages/doors_windows.yaml

# value to remember if an alert is active
input_boolean:
  open_backdoor_alert:
    name: Balkontür ist offen   #active warning: door is open
    icon: mdi:alert-box-outline
  open_window_alert:
    name: Fenster ist offen   #active warning: window is open
    icon: mdi:alert-box-outline

Diese Alert-Variablen werden in den Automatisierungen gesetzt.

Automatisierung

Die ersten beiden Automatisierungen verschicken eine Notification auf das Telefon, wenn die letzte Person das Haus verlässt und Türen oder Fenster offen sind. Der Sensor sensor.home_status stellt die Info bereit, ob jemand zuhause ist und wird durch die 'presence detection' (todo: link) gesetzt. 

packages/doors_windows.yaml

automation:
  - alias: Notify all - Open Doors
    trigger:
      # niemand zuhause und mindestens eine Tür offen 
      platform: template
      value_template: "{{ states.sensor.home_status.state in ['Away', 'Extended Away']  
                          and is_state('group.all_doors', 'on') }}"
      for:
        seconds: 6
    action:
      - service: input_boolean.turn_on
        entity_id: input_boolean.open_backdoor_alert
      - service: notify.family_main_devices
        data_template:
          title: "Smart Home Alerts"
          message: "Mindestens eine Balkontür ist offen."
          data:
            subtitle: "Türen offen!"
            push:
              badge: "{{states.sensor.count_notification_alerts.state|int}}"
  - alias: Notify all - Open Windows
    trigger:
      # niemand zuhause und mindestens ein Fenster offen 
      platform: template
      value_template: "{{ states.sensor.home_status.state in ['Away', 'Extended Away']  
                          and is_state('group.all_windows', 'on') }}"
      for:
        seconds: 6
    action:
      - service: input_boolean.turn_on
        entity_id: input_boolean.open_window_alert
      - service: notify.family_main_devices
        data_template:
          title: "Smart Home Alerts"
          message: "Mindestens ein Fenster ist offen."
          data:
            subtitle: "Fenster offen!"
            push:
              badge: "{{states.sensor.count_notification_alerts.state|int}}"

Damit der rote Punkt an der Home-Assistant App auf dem Telefon auch die wirkliche Anzahl der aktiven Warnungen/Alarme darstellt, wird diese im Sensor sensor.count_notification_alerts berechnet und als Wert für die 'badge' mitgeliefert.

packages/notification.yaml

# sensor counts all active alerts for numbering the badge
#   more alerts can be integrated!
sensor:
  - platform: template
    sensors:
      count_notification_alerts:
        friendly_name: 'count active alerts'
        entity_id:
          - input_boolean.open_backdoor_alert
          - input_boolean.open_window_alert
          - input_boolean.dwd_weather_alert
          - binary_sensor.vacuum_error_alert
        value_template: "{{ (1 if is_state('input_boolean.open_backdoor_alert', 'on') else 0)
                          + (1 if is_state('input_boolean.open_window_alert', 'on') else 0)
                          + (1 if is_state('input_boolean.dwd_weather_alert', 'on') else 0) 
                          + (1 if is_state('binary_sensor.vacuum_error_alert', 'on') else 0) 
                        }}"
            # numeric would be like that: + (0 if is_state('sensor.dwd_current_warn_count', '0') else 1) 
        icon_template: mdi:comment-alert

Wenn der Alarms aufgehoben wird, muss noch die 'badge' auf dem Telefon neu- oder zurückgesetzt werden. Aktuell kenne ich keinen Weg, die 'badge' an der App zu setzen ohne eine neue Notification zu schicken, deshalb so:

packages/doors_windows.yaml

automation:
- alias: Reset alert - Open Doors trigger: # jemand zuhause oder alle Türen zu platform: template value_template: "{{ (states.sensor.home_status.state in ['Home'] or is_state('group.all_doors', 'off')) and is_state('input_boolean.open_backdoor_alert', 'on') }}" for: seconds: 1 action: - service: input_boolean.turn_off entity_id: input_boolean.open_backdoor_alert - service: notify.family_main_devices data_template: title: "Smart Home ..." message: "Türen Alarm aufgehoben." data: push: badge: "{{states.sensor.count_notification_alerts.state|int}}" - alias: Reset alert - Open Windows trigger: # jemand zuhause oder alle Fenster zu platform: template value_template: "{{ (states.sensor.home_status.state in ['Home'] or is_state('group.all_windows', 'off')) and is_state('input_boolean.open_window_alert', 'on') }}" for: seconds: 1 action: - service: input_boolean.turn_off entity_id: input_boolean.open_window_alert - service: notify.family_main_devices data_template: title: "Smart Home ..." message: "Fenster Alarm aufgehoben." data: push: badge: "{{states.sensor.count_notification_alerts.state|int}}"

Zigbee Mesh Optimierung

Da die Aqara-Sensoren innerhalb der Aluminium-Türrahmen verbaut sind und auch der Coordinator am Rand der Wohnung positioniert ist, musste ich mich mit dem Zigbee-Netzwerk beschäftigen. Die Reichweite der verbauten Türsensoren beträgt in meinem Fall ca. 3-4m. Innerhalb dieses Radius müssen Zigbee Router positioniert werden. 

tradfri_signalrepeater.JPGRouterfunktionalität im Netzwerk können nur strombetriebene Geräte übernehmen. Eine gute und kostengünstige Variante stellen die IKEA Tradfri Signalverstärker dar. Mit diesem kann man auch noch zusätzlich USB-Geräte laden:

  • Produkt: IKEA TRÅDFRI Signalverstärker
  • Preis: 10€ [IKEA]
  • Schnittstelle: USB 2
  • Funkprotokolle: Zigbee

Vor Installation der Router kam es häufig zu Verbindungsabbrüchen und der Status der Sensoren wechselte in 'nicht verfügbar'. Sie mussten oft neu mit dem Coordinator verbunden werden.

osram_smart_plug.jpgAls weiteres Zigbee-Gerät mit Routingfunktionalität habe ich eine OSRAM PLUG+ Schaltsteckdose:

  • Produkt: Osram SMART+ Plug
  • Preis: ca. 14€ [Reichelt Elektronik]
  • Schaltleistung: 3.680 W / 16 A
  • Funkprotokolle: Zigbee

Ich habe in meiner Wohnung 3 Ikea-Signalverstärker und eine Osram Schaltsteckdose positioniert und konnte damit eine stabile Signalübertragung erreichen. Nur gelegentlich verliert Home-Assistant den Kontakt zu einem Türsensor, was sich aber fast immer durch 2-maliges Öffen und Schliessen der Tür/des Fensters wiederherstellen lässt. Ein neues Verbinden zum Zigbee-Netz ist fast nicht mehr notwendig.

Wichtig: Entgegen der Zigbee Spezifikation, suchen die Aqara-Sensoren nicht den besten (=stärksten) Router in ihrer Nähe, sondern senden nur zu dem Gerät, mit dem sie ursprünglich verbunden wurden. Bei Anpassungen im Netz durch die Hinzunahme von neuen Repeatern müssen die Aqara-Sensoren evtl. neu mit den nächstgelegenen Zigbee-Router verbunden werden.

Hilfreiche Links:

Bei der Optimierung des Netzwerks war die Tabelle der Zigbee-Geräte (zha-network-card) im Frontend sehr hilfreich:view_zigbee.jpg

lovelace/views/zigbee_view.yaml

id: zha_table
title: Zigbee
path: zha_table
icon: mdi:zigbee
panel: true
cards:
  - type: 'custom:zha-network-card'
    clickable: true
    columns:
      - name: Name
        prop: name
#      - attr: area_id
#        name: Area
      - attr: available
        id: available
        modify: x || "false"
        name: Online
      - attr: rssi
        name: RSSI
      - attr: lqi
        name: LQI
      - attr: last_seen
        name: Last Seen
      - attr: manufacturer
        name: Manufacturer
      - attr: model
        name: Model
#      - attr: ieee
#        name: IEEE
#      - name: NWK
#        prop: nwk
      - attr: power_source
        name: Power Source
#     - attr: quirk_class
#       name: Quirk
    sort_by: available #, name

Lovelace Frontend

Anzeigen einer dynamischen Card (custom:auto-entities - früher Monster-Card), die nur die offenen (und nicht verfügbaren) Türen/Fenster anzeigt.

lovelace/views/home_view.yaml

id: home
title: Home
icon: mdi:home
path: home
cards:
  # show only open (or unavailable) door-/window sensors (if any...)
  - type: custom:auto-entities
    show_empty: false
    card:
      type: entities
      title: Offene Türen
      show_header_toggle: false
    filter:
      include:
        - entity_id: "binary_sensor.lumi_lumi_sensor_magnet_aq2*"
          state: "on"
        - entity_id: "binary_sensor.lumi_lumi_sensor_magnet_aq2*"
          state: "unavailable"

Anzeige der gesetzten Warnungen/Alarme in diesem Bereich (interessant während der Entwicklung):

lovelace/views/home_view.yaml

      - type: entities
        show_header_toggle: false
        entities:
          - type: custom:fold-entity-row
            head:
              type: section
              label: Gruppen & Alarm
            open: false
            entities:
              - entity: group.all_doors
                name: Balkontüren
                type: custom:multiple-entity-row
                primary:
                  entity: input_boolean.open_backdoor_alert
                  name: Alarm
              - entity: group.all_windows
                name: Fenster
                type: custom:multiple-entity-row
                primary:
                  entity: input_boolean.open_window_alert
                  name: Alarm
              - entity: sensor.count_notification_alerts
                name: Anz. aktiver Alarme

Bei gesetztem Alarm wird der Custom-Header rot mit speziellem Icon, bei Warnungen gelb:

ui-lovelace.yaml

custom_header:
  compact_mode: true
  menu_hide: false
  voice_hide: true
  chevrons: false

  tab_icons:
    #NOTE: only in one line, no multiple lines with '>'!!
    home: '{% if is_state("input_boolean.open_backdoor_alert", "on") or is_state("input_boolean.open_window_alert", "on") %}mdi:home-alert{% endif %}'
[...]
tabs_color: home: '{% if is_state("input_boolean.open_backdoor_alert", "on") %}red{% elif is_state("input_boolean.open_window_alert", "on") %}yellow{% endif %}' [...]

Fazit

Insgesamt bin ich mit dem Ergebnis super zufrieden. Die Kontakte arbeiten einigermassen zuverlässig, gelegentlich verliert ZHA die Verbindung zu einem oder zwei Sensoren. Meistens reicht es dann, die Tür ein- bis zweimal zu öffnen und zu schliessen. In seltenen Fällen muss der Sensor neu mit dem Coordinator oder seinem Repeater verbunden werden.

Wichtig war aber die Plazierung ausreichend vieler Router.