Aeon Z-Stick – mit Home Assistant Z-Wave Geräte verwalten

In der Z-Wave Welt ist es nicht immer ganz einfach neue Geräte zu verwalten, da es hierfür keine einheitliche Spezifikation gibt. Dieser Blogeintrag soll ein bisschen Licht in die grundlegende Funktionen der Geräteverwaltung in einem Z-Wave Netzwerk bringen.

 

Wichtig sind hierbei zwei Begriffe:

Z-Wave Controller: Das ist der Aeon Labs Z-Stick S2
oder ein anderes Gerät das ein Z-Wave Netzwerk kontrolliert

Z-Wave Gerät: Das kann jeder Sensor oder Aktor sein, den man einbinden möchte

 

Um ein Z-Wave Gerät zu nutzen muss es also immer an den Controller angelernt werden. Die zwei lernen sich also kennen um zu Kommunizieren.

Ein Gerät kann natürlich auch entfernt werden oder im schlimmsten fall sogar ausfallen.

Was dann zu tun ist habe ich in vier einfachen Punkten beschrieben:

 

Neues Gerät anlernen mit dem Aeon Z-Stick

  • USB Stick entfernen
  • 1x kurz drücken am Stick
  • Erfolgreich: Langsames Blinken (Anlernmodus aktiv)
  • Am Gerät drücken (Anleitung beachten)
  • Erfolgreich: Z-Stick blinkt kurz schnell, dann kurz durchgängig.
  • USB Stick einstecken, Home Assistant neu starten

 

Bekanntes Gerät entfernen mit dem Aeon Z-Stick

  • USB Stick entfernen
  • 2 Sekunden gedrückt halten am Stick
  • Erfolgreich: Schnelles Blinken (Entfernmodus aktiv)
  • Am Gerät drücken (Anleitung beachten)
  • Erfolgreich: Z-Stick leuchtet kurz durchgängig.
  • USB Stick einstecken, Home Assistant neu starten

 

Totes Z-Wave Gerät aus Home Assistant entfernen

Sollte ein Z-Wave Gerät nicht antworten wird dies in Home Assistant angezeigt.

Um das Gerät zu entfernen kann ein „Remove Node“ gemacht werden. Dazu wählt man im „Z-Wave Manager“ die entsprechende „Node“ aus und klickt auf „Remove Failed Node“.

Home Asisstent UI Z-Wave Nodes

 

Z-Wave Gerät Reset

Wird ein Z-Wave Gerät nicht mehr benötigt oder verkauft, kann man es vorher resetten.

Dazu wird kein Controller benötigt. Jedoch ist es bei jedem Gerät unterschiedlich wie man einen Reset ausführt.

Beispiel:

Philio PHIEPAN04-1B: Knopf 3x innerhalb von 1,5 Sekunden drücken, danach sofort noch einmal 1x für 5 Sekunden halten bis das Licht ausgeht.

Fibaro Double Switch 2: 3x S1 drücken

Package nutzen um die Konfiguration in Home Assistant übersichtlicher zu machen

Mit „Packages“ lassen sich ganze Teile der Konfiguration zu übersichtlichen Teilen ab splitten.

 

Beispiel Package

Das könnte ein „package“ sein:

Package

Wir splitten also die komplette Gruppe „Time Light“ von unserer „configuration.yaml“ ab.

 

Dafür legen wir eine neue Datei an Namens „my_package.yaml“

$ sudo nano my_package.yaml

Hier fügen wir alles ein was wir für die Gruppe benötigen (Beispielcode):


# my_package.yaml
sensor:
  - platform: template
    sensors:
      auto_light_start:
        friendly_name: 'Lichter an um '
        value_template: '{{ (as_timestamp(states.sun.sun.attributes.next_setting) + (states("input_slider.auto_light_offset_on") | int)  * 60)  | timestamp_custom("%H:%M") }}'
      auto_light_stop:
        friendly_name: 'Lichter aus um '
        value_template: '{{ (as_timestamp("2017-06-09T21:00:00+00:00") + (states("input_slider.auto_light_offset_off") | int)  * 60)  | timestamp_custom("%H:%M") }}'

  - platform: time_date
    display_options:
      - 'time'

