YAML-Code in andere Dateien auslagern

Wer Home Assistant schon lรคnger nutzt, dรผrfte einige male รผber die Formulierung „Ergรคnze folgenden Code in deiner configuration.yaml“ gestolpert sein. Und entsprechend groรŸ dรผrfte die configuration.yaml dann zwischenzeitlich auch geworden sein. Aber das muss nicht sein! Ich zeige dir, wie du deine configuration.yaml super einfach wieder verkleinern kannst, indem du YAML-Code auslagerst.

Bei mir hatte die Datei vor wenigen Tagen noch รผber 240 Zeilen Codes, der zum absolut grรถรŸten Teil individuell von mir erstellt war. Entsprechend unรผbersichtlich und klobig war die Datei. Durch simples Auslagern von YAML-Code in logischen Blรถcken in andere Dateien, habe ich keine Funktionalitรคt meines Smart Homes verloren und zeitgleich meine Konfigurations-Datei wieder deutlich รผbersichtlicher.

Home Assistant hat grundsรคtzlich keine Probleme damit, wenn die Konfigurationsdatei riesig ist. Ich persรถnlich mag dies aber nicht, da man so deutlich schneller den รœberblick und sich im Code verlieren kann. Durch das Aufteilen des YAML-Codes in mehrere, logisch getrennte Blรถcke bzw. Dateien, wird das Verwalten und Pflegen des Codes deutlich einfacher.

Wer zu faul zum Lesen ist, kann sich das Ganze natรผrlich auch als Video auf YouTube anschauen ๐Ÿ˜‰

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

