Script e scene sono i due strumenti che HA offre per raggruppare azioni riusabili. Sono spesso confusi, ma servono a cose diverse. In questo capitolo vediamo la differenza pratica fra i due, quando usarne uno o l’altro, come si chiamano fra loro, e perché a volte l’errore è usarli quando in realtà bastava un’automazione più chiara.
Le due domande semplici da farsi
Prima delle definizioni tecniche, la scelta si riduce a due domande:
-
“Voglio riportare le cose in un certo stato” → scena.
Esempio: alle 22:00 tutte le luci del salotto al 20% color caldo, tende al 30%, TV spenta. Non ti interessa come ci si arriva, ti interessa lo stato finale. -
“Voglio eseguire una sequenza di azioni” → script.
Esempio: quando dico “buonanotte”, spegni tutte le luci, verifica che le porte siano chiuse, arma l’allarme in modalità “casa”, invia una notifica al mio telefono con il riepilogo.
Se la risposta è “entrambe”, di solito lo script è la scelta giusta, perché uno script può anche chiamare una scena.
Le scene
Una scena è una fotografia dello stato di un gruppo di entità in un dato momento. Salva il valore di ogni entità inclusa (on/off, brightness, temperatura, posizione tenda, ecc.). Quando la attivi, ogni entità torna al valore memorizzato.
Creare una scena
Il modo più veloce è “cattura dallo stato attuale”:
- Metti manualmente il salotto come lo vuoi (luci a certo brightness, tenda in certa posizione, ecc.).
- Impostazioni → Scene → Aggiungi scena → Cattura entità.
- Selezioni le entità che devono far parte della scena, HA legge il loro stato attuale e lo salva.
- Dai un nome (“Salotto, serata rilassante”) e salvi.
Da quel momento hai una scene.salotto_serata_rilassante. Per attivarla: scene.turn_on con target la scena.
Cosa può salvare una scena
Molte cose ma non tutte. Salva stato base + attributi visibili delle entità:
- Luci: on/off + brightness + color + color temp
- Interruttori: on/off
- Tende: posizione
- Termostati: setpoint + hvac mode
- Media player: source, volume (parzialmente)
Non può salvare cose come “avvia scansione robot aspirapolvere” o “manda notifica”: quelle sono azioni, non stati. Per quelle serve uno script.
Scena vs “azione che attiva luci”
La tentazione, arrivando dall’editor automazioni, è di fare la scena “manualmente” nelle azioni: light.turn_on con brightness 50, light.turn_on sull’altra con brightness 30, ecc. Funziona, ma per stati complessi è tanti click e diventa illeggibile. La scena centralizza tutto in un oggetto solo, e se un domani vuoi cambiare “un po’ più luminose”, cambi la scena e tutte le automazioni che la chiamano ne beneficiano.
Gli script
Uno script è una sequenza di azioni che puoi eseguire come se fosse un servizio. La sintassi delle azioni è identica a quella delle automazioni (call_service, delay, wait_template, choose, repeat, ecc.).
Creare uno script
Impostazioni → Script → Aggiungi script. L’editor è praticamente lo stesso delle automazioni, solo che non ha la sezione trigger/condition: uno script viene chiamato da qualcun altro (un’automazione, un pulsante Lovelace, un altro script, un comando vocale), quindi non “scatta da solo”.
Esempio pratico: “Buonanotte”.
sequence:
- service: light.turn_off
target:
area_id:
- salotto
- cucina
- ingresso
- service: cover.close_cover
target:
entity_id: cover.tenda_salotto
- service: alarm_control_panel.alarm_arm_home
target:
entity_id: alarm_control_panel.casa
- service: notify.mobile_app_iphone
data:
message: "Casa messa a dormire. Ci si vede domani."Una volta salvato hai script.buonanotte. Puoi chiamarlo da:
- un’automazione (action →
script.turn_ono direttamenteservice: script.buonanotte) - un pulsante Lovelace (card Button → tap action → call service
script.buonanotte) - un comando vocale Assist (“buonanotte”)
- l’app mobile (dalla schermata degli script)
Perché non fare tutto in un’automazione
La domanda giusta è: quel blocco di azioni serve solo a un’automazione, o è riusabile?
Se serve solo lì (es. “quando arriva una notifica, aggiorna un contatore”), scrivilo direttamente dentro l’automazione. Estrarlo in uno script aggiunge un livello di indirezione senza guadagno.
Se lo stesso blocco serve a più automazioni o a un pulsante Lovelace o a un comando vocale, allora estrai in uno script: cambi la logica in un posto solo.
Parametri (script con “campi”)
Gli script possono accettare parametri come una funzione. Definizione nell’editor sotto “Fields”:
light(entity, richiesto)brightness(number 0-100, default 50)transition(number, default 2)
Nel body dello script usi {{ light }}, {{ brightness }}, ecc. Chi lo chiama passa i valori. Utile per script tipo “accendi la luce X al brightness Y” chiamato da più automazioni diverse.
Come i tre pezzi si combinano nella pratica
Un tipico “flusso serale”:
- Automazione: trigger
sun(30 min dopo il tramonto) + condition (è un giorno feriale) → chiama scriptserata. - Script
serata: → attivascene.salotto_serata+ accende le luci corridoio al 30% + invia notifica. - Scena
salotto_serata: memorizza lo stato desiderato del salotto (luci, tende, TV).
L’automazione decide quando. Lo script decide cosa. La scena decide come stanno le cose.
Se domani cambi orario (“30 min prima del tramonto invece che dopo”) tocchi solo l’automazione. Se cambi routine (“aggiungi profumatore ambiente”) tocchi solo lo script. Se cambi “un po’ più caldo il salotto” tocchi solo la scena.
Quando NON usarli
Script per fare una cosa sola. Se lo script contiene una singola action, meglio non estrarlo. script.accendi_salotto che dentro fa solo light.turn_on: light.salotto è ridondante: chiama direttamente il servizio.
Scene per stati che cambiano nel tempo. Se la scena “serata” richiede brightness “80% se qualcuno è in casa, altrimenti 20%”, la scena non ce la fa (è statica). Serve uno script con choose che a runtime decide.
Script come workaround per non capire le mode. Se stai spezzando un’automazione in tre script perché “così parte solo il primo se il secondo non è finito”, quasi sempre la soluzione era mettere l’automazione in mode: single e basta.
Ricapitolando
- Scena: fotografia di stati, la richiami e le cose tornano lì.
- Script: sequenza di azioni riusabile, con parametri se serve.
- Automazioni decidono quando, script cosa, scene come stanno le cose.
- Estrai in script solo se la logica è riusabile da più chiamanti.
- Le scene sono statiche: per logica condizionale serve uno script.