input_slider:
  auto_light_offset_on:
    name: Minuten nach Sonnenuntergang
    icon: mdi:timer
    initial: 0
    min: -60
    max: 60
    step: 10
  auto_light_offset_off:
    name: Minuten nach 23Uhr
    icon: mdi:timer
    initial: 0
    min: -60
    max: 60
    step: 10


automation:
  - alias: "auto_light_on enabled"
    trigger:
      platform: state
      entity_id: input_slider.auto_light_offset_on, input_slider.auto_light_offset_off
    action:
    - service: homeassistant.turn_on
      data:
        entity_id:
          - automation.auto_light_on
    - service: homeassistant.turn_on
      data:
        entity_id:
          - automation.auto_light_off
          
  - alias: 'auto_light_on'
    initial_state: True
    trigger:
      - platform: time
        minutes: '/1'
        seconds: 10
    condition:
      condition: and
      conditions:
      - condition: template
        # value_template: '{{ (now().strftime("%s") | int | timestamp_custom("%H:%M")) == states.sensor.auto_light_start.state }}'
        value_template: '{{ (now().strftime("%s") | int | timestamp_custom("%H:%M")) > states.sensor.auto_light_start.state }}'
      - condition: template
        value_template: '{{ (now().strftime("%s") | int | timestamp_custom("%H:%M")) < states.sensor.auto_light_stop.state }}' - condition: state entity_id: group.automatic_lights_outside state: 'off' action: - service: homeassistant.turn_on entity_id: group.automatic_lights_outside - alias: 'auto_light_off' initial_state: True trigger: - platform: time minutes: '/1' seconds: 10 condition: condition: and conditions: - condition: template # value_template: '{{ (now().strftime("%s") | int | timestamp_custom("%H:%M")) == states.sensor.auto_light_stop.state }}' value_template: '{{ (now().strftime("%s") | int | timestamp_custom("%H:%M")) > states.sensor.auto_light_stop.state }}'
      - condition: template
        value_template: '{{ (now().strftime("%s") | int | timestamp_custom("%H:%M")) < states.sensor.auto_light_start.state }}'
      - condition: state
        entity_id: group.automatic_lights_outside
        state: 'on'
    action:
      - service: homeassistant.turn_off
        entity_id: group.automatic_lights_outside

group:

  Automatic Lights Outside:
    name: Automatic Lights Outside
    entities:
      - switch.outdoor_front_big
      - switch.outdoor_front_small

  Timer Light:
    name: Timer Light
    control: hidden
    entities:
    - automation.auto_light_off
    - automation.auto_light_on
    - input_slider.auto_light_offset_on
    - sensor.auto_light_start
    - input_slider.auto_light_offset_off
    - sensor.auto_light_stop

Jetzt verknüpfen wir unsere neue „my_package.yaml“ mit unserer Basis Konfiguration in der „configuration.yaml“:


# configuration.yaml
homeassistant:
  # Name of the location where Home Assistant is running
  name: Home
  # Location required to calculate the time the sun rises and sets
  latitude: 51.2993
  longitude: 9.491
  # Impacts weather/sunrise data (altitude above sea level in meters)
  elevation: 0
  # metric for Metric, imperial for Imperial
  unit_system: metric
  # Pick yours from here: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
  time_zone: Europe/Berlin
  packages:
    my_pack: !include my_package.yaml

Nun haben wir eine gekapselte Konfiguration erstellt die wir je nach belieben entfernen oder hinzufügen können.

Zentrale Parameter in Home Assistant

Oftmals möchte man zentrale Parameter verwenden damit wiederkehrende Werte nicht mehrmals innerhalb einer Konfiguration gepflegt werden müssen.

Hierfür bietet Home Assistant eine Lösung über die „secrets.yaml“.

 

Zentrale Parameter anlegen in der „Secrets.yaml“

Als erstes legen wir die „secrets.yaml“ an. Dies tun wir im gleichen Verzeichnis wo auch die „configuration.yaml“ liegt:

$ sudo nano secrets.yaml

Beim schließen des nano Editors wird die Datei automatisch angelegt.

Jetzt ändern wir den Besitzer und die Gruppe der Datei auf „homeassistant“:

