{"id":1039,"date":"2026-06-19T23:09:34","date_gmt":"2026-06-19T21:09:34","guid":{"rendered":"https:\/\/www.coremind.ch\/wordpress\/?p=1039"},"modified":"2026-06-19T23:09:34","modified_gmt":"2026-06-19T21:09:34","slug":"skripte-in-ha-wiederverwendbare-bausteine","status":"publish","type":"post","link":"https:\/\/www.coremind.ch\/wordpress\/skripte-in-ha-wiederverwendbare-bausteine\/","title":{"rendered":"Skripte in HA: wiederverwendbare Bausteine"},"content":{"rendered":"<p>Wer l\u00e4nger mit Home Assistant arbeitet, kennt das Problem: Dieselbe Abfolge von Aktionen taucht in f\u00fcnf Automationen leicht abgewandelt wieder auf. Eine TTS-Ansage hier, eine Benachrichtigung dort, ein Licht-Reset \u00fcberall. Sobald sich etwas \u00e4ndert, muss man jede Kopie einzeln anpassen. Die elegante L\u00f6sung heisst <strong>Skript<\/strong> \u2013 eine wiederverwendbare Sequenz, die Sie einmal definieren und mit Parametern aus beliebig vielen Stellen aufrufen.<\/p>\n<h2>Die Idee: Automationen ohne Ausl\u00f6ser<\/h2>\n<p>Ein Skript ist im Grunde eine Automation ohne Trigger. Es enth\u00e4lt nur den <code>sequence<\/code>-Block \u2013 also das, was passieren soll. Aufgerufen wird es manuell, von einer Automation, von einem Dashboard-Button oder von einem anderen Skript. Damit zentralisieren Sie Logik an einem einzigen Ort. \u00c4ndern Sie das Skript, profitieren sofort alle Aufrufer.<\/p>\n<p>Richtig m\u00e4chtig werden Skripte durch <strong>Felder<\/strong> (<code>fields<\/code>). Damit \u00fcbergeben Sie beim Aufruf Variablen, etwa welcher Lautsprecher sprechen soll oder welcher Text angesagt wird. Aus einem starren Ablauf wird so ein konfigurierbarer Baustein \u2013 ein Skript, viele Einsatzzwecke.<\/p>\n<h2>Schritt f\u00fcr Schritt: ein TTS-Ansage-Skript<\/h2>\n<p>Angenommen, Sie wollen \u00fcberall im Haus Sprachansagen ausl\u00f6sen, mal \u00fcber den HomePod, mal \u00fcber einen Voice-Satelliten. Statt f\u00fcr jede Ansage eine eigene Automation zu bauen, definieren Sie ein generisches Skript mit zwei Feldern \u2013 Zielger\u00e4t und Nachricht:<\/p>\n<pre><code>\u2029script:\u2029  ansage_universal:\u2029    alias: Universelle Sprachansage\u2029    fields:\u2029      ziel:\u2029        description: Media-Player f\u00fcr die Ansage\u2029        example: media_player.homepod\u2029        selector:\u2029          entity:\u2029            domain: media_player\u2029      nachricht:\u2029        description: Der anzusagende Text\u2029        example: Die Waschmaschine ist fertig\u2029        selector:\u2029          text:\u2029    sequence:\u2029      - action: tts.speak\u2029        target:\u2029          entity_id: tts.home_assistant_cloud\u2029        data:\u2029          media_player_entity_id: \"{{ ziel }}\"\u2029          message: \"{{ nachricht }}\"\u2029<\/code><\/pre>\n<p>Der Aufruf aus einer beliebigen Automation ist nun denkbar schlank:<\/p>\n<pre><code>\u2029      - action: script.ansage_universal\u2029        data:\u2029          ziel: media_player.homepod\u2029          nachricht: &gt;\u2029            Achtung, die Bodenfeuchte im Garten ist niedrig.\u2029<\/code><\/pre>\n<p>Jede Variable, die Sie unter <code>data<\/code> mitgeben, steht im Skript als Template-Variable zur Verf\u00fcgung \u2013 selbst dann, wenn Sie sie nicht als Feld definiert haben. Die <code>fields<\/code> dienen vor allem der sauberen Dokumentation und liefern in der Oberfl\u00e4che praktische Eingabe-Selektoren.<\/p>\n<h2>Bausteine verschachteln und absichern<\/h2>\n<p>Skripte d\u00fcrfen sich gegenseitig aufrufen. So bauen Sie aus kleinen, getesteten Einheiten gr\u00f6ssere Abl\u00e4ufe \u2013 etwa ein Skript \u00abGute Nacht\u00bb, das nacheinander ein Licht-Reset-Skript, eine Ansage und das Scharfstellen der Anwesenheitssimulation aufruft. Diese Modularit\u00e4t macht das Debugging erheblich einfacher, weil Sie jeden Baustein isoliert pr\u00fcfen k\u00f6nnen.<\/p>\n<p>Achten Sie auf den Ausf\u00fchrungsmodus (<code>mode<\/code>). Standardm\u00e4ssig l\u00e4uft ein Skript im Modus <code>single<\/code> \u2013 ein zweiter Aufruf w\u00e4hrend der Ausf\u00fchrung wird ignoriert und erzeugt eine Warnung im Log. F\u00fcr Ansagen ist oft <code>queued<\/code> oder <code>restart<\/code> sinnvoll, damit sich Aufrufe nicht in die Quere kommen. Und denken Sie an Robustheit: Fangen Sie m\u00f6gliche <code>unavailable<\/code>-Zust\u00e4nde der Zielger\u00e4te mit einer vorgelagerten <code>condition<\/code> ab, damit ein offline gegangener Lautsprecher nicht den ganzen Ablauf stoppt.<\/p>\n<p>Ein Tipp aus der Praxis: Probieren Sie neue Skripte zuerst in den Entwicklerwerkzeugen unter \u00abAktionen\u00bb aus. Dort k\u00f6nnen Sie das Skript mit Testwerten aufrufen und sehen sofort, ob die Templates korrekt aufgel\u00f6st werden, bevor Sie es in eine Automation einbauen. Wer seine wiederkehrenden Tasten-Aktionen ebenfalls sauber strukturieren will, findet im Beitrag <a href=\"https:\/\/www.coremind.ch\/wordpress\/event-entitaeten-in-ha-tasten-clever-ausloesen\/\">Event-Entit\u00e4ten in HA: Tasten clever ausl\u00f6sen<\/a> den passenden Gegenpart auf der Trigger-Seite.<\/p>\n<p>Wer ein Skript \u00fcber die eigene Installation hinaus teilen m\u00f6chte, wirft einen Blick auf Blueprints: Seit Home Assistant 2026.4 gibt es sie nicht nur f\u00fcr Automationen, sondern auch f\u00fcr die Dom\u00e4nen <code>script<\/code> und <code>template<\/code>. Damit l\u00e4sst sich ein gut gebauter Baustein als Vorlage exportieren und von anderen mit eigenen Werten bef\u00fcllen.<\/p>\n<h2>Fazit<\/h2>\n<p>Skripte sind das vielleicht untersch\u00e4tzteste Werkzeug in Home Assistant. Sie verwandeln kopierte Code-Fragmente in saubere, wartbare Bausteine und halten Ihre Konfiguration schlank. Beginnen Sie klein: Suchen Sie eine Aktionsfolge, die mehrfach vorkommt, giessen Sie sie in ein Skript mit Feldern und ersetzen Sie die Kopien durch schlanke Aufrufe. Ihr Setup wird \u00fcbersichtlicher \u2013 und die n\u00e4chste \u00c4nderung machen Sie nur noch an einer einzigen Stelle.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wer l\u00e4nger mit Home Assistant arbeitet, kennt das Problem: Dieselbe Abfolge von Aktionen taucht in f\u00fcnf Automationen leicht abgewandelt wieder auf. Eine TTS-Ansage hier, eine Benachrichtigung dort, ein Licht-Reset \u00fcberall. Sobald sich etwas \u00e4ndert, muss man jede Kopie einzeln anpassen. Die elegante L\u00f6sung heisst Skript \u2013 eine wiederverwendbare Sequenz, die Sie einmal definieren und mit &#8230; <a title=\"Skripte in HA: wiederverwendbare Bausteine\" class=\"read-more\" href=\"https:\/\/www.coremind.ch\/wordpress\/skripte-in-ha-wiederverwendbare-bausteine\/\" aria-label=\"Mehr Informationen \u00fcber Skripte in HA: wiederverwendbare Bausteine\">Weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-1039","post","type-post","status-publish","format-standard","hentry","category-ha"],"_links":{"self":[{"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/posts\/1039","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/comments?post=1039"}],"version-history":[{"count":1,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/posts\/1039\/revisions"}],"predecessor-version":[{"id":1054,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/posts\/1039\/revisions\/1054"}],"wp:attachment":[{"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/media?parent=1039"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/categories?post=1039"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/tags?post=1039"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}