Zustände von Geräten mit Szenen zwischenspeichern

Mit Szenen/Scenes kannst du in Home Assistant Zustände von Geräten (also beispielsweise die Solltemperatur von Thermostaten oder die Helligkeit und Farbe von Lampen) zwischenspeichern, um diese zu einem späteren Zustand aktivieren zu können. Dieses „sich einen Zustand merken“ kann im Alltag super praktisch sein, wenn man nicht manuell die entsprechenden Einstellungen vornehmen möchte. Frank hatte hier im Blog nach einer Umsetzungsempfehlung gefragt und dabei fiel mir dann auf, dass ich zu Szenen noch gar keinen Beitrag geschrieben hatte – das hole ich hiermit natürlich nach 😉

Ein gutes praktisches Beispiel kann eine fiktive Szene „Fernsehen“ sein. Hierfür stellen wir uns folgendes vor, um den Mehrwert von Szenen besser zu verstehen:

Wir haben einen Zeitpunkt vor dem Fernsehen, zu dem die relevanten Geräte im Wohnzimmer gewisse Zustände haben. Diese Zustände möchten wir, wenn wir Fernsehen, einfach auf definierte neue Zustände abändern (beispielsweise das Deckenlicht ausschalten, da es sonst zu hell wäre). Schalten wir dann den Fernseher aus, möchten wir dann wieder die Zustände aller Geräte aktivieren, die vor dem Fernsehen aktiv waren.

Hier ein Beispiel für die unterschiedlichen Zustände:

vorherFernsehennachher
Heizung-Soll: 20 Grad
Licht Decke: eingeschaltet, 70 % Helligkeit
Licht Couch: eingeschaltet, 70 % Helligkeit
Licht TV: aus
Lautstärke Sonos: 10
Heizung-Soll: 22 Grad
Licht Decke: aus
Licht Couch: eingeschaltet, 30 % Helligkeit
Licht TV: eingeschaltet, 25 % Helligkeit
Lautstärke Sonos: 15
Heizung-Soll: 20 Grad
Licht Decke: eingeschaltet, 70 % Helligkeit
Licht Couch: eingeschaltet, 70 % Helligkeit
Licht TV: aus
Lautstärke Sonos: 10

Anhand dieses Beispiels werde ich nun die Funktionsweise von Szenen in Home Assistant erklären.

Du magst Home Assistant? Dann abonniere kostenlos meine Beiträge mit Tipps, Tricks und Anleitungen rund um Home Assistant:

Follow Home Assistant
( 379 Followers )
X

Follow Home Assistant

E-mail : *
* Ich stimme der Datenschutzerklärung zu!

Garantiert kein Spam, keine Werbung und immer mit Abmelde-Link, solltest du es dir anders überlegen!

Szenen on-the-fly definieren

Ich unterstelle bei meine Beispiel folgendes Vorgehen: Wenn ich Fernsehen möchte, führe ich ein Skript „Fernseher an“ aus und wenn ich nicht mehr Fernsehen möchte, führe ich das Skript „Fernseher aus“ aus.

Ich nutze also zwei Skripte, um durch diese den Zustand meiner Geräte vor dem Fernsehen mir zu merken, alle Geräte so einzustellen, dass ich entspannt fernsehen kann und um danach wieder die alten Zustände herzustellen.

Das Skript „Fernseher an“ übernimmt hierbei folgende Aufgaben:

  • Zustände der Geräte zwischenspeichern
  • Zustände der Geräte so anpassen, dass ich Fernsehen kann.

Das Skript „Fernseher aus“ übernimmt dann folgende Aufgabe: zwischengespeicherte Zustände wieder aktivieren.

Soviel zur Theorie, kommen wir endlich zum Code!

Mein Skript „Fernseher an“ sieht wie folgt aus:

alias: Fernseher an
sequence:
  - service: scene.create
    metadata: {}
    data:
      snapshot_entities:
        - climate.danfoss_devolo_home_control_radiator_thermostat_heating_1_3
        - light.sessel_z2m
        - light.couch_z2m
        - media_player.wohnzimmer
        - switch.shellyplug_s_dd514f
      scene_id: zustand_alt
  - delay:
      hours: 0
      minutes: 0
      seconds: 2
      milliseconds: 0
  - service: switch.turn_on
    metadata: {}
    data: {}
    target:
      entity_id: switch.shellyplug_s_dd514f
  - service: climate.set_temperature
    metadata: {}
    data:
      temperature: 22
    target:
      entity_id: climate.danfoss_devolo_home_control_radiator_thermostat_heating_1_3
  - service: light.turn_on
    metadata: {}
    data:
      brightness_pct: 20
    target:
      entity_id: light.sessel_z2m
  - service: light.turn_off
    metadata: {}
    data: {}
    target:
      entity_id: light.couch_z2m
  - service: media_player.volume_set
    metadata: {}
    data:
      volume_level: 0.15
    target:
      entity_id: media_player.wohnzimmer