$ chown homeassistant:homeassistant secrets.yaml

Zusätzlich können wir noch erweiterte Schreibrechte vergeben die benötigt werden um die Datei in Notepad zu editieren:

$ sudo chmod 664 secrets.yaml

Die Berechtigung sollte nun so aussehen:

Zentrale Parameter secretyaml

 

Parameter einpflegen und benutzen

Nun öffnen wir die „secrets.yaml“ und pflegen zwei Parameter ein:

basic_latitude: 50.943723
basic_longitude: 7.520921

In der „configuration.yaml“ ersetzen wir diese Parameter nun durch entsprechene Platzhalter:

homeassistant:
  name: Zu Hause
  latitude: !secret basic_latitude
  longitude: !secret basic_longitude
  elevation: 141
  unit_system: metric
  time_zone: Europe/Berlin

Nach dem abspeichern werden die Parameter aus der „secret.yaml“ gezogen und müssen nur noch dort gepflegt werden.

 

Z-Wave in Home Assistant einrichten

Z-Wave ist ein sehr beliebtes Funkprotokoll für die Haussteuerung. Das liegt zum einen an dem Rückkanal, mit dessen Hilfe das Gerät seinen Status zur Haussteuerung senden kann, und zum zweiten an dem Mesh-Netzwerk, bei dem jedes Z-Wave Gerät als Repeater fungiert.

Trotzdem ist Z-Wave kein perfektes System, denn auch hier gibt es Inkompatibilitäten zwischen Sendern und Empfänger verschiedener Hersteller.

Momentan gibt es zwei Z-Wave Standards: Z-Wave und Z-Wave Plus. Beide Standards sind kompatibel zueinander und funktionieren ohne Probleme mit Home Assistant.

 

Wie funkt Home Assistant mit Z-Wave Geräten?

Um das zu ermöglichen benötigen wir einen USB-Stick der Z-Wave fähig ist. Dieser muss von OpenZwave unterstützt werden.

Ich empfehle einen aktiven Stick zu kaufen. Zum Beispiel den „Aeon Z-Stick S2“ (Z-Wave) oder „Aeon Z-Stick Gen5“ (Z-Wave Plus).

Aktive Z-Wave Sticks fungieren als eigenständiges Gateway für Home Assistant. Man lernt also das Z-Wave Gerät (zum Beispiel einen Temperatursensor) an dem USB Stick an und nachdem man den Stick wieder mit dem Raspberry Pi verbunden hat, kann Home Assistant die Daten abrufen und den Stick benutzen.

 

Was wir brauchen um Z-Wave in Home Assistant einzubinden

Aeon Sensoren

  • Raspberry Pi mit Home Assistant Installation
  • Aeon Z-Stick S2 oder Gen5
  • Z-Wave Sensoren oder Aktoren (Auf dem Bild sind zwei „Aeon Multi Sensor Gen5“)

Als Set gibt es das hier.

Die Installation

Wir verbinden uns via SSH auf den Raspberry Pi und kontrollieren ob „libudev-dev“ in der neuesten Version installiert ist:

$ sudo apt-get install libudev-dev

Der Output sollte so aussehen:

Linux libudev

 

Die Konfiguration

Nun lassen wir uns die belegten Port des Raspberry Pi anzeigen, um den USB Port mit dem angeschlossenen Z-Wave Stick zu finden:

$ dir /dev

Linux USB

Die USB Ports sind mit „ttyUSB*“ oder „ttyACM*“ gekennzeichnet.

In unserem Beispiel ist es „ttyUSB0“.

Wir öffnen also die „configuration.yaml“ und tragen dort folgende Komponente mit dem USB Pfad ein:

# Example configuration.yaml entry
zwave:
  usb_path:/dev/ttyUSB0

Z-Wave in Home Assistant

 

Raspberry Pi Neustart

Beim ersten Neustart mit der angepassten „Configuration.yaml“ wird „OpenZWave“ automatisch installiert. Das kann sehr lange dauern (Bei mir ca. 1 Stunde).

Um den Installationsprozess zu überwachen, können wir uns mit dem folgendem Command die Prozesse auf dem Raspberry Pi anschauen:

