Scopi della guida:
Concetti affrontati:
|
Componenti software utilizzate:
Prerequisiti:
Dispositivi fisici utilizzati:
|
GUIDA INDICATA A UTENTI CON ISTALLAZIONE: |
|
NOTE E DISCLAIMER
|
|
Revisione guida: 1.2 |
Abstract
Spesso e volentieri in domotica capita che esistano delle sequenze di azioni che vengano in realtà considerate, dall’utente, come un unicum; un esempio calzante potrebbe essere quello dell’accendere il telegiornale: si accende la TV, magari il box satellitare, si sceglie la fonte (per esempio HDMI1), si sceglie il canale e voilà, il telegiornale è servito.
Sempre rimanendo nell’esempio un ottimo risultato, per l’utente, sarebbe di per sé quello di aver integrato presso Home Assistant la propria TV e magari il box satellitare, magari utilizzando una tecnica efficace come quella degli infrarossi; resta la difficoltà di definire una sequenza che, a partire dalle entità derivanti dalle integrazioni di cui sopra, permetta di ottenere lo scopo di cui sopra.
A supporto di questa necessità interviene il componente “Script” di Home Assistant che, come sappiamo, permette di definire in configurazione proprio delle sequenze le quali, quando innescate, utilizzano azioni ed entità per eseguire, per l’appunto, delle azioni in sequenza.
Tali entità di tipo “Script” possono anche essere esposte agli smart speaker al fine di essere controllate a voce; nell’esempio di cui sopra un’ipotetica sequenza chiamata script.telegiornale potrebbe facilmente essere innescata chiedendo ad Alexa / Google Assistant / Siri di “accendere il telegiornale“.
Ma come è possibile, altrimenti, innescare tali scene dal frontend di Home Assistant?
Questa guida illustrerà come definire degli “switch virtuali” utilizzando il componente “Input Boolean” allo scopo di innescare, appunto, una o più sequenze.
Assunti
Per la presente guida assumeremo la presenza di uno script chiamato “script.telegiornale_on_ir_sequence” il quale provveda ad accendere la TV (“media_player.tv“), il decoder Sky (“media_player.sky“), provveda a selezionare il canale 100 (corrispondente Sky TG 24) inviando i codici infrarossi relativi ai tasti del telecomando e infine selezionare la sorgente HDMI1 della TV (sul quale presumibilmente sia collegato il box Sky).
Giusto per cultura, lo script (che utilizza telecomandi virtuali) potrebbe essere definito come segue:
script: telegiornale_on_sequence: alias: "Telegiornale" sequence: - action: media_player.turn_on entity_id: media_player.tv - action: media_player.turn_on entity_id: media_player.sky - delay: 0:00:03 - action: remote.send_command #Sky tasto 1 data: entity_id: remote.NOME_DEL_BROADLINK device: Decoder_SKY command: Tasto_1 - action: remote.send_command #Sky tasto 0 data: entity_id: remote.NOME_DEL_BROADLINK device: Decoder_SKY command: Tasto_0 - action: remote.send_command #Sky tasto 0 data: entity_id: remote.NOME_DEL_BROADLINK device: Decoder_SKY command: Tasto_0 - delay: 0:00:2 - action: media_player.select_source data: entity_id: media_player.tv source: 'HDMI 1'
L’entità script.telegiornale_on_ir_sequence – in quanto di tipo “Script” – prevede l’uso dell’azione “script.turn_on“, la quale permette per l’appunto l’esecuzione della sequenza di uno script (indicato in fase di evocazione dell’azione stessa).
Switch&Automazione
A questo punto tutto ciò che ci serve sono due cose: uno switch virtuale e un’automazione la quale, quando viene azionato tale switch, esegua la sequenza di uno script.
N.b. Questa guida illustra sì come innescare uno script tramite uno switch virtuale, ma è chiaro come la tecnica illustrata possa essere liberamente personalizzata per innescare una o più azioni di diversa natura disponibili su Home Assistant. |
SWITCH
Definire uno switch virtuale con Home Assistant è davvero un gioco da ragazzi: è infatti sufficiente utilizzare con grande semplicità il componente “Input Boolean”, il quale è concepito espressamente per questo scopo.
Definiremo quindi in configurazione un elemento di questo tipo:
input_boolean: telegiornale: name: Accensione telegiornale initial: off icon: mdi:television
Dopo il riavvio di Home Assistant, tale configurazione genererà un’entità chiamata “input_boolean.telegiornale“, la quale verrà rappresentata presso il frontend come segue:
AUTOMAZIONE
Dopo aver creato lo switch la sua attivazione non causerà alcun evento, a parte quello di cambio di stato dell’entità di Home Assistant non raccolto, però, da nessuno.
È proprio questo cambio di stato che andremo ad intercettare: l’automazione che ci serve si innescherà proprio al cambio di stato da “off” a “on” dell’entità “input_boolean.telegiornale“:
automation:
- alias: "Telegiornale"
trigger:
platform: state
entity_id: input_boolean.telegiornale
to: 'on'
condition: []
action:
action: script.turn_on
entity_id: script.telegiornale_on_sequence
Una volta eseguito il riavvio di Home Assistant, l’attivazione dello swtich virtuale causerà dunque l’attivazione della sequenza indicata nellos script, ottenendo lo scopo.
Dobbiamo però perfezionare il tutto: cosa deve accadere quando lo switch viene disattivato, ovvero passa dallo stato “on” allo stato “off”. In primis, scriviamo un’altra sequenza (un altro script) che effettui delle contro-azioni in sequenza come lo spegnimento della tv e del box Sky:
script: telegiornale_off_sequence: alias: "Telegiornale" sequence: - action: media_player.turn_off entity_id: media_player.tv - action: media_player.turn_off entity_id: media_player.sky
questa configurazione genererà un’entità di tipo “Script” chiamata script.telegiornale_off_sequence.
Ora modifichiamo la prima automazione in questo modo:
automation: - alias: "Telegiornale" trigger: platform: state entity_id: input_boolean.telegiornale condition: [] action: action: script.turn_on data: entity_id: > {% if trigger.to_state.state == 'on' %} script.telegiornale_on_sequence {% elif trigger.to_state.state == 'off' %} script.telegiornale_off_sequence {% endif %}
Tale automazione viene innescata da qualsiasi cambio di stato di input_boolean.telegiornale (quindi sia da “on” a “off” che viceversa) e, nel blocco “action”, decide cosa eseguire, se la sequenza di accensione o di spegnimento.
Un’ulteriore perfezionamento è quello che permette di gestire l’auto-off dello switch virtuale in caso prima sia stato attivato manualmente, ma poi la tv, per esempio, sia stata spenta manualmente. In tale caso lo switch dovrebbe appunto tornare automaticamente in “off”, e ora vedremo come fare. Definiremo infatti un’automazione che venga innescata al cambiare dello stato dell’entità “media_player.tv” da “on” a “off”.
N.b. Ovviamente questa automazione funziona solo se l’entità “Media Player” che rappresenta la TV sia in grado di censire tale stato operativo, il che è dipendente dalla modalità di integrazione della stessa. |
Definiamo quindi un’automazione siffatta:
automation: - alias: "TV OFF" trigger: platform: state entity_id: media_player.tv to: 'off' condition: condition: state entity_id: input_boolean.telegiornale state: 'on' action: action: input_boolean.turn_off entity_id: input_boolean.telegiornale
Conclusioni
Come anticipato, la presente guida è solo una traccia per far comprendere e familiarizzare con un concetto molto specifico, ovvero la possibilità di innescare sequenze tramite switch virtuali. Il campo di applicazione è ampissimo: tale approccio può davvero essere utilizzato in molti scenari differenti.
Un altro esempio potrebbe essere quello della domotizzazione di un termoventilatore da bagno tramite infrarossi: questa tecnica può aiutare ad astrarre il termoventilatore domotizzato in un’unica entità acceso/spento, quando in realtà la sua attivazione e spegnimento corrisponderanno a più sequenze molto specifiche (ovviamente variabili da modello a modello e da scenario a scenario).
⚠️ Se di Home Assistant ne sai poco ma sei interessato a capirne di più, ti suggeriamo di partire da qui. |
Questa pagina è redatta, manutenuta e aggiornata dallo staff di inDomus, un gruppo di persone molto diverse tra loro che trovi, per domande e supporto, sul forum e sulla chat del sito. Alcuni link sono taggati in qualità di affiliati Amazon e riceviamo un compenso dagli acquisti idonei, utile al sostenimento del sito, ma le nostre recensioni sono tutte indipendenti e non sponsorizzate. Se ti sei perso, a tua disposizione c'è la mappa. |