community italiana di domotica personale
 
Definire switch virtuali per comandare sequenze (script) Home Assistant

Definire switch virtuali per comandare sequenze (script) Home Assistant

Scopi della guida:
  • Innescare delle sequenze script tramite degli switch virtuali definiti tramite il componente “Input Boolean”.
  • Livello di difficoltà: basso
Concetti affrontati:
  • Configurazione software
Componenti software utilizzate:
Prerequisiti:
Dispositivi fisici utilizzati:
GUIDA INDICATA A UTENTI CON ISTALLAZIONE:
Ambienti Home Assistant HassOS-Supervised-Core
NOTE E DISCLAIMER
  • qualsiasi eventuale modifica agli impianti domestici dev'essere progettata e realizzata SOLO da personale qualificato;
  • qualsiasi modifica non prevista attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (i contenuti della presenta pagina hanno infatti puro scopo didattico) e fa decadere garanzia, omologazioni e certificazioni di qualità; dei dispositivi interessati;
  • tutte le tecniche descritte si intendono applicate a software e firmware aggiornati alle ultime versioni disponibili;
  • gli articoli di inDomus sono totalmente indipendenti e non sponsorizzati. Se mai questo cambiasse, verrà segnalato chiaramente sulle pagine oggetto di sponsorizzazione;
  • questa pagina è materialmente scritta e manutenuta da più individui: non ci si aspetti né si pretenda un supporto personale. In caso di difficoltà, chiedere supporto alla community sul nostro forum o sulla nostra chat;
  • se hai bisogno di orientarti, c'è la mappa.
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:

Home Assistant - Input Boolean Telegiornale

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.