{"id":1540,"date":"2026-08-05T13:00:46","date_gmt":"2026-08-05T11:00:46","guid":{"rendered":"https:\/\/www.coremind.ch\/wordpress\/?p=1540"},"modified":"2026-08-05T13:00:46","modified_gmt":"2026-08-05T11:00:46","slug":"eigene-assist-saetze-intent_script-clever-nutzen","status":"publish","type":"post","link":"https:\/\/www.coremind.ch\/wordpress\/eigene-assist-saetze-intent_script-clever-nutzen\/","title":{"rendered":"Eigene Assist-S\u00e4tze: intent_script clever nutzen"},"content":{"rendered":"<p>Assist versteht von Haus aus schon viel \u2013 Licht schalten, Temperatur abfragen, Timer stellen. Doch irgendwann will man dem Sprachassistenten etwas beibringen, das kein Standard-Intent abdeckt: \u00abWie l\u00e4uft die W\u00e4rmepumpe?\u00bb oder \u00abAktiviere den Filmabend\u00bb. Genau daf\u00fcr gibt es in Home Assistant zwei Bausteine, die zusammen ein m\u00e4chtiges Duo bilden: eigene S\u00e4tze (custom sentences) und Intent-Skripte (<code>intent_script<\/code>). Damit definierst du selbst, welche Formulierung welche Aktion ausl\u00f6st \u2013 und welche Antwort der Assistent spricht.<\/p>\n<h2>Das Prinzip: Satz trifft Skript<\/h2>\n<p>Die Aufgabenteilung ist simpel. Der eigene Satz ist der Ausl\u00f6ser \u2013 vergleichbar mit dem Trigger einer Automation. Er f\u00e4ngt gesprochene oder getippte Formulierungen ab und leitet einen benannten Intent ein. Das Intent-Skript ist die Ausf\u00fchrung: Es ruft Aktionen auf und formuliert die gesprochene Antwort. Zwischen beiden k\u00f6nnen Parameter (sogenannte Slots) \u00fcbergeben werden, etwa ein Raumname oder eine Zahl.<\/p>\n<p>Eigene S\u00e4tze legst du in YAML-Dateien im Ordner <code>config\/custom_sentences\/<sprache>\/<\/code> ab \u2013 f\u00fcr Deutsch also <code>config\/custom_sentences\/de\/<\/code>. Die Intent-Skripte selbst kommen in die <code>configuration.yaml<\/code>. Nach einem Neustart kennt Assist die neuen Befehle.<\/p>\n<h2>Schritt 1: Den eigenen Satz definieren<\/h2>\n<p>Ein Beispiel: Du willst den Zustand deiner W\u00e4rmepumpe abfragen. Lege dazu die Datei <code>config\/custom_sentences\/de\/waermepumpe.yaml<\/code> an:<\/p>\n<pre><code>\nlanguage: \"de\"\nintents:\n  WaermepumpeStatus:\n    data:\n      - sentences:\n          - \"wie l\u00e4uft die w\u00e4rmepumpe\"\n          - \"status w\u00e4rmepumpe\"\n          - \"wie geht es der heizung\"\n<\/code><\/pre>\n<p>Der Intent heisst hier <code>WaermepumpeStatus<\/code>. Alle aufgef\u00fchrten S\u00e4tze l\u00f6sen ihn aus. Kleinschreibung und Varianten helfen, damit unterschiedliche Formulierungen erkannt werden.<\/p>\n<h2>Schritt 2: Das Intent-Skript hinterlegen<\/h2>\n<p>In der <code>configuration.yaml<\/code> beschreibst du nun, was passieren soll und was Assist antwortet. Du kannst dabei direkt auf Sensorwerte zugreifen \u2013 etwa den Taktz\u00e4hler des Verdichters:<\/p>\n<pre><code>\nintent_script:\n  WaermepumpeStatus:\n    speech:\n      text: >\n        Die W\u00e4rmepumpe hatte heute\n        {{ states('counter.cta_verdichter_starts_heute') }} Verdichterstarts.\n        Der Heizbetrieb ist aktuell\n        {{ 'aktiv' if is_state('binary_sensor.cta_heizbetrieb_aktiv','on') else 'aus' }}.\n<\/code><\/pre>\n<p>Assist liest jetzt auf Zuruf den aktuellen Stand vor \u2013 ganz ohne Blick aufs Dashboard. Der <code>speech<\/code>-Block nutzt normale Jinja-Templates, du kannst also beliebige Zust\u00e4nde kombinieren und formatieren.<\/p>\n<h2>Schritt 3: Aktionen ausl\u00f6sen<\/h2>\n<p>Ein Intent-Skript kann nicht nur reden, sondern auch handeln. Erg\u00e4nze einen <code>action<\/code>-Block, um zum Beispiel eine Szene zu starten:<\/p>\n<pre><code>\nintent_script:\n  Filmabend:\n    action:\n      - service: scene.turn_on\n        target:\n          entity_id: scene.filmabend\n    speech:\n      text: \"Alles klar, der Filmabend ist bereit.\"\n<\/code><\/pre>\n<p>Der passende Satz dazu (<code>config\/custom_sentences\/de\/filmabend.yaml<\/code>) enth\u00e4lt etwa \u00abaktiviere den filmabend\u00bb oder \u00abstarte kinomodus\u00bb. So wird aus einer gesprochenen Anweisung eine komplette Lichtszene samt R\u00fcckmeldung.<\/p>\n<h2>Slots f\u00fcr flexible Befehle<\/h2>\n<p>Richtig elegant wird es mit Platzhaltern. Statt f\u00fcr jeden Raum einen eigenen Intent zu bauen, f\u00e4ngst du den Raumnamen als Slot ab:<\/p>\n<pre><code>\nlanguage: \"de\"\nintents:\n  RaumTemperatur:\n    data:\n      - sentences:\n          - \"wie warm ist es im {raum}\"\n      lists:\n        raum:\n          values:\n            - \"b\u00fcro\"\n            - \"dachzimmer\"\n<\/code><\/pre>\n<p>Im Intent-Skript greifst du dann \u00fcber <code>{{ raum }}<\/code> auf den erkannten Wert zu und w\u00e4hlst den passenden Sensor aus. Ein einziger Satz deckt so mehrere R\u00e4ume ab.<\/p>\n<h2>Testen und Feinschliff<\/h2>\n<p>Bevor du dich \u00fcber nicht erkannte Befehle \u00e4rgerst, hilft der Assist-Dialog in den Entwicklerwerkzeugen. Dort tippst du deine S\u00e4tze ein und siehst sofort, ob der richtige Intent anspringt und welche Slots gef\u00fcllt werden. H\u00e4ufige Stolpersteine sind Tippfehler im Dateipfad, eine fehlende Sprachangabe oder Umlaute, die im gesprochenen Text anders ankommen als erwartet. Es lohnt sich, pro Intent mehrere Formulierungsvarianten zu hinterlegen \u2013 Menschen fragen selten zweimal mit exakt denselben Worten. Wer viele eigene S\u00e4tze sammelt, sortiert sie am besten thematisch in mehrere YAML-Dateien, das h\u00e4lt die Konfiguration \u00fcbersichtlich und wartbar.<\/p>\n<p>Wer seine Sprachsteuerung ganz ohne Cloud betreiben will, findet die Grundlagen im Beitrag <a href=\"https:\/\/www.coremind.ch\/wordpress\/ha-voice-pe-lokale-sprachsteuerung-ohne-cloud\/\">HA Voice PE: Lokale Sprachsteuerung ohne Cloud<\/a> \u2013 die eigenen S\u00e4tze aus diesem Artikel funktionieren dort genauso wie mit einem Cloud-basierten Assistenten.<\/p>\n<h2>Fazit<\/h2>\n<p>Mit eigenen S\u00e4tzen und <code>intent_script<\/code> machst du Assist zu einem echten Sprachrohr deines Smart Homes: individuelle Statusabfragen, komplexe Szenen und flexible Raumbefehle \u2013 alles in deiner eigenen Sprache formuliert. Beginne klein mit einer einzigen Statusabfrage, teste sie im Assist-Dialog und erweitere Schritt f\u00fcr Schritt. Achte darauf, die S\u00e4tze nach jeder \u00c4nderung mit einem Neustart oder dem Neuladen der YAML-Konfiguration zu aktivieren. Schon nach wenigen Minuten sprichst du mit deinem Haus in genau den Worten, die dir am nat\u00fcrlichsten von der Zunge gehen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Assist versteht von Haus aus schon viel \u2013 Licht schalten, Temperatur abfragen, Timer stellen. Doch irgendwann will man dem Sprachassistenten etwas beibringen, das kein Standard-Intent abdeckt: \u00abWie l\u00e4uft die W\u00e4rmepumpe?\u00bb oder \u00abAktiviere den Filmabend\u00bb. Genau daf\u00fcr gibt es in Home Assistant zwei Bausteine, die zusammen ein m\u00e4chtiges Duo bilden: eigene S\u00e4tze (custom sentences) und Intent-Skripte &#8230; <a title=\"Eigene Assist-S\u00e4tze: intent_script clever nutzen\" class=\"read-more\" href=\"https:\/\/www.coremind.ch\/wordpress\/eigene-assist-saetze-intent_script-clever-nutzen\/\" aria-label=\"Mehr Informationen \u00fcber Eigene Assist-S\u00e4tze: intent_script clever nutzen\">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-1540","post","type-post","status-publish","format-standard","hentry","category-ha"],"_links":{"self":[{"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/posts\/1540","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=1540"}],"version-history":[{"count":1,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/posts\/1540\/revisions"}],"predecessor-version":[{"id":1591,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/posts\/1540\/revisions\/1591"}],"wp:attachment":[{"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/media?parent=1540"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/categories?post=1540"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/tags?post=1540"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}