Definire switch virtuali per comandare sequenze (script) Home Assistant

5 minuti di lettura
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 maggiormente indicatA per:

Tutti gli ambienti

Note e disclaimer
  • qualsiasi modifica all'impianto elettrico dev'essere effettuata da personale qualificato;
  • qualsiasi modifica attuata in proprio è a propria responsabilità personale nonché a proprio rischio e pericolo (la presente guida ha puro scopo didattico);
  • qualsiasi modifica attuata in proprio a un dispositivo ne fa decadere la garanzia.
Revisione guida: 1.0

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 servizi 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 potrebbe essere definito come segue:

script:
  telegiornale_on_sequence:
    alias: "Telegiornale"
    sequence:
      - service: media_player.turn_on
        entity_id: media_player.tv
      - service: media_player.turn_on
        entity_id: media_player.sky
      - delay: 0:00:03
      - service: broadlink.send #Sky tasto 1
        data:
          host: ip_del_broadlink
          packet:
            - "codice_infrarosso_relativo_al_tasto_1"
      - service: broadlink.send #Sky tasto 0
        data:
          host: ip_del_broadlink
          packet:
            - "codice_infrarosso_relativo_al_tasto_0"
      - service: broadlink.send #Sky tasto 0
        data:
          host: ip_del_broadlink
          packet:
            - "codice_infrarosso_relativo_al_tasto_0"
      - delay: 0:00:2
      - service: 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 del servizio “script.turn_on“,  il quale permette per l’appunto l’esecuzione della sequenza di uno script (indicato in fase di evocazione del servizio stesso).

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 uno o più servizi 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:
    service: 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:
      - service: media_player.turn_off
        entity_id: media_player.tv
      - service: 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:
    service: script.turn_on
    data_template:
      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:
    service: 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).


Home Assistant Official LogoATTENZIONE: ricorda che sul nostro community FORUM c'è una sezione ad hoc dedica a Home Assistant, per qualsiasi dubbio, domanda, informazione nel merito specifico di queste componenti.


Please comment below