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:
2) Wir registrieren als erstes Gerät unseren Denon AVR unter devices:
homecinema_nn:
activities:
devices:
AVR:
platform: denon_avr_nn
sensor: sensor.denon_avr
host: 192.168.31.44:23
on_: "{{ states._sensor_.state == 'On' }}"
off_: "{{ states._sensor_.state == 'Standby' }}"
power_on:
action: switch.turn_on
target:
entity_id: switch.smartplug92
start:
action: _platform_.command_list
data:
commands: PW ON
stop:
action: _platform_.command_list
data:
commands: PW STANDBY
Alles anzeigen
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
homecinema_nn:
activities:
devices:
AVR:
platform: denon_avr_nn
sensor: sensor.denon_avr
host: !secret denon_avr_host
on_: "{{ states._sensor_.state == 'On' }}"
off_: "{{ states._sensor_.state == 'Standby' }}"
power_on:
action: switch.turn_on
target:
entity_id: switch.smartplug92
start:
action: _platform_.command_list
data:
commands: PW ON
stop:
action: _platform_.command_list
data:
commands: PW STANDBY
UHD:
platform: panasonic_uhd_nn
sensor: sensor.panasonic_uhd
host: !secret panasonic_uhd_host
on_: "{{ states._sensor_.state == 'On'}}"
off_: "{{ states._sensor_.state == 'Off'}}"
power_on:
action: switch.turn_on
target:
entity_id: switch.smartplug91
start:
stop:
action: switch.turn_off
target:
entity_id: switch.smartplug91
BEAMER:
platform: jvc_beamer_nn
sensor: sensor.jvc_beamer
host: !secret jvc_beamer_host
on_: "{{ states._sensor_.state == 'On' }}"
off_: "{{ states._sensor_.state == 'Standby' }}"
power_on:
action: switch.turn_on
target:
entity_id: switch.smartplug94
start:
action: _platform_.command_list
data:
commands: "!PW1"
stop:
action: _platform_.command_list
data:
commands: "!PW0"
Alles anzeigen
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 ...