$ top

Linux top

Der Installationsprozess nennt sich COMMAND = cc1plus.

Nach dem Neustart ist im Menu der WebUI eine neue Rubrik „Z-Wave“ sichtbar.

 

Home Assistant Oberflächen Konfiguration

Der erste Schritt zur Konfiguration der Oberfläche von Home Assistant ist es zu wissen welche Sensoren und Aktoren „Entities“ euch in eurem System zur Verfügung stehen und wie sie heißen.

 

Verfügbare Entities

Dazu öffnet man das Menu und klickt in den „Developer Tools“ auf die spitzen Klammern:

Home Assistant Entities

Die Entities werden nun mit ihrem Status aufgelistet:

Home Assistant Entities

Da unsere Installation nagelneu ist sehen wir nur zwei „Entities“:

  • sensor.yr_symbol
  • sun.sun

Beide Entities stammen schon aus der aktuellen „Configuration.yaml“ und zwar werden sie mit folgenden Einträgen aktiviert:

# Track the sun
sun:
# Weather Prediction
sensor:
  platform: yr

Als Status sehen wir bei „sensor.yr_symbol“ eine 3. Die Zahl gibt an welches Symbol die Oberfläche für den Status benutzt soll. Die Entity „sun.sun“ gibt den Sonnenstand an unserem Heimatort wieder. In unserem Beispiel „above_horizon“ also über dem Horizont.

 

Oberflächen Konfiguration

In der Oberfläche werden unsere zwei Entities momentan noch in den roten Kreisen angezeigt:

Home Assistant Oberflächen Konfiguration

Sie sind also noch keiner Gruppe zugewiesen.

Wir erstellen also nun eine Gruppe in unserer Oberfläche und fügen dazu diesen Code in die „configuration.yaml“ ein:

group:
  Wetter:
    name: Wetter
    entities:
      - sun.sun
      - sensor.yr_symbol

Es ist wichtig das jede Komponente, in diesem Fall „group:“, nur einmal in der configuration.yaml enthalten ist!

Um die Konfiguration nun sichtbar zu machen müssen wir sie aktualisieren. Im Fall von Gruppen können wir das über die Oberfläche tun. Unter dem Menu Punkt „Configuration“ können wir mit einem Klick auf „Reload Groups“ die WebUI aktualisieren.

Danach sollte das Ergebnis so aussehen:

Home Assistant Oberflächen Konfiguration

 

Nun fügen wir noch eine View (Tab) hinzu, um unsere Gruppe dort anzuzeigen:

group:
  Wetter:
    name: Wetter
    entities:
      - sun.sun
      - sensor.yr_symbol
  Wetter_View:
    name: WetterView
    view: yes
    entities:
      - group.Wetter

Nun wieder ein „Reload Groups“ ausführen und schon wir die neue View in der Oberfläche angezeigt:

Home Assistant Wetter

 

Bezeichnungen anpassen (friendly_name)

Die Entities haben momentan noch die internen Bezeichnungnen „Sun“ und „yr Symbol“. Um dies zu ändern können wir mit dem Parameter „customize“ einen neuen Namen definieren:

homeassistant:
  # Name of the location where Home Assistant is running
  name: Home
  # Location required to calculate the time the sun rises and sets
  latitude: 51.2993
  longitude: 9.491
  # Impacts weather/sunrise data (altitude above sea level in meters)
  elevation: 0
  # metric for Metric, imperial for Imperial
  unit_system: metric
  # Pick yours from here: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
  time_zone: UTC
  customize:
    sun.sun:
      friendly_name: Sonnenstand
    sensor.yr_symbol:
      friendly_name: Wetter

Um die „customize“ Konfiguration neu zu laden, müssen wir den Home Assistant Service neu starten. Dazu können wir den Menupunkt „Services“ benutzen und dort als „Domain = homeassistant“ und „Service = restart“ auswählen.

Home Assistant Oberflächen Konfiguration

Nach dem Klick auf „Call Service“ wird der Home Assistant neu gestartet. Das kann einige Sekunden dauern, je nach Performance des Systems.

Nun sieht unsere Oberfläche so aus:

Home Assistant Wetter