mode: single

Unter der scene_id „zustand_alt“ werden die Zustände der unter snapshot_entities aufgeführten Geräte zwischengespeichert, wenn dieses Skript ausgeführt wird.

Nachdem die Zustände zwischengespeichert wurden, warten wir 2 Sekunden (auf älterer Hardware habe ich schon die Beobachtung gemacht, dass dies sinnvoll sein kann). um dann die neuen Zustände der Geräte zu bestimmen. Der Fernseher wird also beispielsweise eingeschaltet, die Lautstärke des Lautsprechers erhöht und so weiter.

Jetzt sollte alles bereits sein, um entspannt fernsehen zu können – mit dem Ausführen eines einzigen Skriptes 😉

Sind wir dann fertig mit dem Fernsehen, genügt folgendes Skript, um den Zustand von vor dem Fernsehen wiederherzustellen:

Code vom Skript „Fernseher aus“:

alias: Fernseher aus
sequence:
  - service: scene.turn_on
    metadata: {}
    target:
      entity_id: scene.zustand_alt
mode: single

Die im ersten Skript erstellte Szene „zustand_alt“ wird aktiviert, so dass alle Geräte wieder in den Zustand versetzt werden sollten, der zum Zeitpunkt der Erstellung dieser Szene bestand.

Szenen dauerhaft definieren

In meinem Beispiel habe ich gezeigt, wie man eine Szene „on-the-fly“ erstellt, also die aktuellen Zustände von Geräten zwischenspeichert. Für den Zustand vor dem Fernsehen, halte ich das für die beste Variante.

Um nun unseren Code noch etwas kompakter zu machen, könnte man die Zustände der Geräte während des Fernsehens in einer weiteren Szene statisch speichern.

Hierfür wechselst du in Home Assistant zu Einstellungen -> Szenen und erstellst eine neue Szene. In dieser Szene fügst du dann alle relevanten Geräte und/oder Entitäten hinzu.

Für jedes Gerät bzw. jede Entität stellst du dort die gewünschten Zustände ein, also so, als würdest du (in unserem Beispiel) Fernsehen. Wenn du jede/s Gerät/Entität entsprechend eingestellt hast, speicherst du deine Szene.

Szene in Home Assistant erstellen

Durch das Erstellen einer dauerhaften Szene, können wir diese dann zum gewünschten Zeitpunkt sehr einfach ausführen. Das Code-Beispiel von oben vom Skript „Fernsehen an“ wird hierdurch deutlich kürzer:

alias: Fernseher an
sequence:
  - service: scene.create
    metadata: {}
    data:
      snapshot_entities:
        - climate.danfoss_devolo_home_control_radiator_thermostat_heating_1_3
        - light.sessel_z2m
        - light.couch_z2m
        - media_player.wohnzimmer
        - switch.shellyplug_s_dd514f
      scene_id: zustand_alt
  - delay:
      hours: 0
      minutes: 0
      seconds: 2
      milliseconds: 0
  - service: scene.turn_on
    metadata: {}
    target:
      entity_id: scene.fernsehen
mode: single

Wir erstellen also „on-the-fly“ eine Szene zustand_alt, die die aktuellen Zustände zwischenspeichert. Ist das erfolgt, aktivieren wir die zuvor erstellte statische Szene fernsehen.

Szenen sind also in zwei Fällen sehr hilfreich:

  1. um sich einen Zustand zu merken, den man zu einem späteren Zeitpunkt wieder aktivieren möchte
  2. um statische Zustände mehrerer Geräte/Entitäten einfach aktivieren zu können (und somit das DRY-Prinzip [Wikipedia: Don’t repeat yourself] zu befolgen)

Dieser Beitrag ist Teil einer kleinen Beitrags-Serie rund um das Smarthome mit Home Assistant.

Foto des Autors
Autor
Olli
Ca. Ende 30, seit Windows 3.1 Fan von Computern, Gadgets, Handys und allem, was sich irgendwie programmieren lässt. Ich mag es gerne individuell und möglichst einfach, probiere aber auch gerne neue Dinge sofort aus. :) Konnte ich dir helfen? Dann würde ich mich über ein Bier freuen ;) Bier-Spende

Schreibe einen Kommentar