HKS mit HA - Die Anleitung zum Nachbauen - #04 HOMECINEMA_NN

  • Zurück zur Startseite und zum Inhaltsverzeichnis

    Version: 2024-10-17


    Wir haben jetzt schon einige Geräte in HA integriert und können diese komfortabel steuern, abfragen und prüfen.

    Aber wir benötigen eine übergeordnete Logik, die es unser erlaubt zwischen unterschiedlichen Betriebsmodi umzuschalten.


    Wir wollen UHDs mit dem Disc-Player abspielen, Spiele mit der PS5 zocken oder nur Musik hören. Dafür sind unsere Geräte im Heimkino in der Regele jeweils anders einzustellen


    Lange Zeit hatte ich dieses Umschalten in HA mit einer Vielzahl von Scripts und Automatisierungen realisert. Das war recht unübersichtlich und fehlerbehaftet. Außerdem konnte ich euch nicht zumuten das so nachzubauen.


    Daher habe ich mir die geliebte Logitec-Harmony zum Vorbild genommen und eine Integration geschrieben, welche deren Logik folgt.


    Diese neue Integrarion heisst: homecinema_nn


    Im Wesentlichen besteht die Integration aus zwei Teilen

    • Zuerst werden alle Devices registriert die wir für unser Heimkino benötigen.
    • Dann werden Activities aus diesen Devices (inkl. der richtigen Einstellungen) zusammengestellt.


    Ich kann euch dafür (noch) keine grafische Benutzeroberfläche bieten, aber ich denke die Konfiguration mit YAML solltet ihr mittlerweile schaffen!


    Nachdem man die homecinema_nn Integration in bekannter Weise als custom_component installiert hat, bauen wir unsere Heimkino-Aktivities in der configuration.yaml auf.


    1) Start mit einer leeren Konfig:


    Code
    homecinema_nn:
      activities: 
      devices: 
    
    sensor:
      - platform: homecinema_nn
        name: homecinema


    2) Wir registrieren als erstes Gerät unseren Denon AVR unter devices:

    Wir lesen jetzt die Zeile für Zeile:

    • platform: Der Name der Integration. Bzw. das Gerät an welches wir die Steuerkommandos senden mit <action>. Mit der Variable _platform_ können wir das Gerät referenzieren (siehe weiter unten bei "start" oder "stop")
    • sensor: Der Name der Sensor-Entity. Hier können wird den Gerätestatus und die Attribute abfragen. Mit der Variable _sensor_ können wir den Sensor referenzieren (siehe weiter unten bei "on_"oder "off_")
    • host: Der TCP-Endpunkt. DNS-Name oder IP-Adresse + Port. Ist der host via Ping erreichbar wird das Kriterium "_online" auf "True" gesetzt
    • on_: Das Kriterium um zu erkennen, ob das Gerät eingeschalten ist, als HA-Template Syntax
    • off_: Das Kriterium um zu erkennen, ob das Gerät vorhanden und ausgeschalten ist, als HA-Template Syntax
    • power_on: [optional] wie ist der Strom für dieses Gerät einzuschalten.
    • start: Welche Aktion ist auszuführen, um das Gerät einzuschalten. Die Kriterien "_off" und "online" müssen "True" sein bevor diese Aktion ausgeführt wird.
    • stop: Welche Aktion ist auszuführen, um das Gerät auszuschalten.


    Dieser Device-Konfigurationsblock ist für alle Device, die wir in dieser Steuerung nutzen wollen, zu erstellen.

    Um zu prüfen ob die Konfiguration korrekt funktioniert gehen so vor:


    1) YAML-Code prüfen

    Besonders auf die 2-Leerzeichen Einrückung achten und keine Tabulatoren setzen. Es gibt auch Online-Tools, um zu prüfen ob der YAML-Code korrekt ist.

    Jedenfalls vor dem Restart von HA die Konfigurartion prüfen lassen!


    2) Nach dem Restart sollte der neue Sensor homecinema_nn als Entity eingetragen sein.

    Wenn wir uns die Attribute des sensors.homecinema ansehen, sollten wir das hier sehen:



    Wird die Enitity nicht gezeigt, dann bitte die HA-Log-Einträge prüfen!


    Was sagen uns die Attribute:

    • debug 1: Default.
    • activity undef: Aktuell ist keine Activity aktiv
    • AVR: Eine Attribut-Gruppe mit den Daten zu unserem AVR


      • host, platform, sensor: Wie im configuration.yaml spezifiziert (wird bei debug>0 angezeigt)
      • _online false: Host über IP nicht erreichbar
      • _on: Das "on_" Template liefert "false"
      • _off: Das "off_" Template liefert "false"
      • _ready: Das "ready" Template liefert "undef" da noch keine Activity aktiv ist (Ready=True wenn korrekt für die aktuelle Activity. Details folgen weiter unten)
      • state Offline: Der daraus resultierende Status des AVR
    • _last_update: Letzte Aktualisierung des Sensors


    3) Starten des AVR mit einem Service der homecinema_nn Integration.



    Darauf hin sollte das Attribute AVR.state "Starting" anzeigen, und die unter <power_on> und <start> konfigurierten Actionen ausgeführt werden. Haben wir alles richtig gemacht, dann sollte nach kurzer Zeit der AVR gestartet sein und die Attribute folgende Werte zeigen:


    Wenn nicht, Dann den Ablauf händisch Schritt für Schritt mit den HA-DeveloperTools nachspielen:

    1) power_on-action ausführen

    2) off_ Template testen

    3) start-action ausführen

    4) on_ Template testen


    Hat das geklappt machen wir mit den weiteren Geräten das gleiche. Hier beispielhaft für AVR, UHD-Player und JVC-Beamer


    Nach dem Restart sollten die erweiterten Attribute eingetragen sein:


    Jetzt können wir die in der homecinema-Integration integriereten Geräte über die homecinema-Services

    Start, Beenden und deren Status abfragen.


    Jetzt bauen wir uns eine Activity daraus ...

  • Eine Activity mit der homecinema_nn Integration erstellen.


    Wollen wir jetzt eine <Activity> "Disc" erstellen.

    Um alles für das Abspielen von UHD-Disks korrekt einzustellen machen wir das so.

    Wir erstellen unter dem <activities> Eintrag die Activity "Disc" und ordnen dieser die benötigten Devices zu:




    Wenn wir nun (nach eine Restart von HA) die Aktivity starten,


    werden alle der <activity> zugeorndeten <devices>, wie konfiguriert gestartet.


    Hinweis: Wer einen Blick ins Logfile wag, sieht dort den Ablauf recht anschaulich - Der Logger sollte auf "info" gestellt sein.


    Geräte richtig konfigurieren


    Nun, wir wollen die Geräte ja nicht nur Starten, sondern auch für jede <activity> richtig einstellen.

    Das machen wir so:



    Hier legen wir für die <activity> "Disc" fest mit welcher <action> das <device> "AVR" configuriert wird.


    Hier wird also die <PresetGroup> "PG_Disc" für der Denon-Integration aufgerufen, aber erst dann wenn das Kriterium "on_" True liefert. Benötigt man mehrere Befehle um ein Gerät zu konfigurieren, ist ein HA-Script zu erstellen. Dieses Script kann dann hier wie üblich eingetragen werden.


    Code
    AVR:
       config:
          action: script.config_my_avr


    Um noch zu erkennen, ob ein <device> für eine <activity> korrekt eingestellt, wird mit dem Parameter <ready> ein HA-Template festgelegt.


    Wird jetzt die <activity> wie zuvor gestartet, werden alle <Devices> nach dem sie gestartet sind (On=True) konfiguriert.



    Heimkino abschalten


    Mit der Aktion



    werden alle in der homecinema_nn registrierten Geräte gestoppt, mit der je <Device> festgelegten <stop> Aktion.

  • Die Konfiguration für unser kleines Demo-Setup sieht dann so aus:



    und wir im Dashboard so dargestellt,


    - Alles "Off"


    - Klickt man lange auf den Button "Disc" wird die Activty "Disk" gestartet.

    Während dem "Starting" sieht man im Dashboard die die Devices starten


    - Und wenn alles "Ready" ist


    Noch zu diesem Dashboard:

    Mit dem Einsschalt-Button rechts kann man jedes Geräte einzeln Ein- und Ausschalten.

    Mit einem Klick auf ein Gerätelabel kommt man zum Geräte-Dashboard

    Mit einem Klick auf ein Aktivitylabel kommt man zum Aktivity-Dashboard

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!