Follow Home Assistant
( 535 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!

Sie sehen gerade einen Platzhalterinhalt von YouTube. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltflรคche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.

Mehr Informationen

Beispiel fรผr das Auslagern von YAML-Code

In jeder configuration.yaml von HA dรผrfte sich folgender Code wiederfinden:

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

Dieser Code macht exakt, was ich in diesem Beitrag beschreibe: Es wird etwas definiert automation: beispielsweise und der eigentliche Code hierfรผr befindet sich in der Datei automations.yaml, der mit der Anweisung !include eingefรผgt wird. Gleiches gilt in diesem Beispiel fรผr script und scene.

Durch die Anweisung !include kann man also andere YAML-Dateien in die configuration.yaml Datei inkludieren. Alternativ kรถnnte man man den YAML-Code der Datei automations.yaml auch direkt in die configuration.yaml schreiben. Meine automations.yaml ist aktuell aber knapp รผber 3000 Zeilen lang, was verdeutlichen dรผrfte, wie unรผbersichtlich die configuration.yaml werden wรผrde. Also macht es viel mehr Sinn, logisch zusammenhรคngende Code-Blรถcke in eigene Dateien auszulagern und diese in die Konfigurationsdatei zu inkludieren!

Mรถglichkeiten YAML-Code auszulagern

Das Aufteilen der Konfiguration in mehrere Dateien wird unter anderem auch in der offiziellen Doku von Home Assistant beschrieben: Splitting up the configuration

Neben dem einfach !include-Befehl, mit welchem du zuvor in der configuration.yaml befindlichen Code 1:1 in eine zusรคtzliche Datei auslagern kannst, gibt es noch die folgenden erweiterten Mรถglichkeiten:

  • !include_dir_list gibt den Inhalt eines Verzeichnisses als Liste zurรผck, wobei jeder Dateiinhalt ein Eintrag in der Liste ist. Die Reihenfolge der Listeneintrรคge basiert auf der alphanumerischen Reihenfolge der Dateinamen.
  • !include_dir_named gibt den Inhalt eines Verzeichnisses in Form eines Wรถrterbuchs zurรผck, das den Dateinamen => Inhalt der Datei abbildet.
  • !include_dir_merge_list gibt den Inhalt eines Verzeichnisses als Liste zurรผck, indem alle Dateien (die eine Liste enthalten sollten) zu einer groรŸen Liste zusammengefasst werden.
  • !include_dir_merge_named gibt den Inhalt eines Verzeichnisses als Wรถrterbuch zurรผck, indem es jede Datei lรคdt und in ein groรŸes Wรถrterbuch zusammenfรผhrt.

Zugegeben: Obwohl ich HA mittlerweile seit รผber 6 Jahren sehr aktiv nutze, habe ich diese erweiterten Mรถglichkeiten nie so richtig genutzt, da diese voraussetzen wรผrden, dass man deutlich komplexere Code-Aufteilungen und -Gruppierungen vornimmt, als ich dies fรผr nรถtig halte.

Meine Code-Aufteilungen erfolgen eigentlich alle mittels !include. Lediglich eine !include_dir_named Anweisung existiert in meiner Konfiguration noch. Die habe ich aber vor Jahren mal von anderer Stelle รผbernommen, weil ich es fรผr clever gehalten habe. Jedoch hat sich HA in der Zwischenzeit deutlich weiterentwickelt (und ich habe natรผrlich auch dazugelernt), so dass ich diesen Code nicht mehr fรผr sinnvoll halte und bislang lediglich zu faul war ihn auszubauen (und gegen die deutlich simpleren !include-Anweisungen auszutauschen).

Besonderheiten beim Nutzen von !include

Das Nutzen von !include ist grundsรคtzlich sehr einfach umzusetzen. Aber natรผrlich gibt es Dinge, auf die du achten musst. Immerhin arbeitest du direkt an der Konfiguration deines Smart Homes und kannst hierbei natรผrlich Dinge kaputt machen.

Korrekte Code-Einrรผckungen beachten

Primรคr solltest du darauf achten, das der Code in der zusรคtzlichen YAML-Datei korrekt eingerรผckt ist, also die fรผr YAML elementaren Einrรผckungen nicht durch Copy&Paste „zerschossen“ wurden. Bei YAML-Code werden รผber die Einrรผckungen logischen Abhรคngigkeiten definiert, so dass eine falsche Einrรผckung den Code unbrauchbar machen kann.

Ich empfehle fรผr das Bearbeiten von YAML-Code das Nutzen des Add-ons Studio Code Server, da dieser Editor simple Prรผfungen deines YAML-Codes „on-the-fly“ durchfรผhrt und dich damit auch mรถgliche Syntax-Probleme deines Codes hinweist. Hier ein Beispiel fรผr eine vom Editor erkannte falsche Einrรผckung in Zeile 1:

Vom Editor erkannte falsche/auffรคllige Einrรผckung im Code
Vom Editor erkannte falsche/auffรคllige Einrรผckung im Code

In Zeile 4 wird „bad indentation of a mapping entry“ moniert und der Code-Beginn rot unterstrichen dargestellt. Das eigentliche Problem liegt zwar in den fehlenden Leerzeichen in Zeile 1 vor „garage_light_off“, jedoch hilft einem der Hinweis des Editors die fehlerhafte Stelle รผberhaupt erst zu entdecken.

Generell empfehle ich ausgelagerten Code in der zusรคtzlichen Datei „vorne bรผndig“ einzufรผgen, also ohne Leerzeichen am Anfang. Fรผr den vorherigen Screenshot wรผrde dies dann folgendes bedeuten:

Tipp: Um gesamte Code-Blรถcke schnell einzurรผcken markiere den gesamten Code und drรผcke dann bei Windows folgende Tasten:

  • Codeblock nach rechts rรผcken: TAB
  • Codeblock nach links rรผcken: SHIFT + TAB

Code-ร„nderungen vor Neustart รผberprรผfen

Wenn du deine configuration.yaml aufgerรคumt hast, solltest du deine Code-ร„nderungen auf jeden Fall รผberprรผfen, bevor du einen Neustart des Systems ausfรผhrst. Hierfรผr wechselst du zu den Entwicklerwerkzeugen und wรคhlst dort KONFIGURATION PRรœFEN:

Sofern hier keine Warn- oder Fehlermeldungen angezeigt werden, kannst du deinen HA in der Regel bedenkenlos neu starten und somit deine Code-ร„nderungen „aktivieren“.

Hier ein Beispiel wie eine Fehler-/Warnmeldung bei dieser รœberprรผfung aussehen kann, wobei ich die falsche Einrรผckung aus dem Beispiel von weiter oben hierfรผr bewusst nicht korrigiert habe (also um die Meldung zu provozieren):

Wenn du eine solche Warnmeldung beim รœberprรผfen deines YAML-Code angezeigt bekommst, solltest du HA nicht neu starten, sondern zuerst den betreffenden Code beheben und erst nach einer erneuten, erfolgreichen รœberprรผfung den Neustart durchfรผhren!

Bedeutung von Duplicate-Key Warnungen

Wenn du auch den Studio Code Server fรผr das Bearbeiten der YAML-Dateien nutzt, kann es vorkommen, dass dir eine duplicate key Warnung angezeigt wird. Dies bedeutet in der Regel, dass du eine Angabe vor dem Doppelpunkt doppelt genutzt hast, hier ein Beispiel:

In diesem Beispiel habe ich (bewusst) command_line: definiert, weshalb es zu der Warnmeldung kommt. Technisch verhรคlt sich dieser Code dann so, dass die erste Definition (also !include command_lines.yaml) von der zweiten bzw. letzten „รผberschrieben“ wird. Als Ergebnis wรผrde als einzig der Code aus der timers.yaml effektiv genutzt werden.

In einem solchen Fall solltest du den „doppelten Schlรผssel“ entfernen, also deinen YAML-Code so anpassen, dass es zu keiner solchen Dopplung kommt.

Foto des Autors
Autor
Olli
Ca. Anfang 40, 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