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

 

Grundlagen über die Home Assistant Konfiguration

Ihr habt eine lauffähige Home Assistant Installation und möchten nun eigene Konfigurationen vornehmen? Kein Problem, hier erkläre ich wie das geht.

 

Wo findet man die Home Assistant Konfiguration?

Home Assistant ist noch nicht komplett über eine Web UI Oberfläche konfigurierbar. Ich schreibe „noch nicht“ weil im Moment daran gearbeitet wird und bei jedem Release ein wenig mehr zur Verfügung steht.

Der einzige sinnvolle Weg ist es daher Home Assistant über die eigene Konfigurationsdatei zu konfigurieren. Diese heisst „configuration.yaml“ und liegt im „config“ Ordner des Systems.

Um diese Datei konfigurieren gibt es zwei Wege:

  1. Über SSH und ein Dateibearbeitungprogram wie „nano“
  2. Oder ganz einfach über das FTP Plugin von Notepad++

 

SSH installieren

Damit wir uns  überhaupt per SSH auf den Raspberry Pi verbinden können müssen wir das „SSH server“ Add-on in Hass.io installieren.

Klicken wir auf der Weboberfläche im Menu auf „Hass.io“ und danach auf das Korbsymbol oben rechts in der Ecke.

Hassio SSH

Nachdem SSH installiert ist müssen wir noch ein Kennwort vergeben, das machen wir hier:

Hassio SSH Password

 

1. Über SSH und „nano“

Wir verbinden uns mit „Putty“ per SSH auf unseren Home Assistent Webserver (http://192.168.0.2:8123)

Nun Navigieren wir in das home-Verzeichnis des Benutzers „homeassistant“:

$ cd ..
$ cd config

Jetzt können wir die Konfigurationsdatei mit folgendem Befehl öffnen:

$ nano configuration.yaml

Solltet ihr euch mit dem Programm „nano“ nicht so gut auskennen ist es einfacher und übersichtlicher die Datei mit Notepad++ zu konfigurieren.

 

2. Über Notepad++ und das Plugin NppFTP

Über „Erweiterungen -> NppFTP -> Show NppFTP window“ lässt sich eine Sidebar aufrufen: (Sollte der Eintrag im Menu nicht vorhanden sein könnte ihr NppFTP als Plugin nachinstallieren)

Notepad SFTP

Hier kann über den „Einstellungen“ Button eine neue Verbindung zum Raspberry Pi aufgebaut werden:

Notepad SFTP

Mit einem Klick auf „Add new“ kann ein Hostname, Connection type, Port, Username und Password eingegeben werden.

Mit „Close“ speichert man seine Einstellungen. Und mit „Connect“ Verbindet man sich dann:

Home Assistant Konfiguration

 

 

 

Die „configuration.yaml“

Die Konfigurationsdatei ist im yaml Format geschrieben und grundsätzlich als Liste gehalten.

Ich verschaffe euch erstmal einen kleinen Überblick über die wichtigsten Konfigurationen.

 

Die Basiskonfiguration

Home Assistant Konfiguration

Unter dem Punkt „homeassistant“ lassen sich grundsätzliche Dinge konfigurieren:

Name: Name der ersten View in der WebUI
Latitude / Longitude: Koordinaten des Hauses
Elevation: Höhe über Meeresspiegel
Unit_System: In Deutschland gilt das Metrische System
Time_zone: Die Lokale Zeitzone

Diese Informationen werden hauptsächlich für die Uhrzeit und das Wetter benötigt. Beides wird über Online-Dienste bereitgestellt.

 

Weitere Konfigurationen

Home Assistant Konfiguration

Die weiteren Konfigurationen finden sich allesamt in der Komponenten-Übersicht auf der Home Assistant Webseite wieder.

frontend: Aktiviert die WebUI vom Home Assistant Server
updater: Ermittelt verfügbare Updates
discovery: Ermittelt aktive Geräte im Netzwerk, wie Apple TV, Phillips Hue und vieles mehr
conversation: Kann auf Spracheingaben reagieren
history: Speichert den Status aller Entities in einer Historie
logbook: Listet alle von Home Assistent ausgeführten Aktionen auf
sun: Nutzt die konfigurierten Geo-Koordinaten um Online Wetterdaten zu holen
tts: Aktiviert die Google Sprachsteuerung

 

Komponenten die ihr nicht aktivieren möchtet könnt ihr einfach herauslöschen oder mit einer # am Anfang der Zeile aus kommentieren.

Zusätzliche Komponenten können einfach hinzugefügt werden. Eine Übersicht der aktuell Unterstützten Komponenten findet ihr hier.

Yaml unterstützt keine Tabs. Arbeitet also nur mit Leerzeichen!