Home Assistant: Scripts vs. Automationen, Unterschied und Einsatz
Dieser Artikel kann Affiliate-Links enthalten. Wenn du über diese Links einkaufst, erhalten wir möglicherweise eine kleine Provision — ohne Mehrkosten für dich. Das hilft uns, weiterhin kostenlose Inhalte zu erstellen.
Wenn du in Home Assistant Abläufe automatisierst, begegnen dir zwei Werkzeuge: Automationen und Scripts. Auf den ersten Blick sehen sie ähnlich aus, beide führen Aktionen aus. Aber sie haben grundlegend unterschiedliche Aufgaben. Wer den Unterschied versteht, baut saubere, wartbare und fehlerfreie Automationen.
Der Grundunterschied: Trigger vs. Aufruf
Die Faustregel ist einfach:
Raspberry Pi 5 8GB RAM
Leistungsstarker Mini-PC für Home Assistant, die Basis für ein lokales Smart Home.
* Affiliate-Link, wir erhalten eine kleine Provision
- Automation = reagiert automatisch auf einen Trigger (Ereignis, Zustand, Zeit). Sie hat einen Auslöser, optionale Bedingungen und Aktionen. Eine Automation läuft von allein, wenn ihr Trigger feuert.
- Script = eine wiederverwendbare Aktionsfolge, die manuell oder von einer Automation aufgerufen wird. Ein Script hat keinen eigenen Trigger, es wartet darauf, aktiviert zu werden.
Stell dir eine Automation wie einen Sensor mit angeschlossener Maschine vor: Der Sensor (Trigger) startet die Maschine (Aktionen) automatisch. Ein Script ist die Maschine allein, jemand muss sie einschalten, aber du kannst sie an verschiedene Sensoren anschließen.
Synology DiskStation DS423 NAS mit vier Einschüben
Netzwerkspeicher mit vier Laufwerksschächten für Backups und Medien im Heimnetz.
* Affiliate-Link, du zahlst nicht mehr, wir erhalten eine kleine Provision
Automation: Aufbau und Beispiel
Eine Automation besteht aus drei Teilen:
- Trigger: Was löst die Automation aus? (Zustandswechsel, Zeitpunkt, Event, Webhook, MQTT, Template ...)
- Conditions (optional): Unter welchen zusätzlichen Bedingungen soll sie laufen? (Tageszeit, Anwesenheit, Zustand eines anderen Geräts ...)
- Actions: Was soll passieren? (Licht schalten, Nachricht senden, Service aufrufen ...)
Beispiel: Bewegungslicht im Flur
automation:
- alias: "Flur Bewegungslicht"
description: "Licht an bei Bewegung, aus nach 3 Minuten"
trigger:
- platform: state
entity_id: binary_sensor.flur_bewegung
to: "on"
condition:
- condition: numeric_state
entity_id: sensor.flur_helligkeit
below: 50
action:
- service: light.turn_on
target:
entity_id: light.flur
data:
brightness_pct: 80
color_temp_kelvin: 3000
- wait_for_trigger:
- platform: state
entity_id: binary_sensor.flur_bewegung
to: "off"
for: "00:03:00"
- service: light.turn_off
target:
entity_id: light.flur
data:
transition: 5
Diese Automation hat einen klaren Trigger (Bewegung), eine Bedingung (dunkel genug) und Aktionen (Licht an, warten, Licht aus). Sie läuft vollständig automatisch.
Script: Aufbau und Beispiel
Ein Script hat keinen Trigger und keine Conditions. Es besteht nur aus einer Sequenz von Aktionen, optional mit Variablen für Flexibilität.
script:
tuerklingel_routine:
alias: "Tuerklingel-Routine"
description: "Benachrichtigung, Kamerabild, Flutlicht"
mode: single
sequence:
- service: light.turn_on
target:
entity_id: light.eingang_flutlicht
data:
brightness_pct: 100
- service: camera.snapshot
target:
entity_id: camera.haustuer
data:
filename: "/config/www/snapshots/tuerklingel_{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg"
- service: notify.mobile_app_thorstens_iphone
data:
title: "Tuerklingel"
message: "Jemand steht vor der Tuer."
data:
image: "/local/snapshots/tuerklingel_{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg"
- delay: "00:05:00"
- service: light.turn_off
target:
entity_id: light.eingang_flutlicht
Beispiel: Türklingel-Routine
Dieses Script kann jetzt von mehreren Stellen aufgerufen werden: von einer Automation (Türklingel-Sensor), von einem Dashboard-Button, von einem Sprachbefehl oder sogar von einem NFC-Tag. Die Logik ist einmal definiert und wird überall wiederverwendet.
Die vier Script-Modes
Jedes Script hat einen Mode, der festlegt, was passiert, wenn das Script aufgerufen wird, obwohl es bereits läuft:
1. single (Standard)
Das Script läuft nur einmal gleichzeitig. Ein erneuter Aufruf während der Ausführung wird ignoriert und erzeugt eine Warnung im Log. Ideal für Aktionen, die nicht unterbrochen werden dürfen (z. B. Türklingel-Routine).
script:
beispiel_single:
mode: single
sequence:
- service: light.turn_on
target:
entity_id: light.flur
- delay: "00:05:00"
- service: light.turn_off
target:
entity_id: light.flur
2. restart
Ein erneuter Aufruf stoppt die laufende Instanz und startet das Script von vorn. Perfekt für zeitgesteuerte Aktionen, die bei erneutem Trigger zurückgesetzt werden sollen (z. B. Bewegungslicht mit Timer-Reset).
script:
flur_licht_timer:
mode: restart
sequence:
- service: light.turn_on
target:
entity_id: light.flur
- delay: "00:03:00"
- service: light.turn_off
target:
entity_id: light.flur
Jede neue Bewegung startet den 3-Minuten-Timer neu, ohne dass das Licht zwischendurch ausgeht.
3. queued
Erneute Aufrufe werden in eine Warteschlange gestellt und nacheinander abgearbeitet. Nützlich für Aktionen, die sich nicht überschneiden dürfen, aber alle ausgeführt werden sollen (z. B. TTS-Durchsagen).
script:
tts_durchsage:
mode: queued
max: 5
fields:
nachricht:
description: "Text der Durchsage"
sequence:
- service: tts.speak
target:
entity_id: tts.piper
data:
media_player_entity_id: media_player.kueche
message: "{{ nachricht }}"
- delay: "00:00:03"
Mit max: 5 werden maximal 5 Durchsagen in die Warteschlange gestellt. Weitere Aufrufe werden verworfen.
4. parallel
Mehrere Instanzen laufen gleichzeitig. Für unabhängige Aktionen, die sich nicht gegenseitig beeinflussen (z. B. Benachrichtigungen an verschiedene Empfänger).
script:
benachrichtigung_senden:
mode: parallel
max: 10
fields:
titel:
description: "Titel der Nachricht"
text:
description: "Nachrichtentext"
sequence:
- service: notify.mobile_app_thorstens_iphone
data:
title: "{{ titel }}"
message: "{{ text }}"
single (den Standard) für Bewegungslichter. Das führt dazu, dass der Timer nicht zurückgesetzt wird, wenn während der Wartezeit erneut Bewegung erkannt wird, das Licht geht trotz Bewegung aus. Lösung: mode: restart für alle zeitgesteuerten Aktionen, die bei erneutem Trigger neu starten sollen. Mehr zum Debuggen solcher Probleme findest du unter Automationen debuggen: Traces und Logs.Scripts aus Automationen aufrufen
Das wahre Potenzial von Scripts entfaltet sich, wenn du sie aus Automationen heraus aufrufst. Damit trennst du Auslöser (Automation) von Aktion (Script):
automation:
- alias: "Tuerklingel gedrueckt"
trigger:
- platform: state
entity_id: binary_sensor.tuerklingel
to: "on"
action:
- service: script.turn_on
target:
entity_id: script.tuerklingel_routine
- alias: "NFC-Tag Eingang gescannt"
trigger:
- platform: tag
tag_id: "nfc-tag-eingang-123"
action:
- service: script.turn_on
target:
entity_id: script.tuerklingel_routine
Beide Automationen lösen dasselbe Script aus. Wenn du die Türklingel-Routine ändern willst (z. B. einen zweiten Lautsprecher hinzufügen), musst du nur das Script anpassen, nicht beide Automationen.
Variables an Scripts übergeben
Scripts können Variablen (Fields) akzeptieren, was sie noch flexibler
macht:
script:
licht_szene:
alias: "Licht-Szene setzen"
fields:
raum:
description: "Welcher Raum?"
helligkeit:
description: "Helligkeit in Prozent"
farbtemp:
description: "Farbtemperatur in Kelvin"
sequence:
- service: light.turn_on
target:
entity_id: "light.{{ raum }}"
data:
brightness_pct: "{{ helligkeit }}"
color_temp_kelvin: "{{ farbtemp }}"
automation:
- alias: "Abend-Szene Wohnzimmer"
trigger:
- platform: sun
event: sunset
action:
- service: script.licht_szene
data:
raum: "wohnzimmer"
helligkeit: 60
farbtemp: 2700
Blueprints: Automationen teilen und importieren
Ein Blueprint ist eine Vorlage für eine Automation oder ein Script. Du definierst die Logik einmal und kannst sie mehrfach mit unterschiedlichen Parametern nutzen. Blueprints sind besonders nützlich, wenn du die gleiche Automation in verschiedenen Räumen verwenden willst.
Aus dem Bewegungslicht-Beispiel wird ein
Blueprint:
blueprint:
name: "Bewegungslicht mit Timer"
description: "Licht bei Bewegung an, nach X Minuten aus"
domain: automation
input:
bewegungsmelder:
name: "Bewegungsmelder"
selector:
entity:
domain: binary_sensor
licht:
name: "Licht"
selector:
entity:
domain: light
timer_minuten:
name: "Abschaltzeit (Minuten)"
default: 3
selector:
number:
min: 1
max: 30
trigger:
- platform: state
entity_id: !input bewegungsmelder
to: "on"
action:
- service: light.turn_on
target:
entity_id: !input licht
- wait_for_trigger:
- platform: state
entity_id: !input bewegungsmelder
to: "off"
for:
minutes: !input timer_minuten
- service: light.turn_off
target:
entity_id: !input licht
Diesen Blueprint kannst du jetzt für jeden Raum einzeln einsetzen, mit unterschiedlichen Bewegungsmeldern, Lichtern und Abschaltzeiten. Mehr dazu im Ratgeber Home Assistant Blueprints: Automationen teilen und importieren.
Veröffentlicht durch die SmartHomePraxis-Redaktion. Veröffentlicht am 16. August 2026. Aktualisiert am 12. September 2026.
Verantwortlich i.S.d. § 18 MStV: siehe Impressum.
Fehler entdeckt oder ergänzende Erfahrung? korrektur@smarthomepraxis.de
Smart-Home-Tipps direkt ins Postfach
Neue Anleitungen, Vergleiche und Praxis-Tipps – kein Spam, jederzeit abbestellbar.
🎁 Gratis dazu: Smart-Home-Starter-Guide (PDF)
Das könnte dich auch interessieren
Docker auf dem NAS für Einsteiger: Was du wissen musst
Docker ermöglicht es, hunderte Apps auf deinem NAS zu installieren – vom Werbeblocker bis zum Smart-Home-Server. Der Einstieg.
Bewegungsgesteuerte Beleuchtung einrichten
Licht, das sich automatisch einschaltet, wenn du einen Raum betrittst — und nach einer Weile wieder ausgeht. So richtest du eine bewegungsgesteuerte Beleuchtung mit PIR- oder mmWave-Sensoren ein.
Szenen vs. Routinen: Was ist der Unterschied?
Szenen und Routinen klingen ähnlich, funktionieren aber grundlegend anders. Dieser Erklärer zeigt dir den Unterschied und wann du welches Konzept nutzt.