Le Automazioni con Home Assistant: concetti di base e primi esempi

Grazie al successo ottenuto dagli articoli pubblicati a tema Home Assistant, io, i partecipanti dello #SmartHome Channel e Maurizio abbiamo deciso di continuare a pubblicare con una certa regolarità. Questa volta affrontiamo un discorso un po’ più teorico ma indispensabile per comprendere le potenzialità di questo sistema: seguiranno altri how-to e packages decisamente più applicativi.

Introduzione

Una delle caratteristiche più interessanti di tutta l’home automation è la possibilità di combinare e far interagire tra loro le informazioni che arrivano dai nostri dispositivi smart casalinghi. Solitamente, infatti, le fasi a cui va incontro chi comincia ad installare e configurare un sistema come Home Assistant sono:

  1. Aggiunta di tutti i componenti
  2. Riordino in gruppi o schede dei componenti
  3. Utilizzo delle informazioni ottenute per la scrittura di automazioni

Lo scopo principale di Home Assistant (almeno nella visione iniziale dei suoi creatori) è quello di permettere alla casa di “aiutarci” nelle nostre abitudini e necessità, pertanto l’ultimo punto citato sopra è sicuramente fondamentale. Dal momento che la scrittura delle automazioni riveste una grande importanza, in HA è possibile implementarle in molti modi diversi. Per iniziare è bene introdurre tre concetti di base:

  • Il trigger è un evento che deve accadere affinché si “inneschi” e venga eseguita l’automazione
  • Una condition è un test che il sistema esegue una volta avviata l’automazione e che la interrompe se non è verificato
  • L’action è l’effettiva sequenza di istruzioni da eseguire

Come esempio immaginiamo il caso in cui io voglia scrivere un’automazione che accende la luce del portico quando arrivo a casa, ma solo se il sole è tramontato. Il suo schema logico sarà il seguente:

- alias: "Ritorno a Casa"
  trigger:                 # quando Alberto arriva a casa
  condition:               # se il sole è tramontato
  action:                  # accendi la luce del portico

Vista dal lato di Home Assistant, il sistema dovrà in qualche modo avere l’informazione del mio arrivo a casa, poi verificare che il sole sia tramontato e, in caso positivo, provvedere ad accendere la luce del portico. Come abbiamo già spiegato nel post relativo all’installazione di HA, il sistema conosce la situazione attuale delle nostre entities sotto forma di states ed attributes (stati e attributi). Gli stati sono fondamentali perché:

  • il loro cambiamento può essere utilizzato come trigger
  • il loro valore può essere utilizzato come condition

Rimane ancora da dire che trigger ed action sono obbligatori nella scrittura di un’automazione, mentre la condition è facoltativa.

Trigger: il grilletto che spara l’automazione

Home Assistant prevede numerose tipologie di trigger, ma per scrivere l’automazione descritta sopra “quando Alberto arriva a casa”, sfrutteremo uno di quelli più comuni e versatili, lo State Trigger.

trigger:                      
  platform: state                      # Come detto sopra è uno State Trigger
  entity_id: device_tracker.alberto    # il dispositivo di localizzazione
  to: 'home'                           # "stato" che assume il dispositivo

L’automazione si innescherà quindi nel momento in cui lo stato di device_tracker.alberto diventerà “home”, e cioè quando arriverò nella zona definita come casa nel configuration.yaml in base a latitudine e longitudine. Per realizzare un entity device_tracker di base seguite la nostra guida. Come buona regola vi consiglio di andare a spulciarvi la documentazione sul sito di HA ogni volta che scrivete un’automazione, perché ogni trigger o condition ha caratteristiche proprie che lo rendono più o meno adatto al tipo di automazione che dovete scrivere. Con il tempo imparerete a scegliere al volo il migliore, fino a lanciarvi in complesse scritture con Template Trigger multipli!

Condition: fallo solo e soltanto se…

Proseguendo nella scrittura incontriamo la condition “se il sole è tramontato”. Come per i trigger ne esistono di diversi tipi, e se ne possono anche concatenare mediante l’uso di connettivi logici AND e OR (se vi dovessero servire trovate qui un esempio). Per le nostre attuali necessità possiamo sfruttare la semplicissima Sun Condition, creata ad-hoc per questo tipo di esigenze.

condition:
  condition: sun
  after: sunset

Come dicevamo in precedenza, la condition è un vero e proprio test e permette l’esecuzione dell’automazione solo se risulta verificata. In questo caso al cambiamento di stato del device_tracker in ‘home’ viene controllato che il sole sia tramontato. Se la risposta è positiva continua l’esecuzione nella fase action, altrimenti si interrompe.

Action: il vivo dell’automazione

L’action contiene l’insieme di operazioni che vogliamo eseguire quando è scattato il trigger e la condition risulta vera. In sostanza è qui che si trova il contenuto dell’automazione ed è ciò che HA eseguirà al nostro posto riga per riga, nell’ordine in cui il codice è stato scritto. L’operazione più frequentemente eseguita è sicuramente la “chiamata” di un servizio.

Possiamo immaginare i servizi come delle istruzioni pre-compilate che ci permettono di interagire con le nostre entities. Rapido esempio chiarificatore: il servizio light.turn_on ci permette di accendere una luce, e light.turn_off di spegnerla. Possiamo osservare i servizi disponibili nella pagina Servizi sotto Strumenti per Sviluppatori o nelle pagine dei singoli componenti sul sito di Home Assistant (lights per esempio).

Qui sopra vediamo anche, a destra, l’elenco dei parametri disponibili con cui possiamo “arricchire” la nostra chiamata del servizio light.turn_on. Possiamo per esempio decidere di accendere la luce al 50% della sua luminosità (brightness_pct: 50) e con una temperatura colore calda (kelvin: 2700), chiaramente se le funzionalità in questione sono supportate dalla nostra luce smart.

Ecco dunque cosa potremmo scrivere nell’action:

action:
  service: light.turn_on
  data:                          # dati che passiamo al servizio per funzionare
    entity_id: light.portico     # nome della luce
    brightness_pct: 50           # luminosità percentuale, compare nell'immagine sopra
    kelvin: 2700                 # temperatura luce in K, compare nell'immagine sopra

Essendo un elenco di azioni eseguite in ordine, potremmo decidere di aspettare 20 secondi dopo aver acceso la luce del portico e accendere in seguito anche la luce della cucina. Il codice diventerebbe:

action:
  - service: light.turn_on       # sono più elementi, quindi inserisco il trattino 
    data:                          
      entity_id: light.portico    
      brightness_pct: 50        
      kelvin: 2700
  - delay: '00:00:20'            # Aspetta 20 sec prima di continuare l'esecuzione
  - service: light.turn_on
    data:                          
      entity_id: light.cucina

Vi ricordo che la formattazione del codice è fondamentale per HA. Oltre ai due spazi obbligatori per l’indentazione, e fondamentali per non incorrere in errori di sintassi, notate come il passaggio da una a più azioni abbia modificato la struttura dell’automazione, introducendo l’uso dei trattini “-” per separare le singole attività.

La nostra prima automazione

Mettiamo insieme i vari pezzi realizzati finora (escludendo la variante con doppia accensione di luce) e vediamo come appare nell’insieme un’automazione completa, la quale inizia con la riga alias: in cui se ne definisce il cosiddetto friendly name.

# All'interno di configuration.yaml
automation:
  - alias: "Ritorno a Casa"      # Il nome della nostra automazione!
    trigger:
      platform: state
      entity_id: device_tracker.alberto
      to: 'home'
    condition:
      condition: sun
      after: sunset
    action:
      service: light.turn_on
      data:
        entity_id: light.portico
        brightness_pct: 50
        kelvin: 2700

Ogni volta che salvate o modificate un’automazione, ricordate di controllare la configurazione (come spiegato nel post sull’installazione) e poi ricaricatele tutte quante, da Impostazioni / Generali / Ricarica Automazioni (o se vi sentite più coraggiosi “chiamate” il servizio automation.reload, che è esattamente la stessa cosa).

Ora siete iniziati all’arte della scrittura delle automazioni

Vi consiglio di cominciare scrivendone qualcuna, magari sbirciando le nostre repositories su GitHub per farvi un’idea di quello che si può fare: Alberto, Davide, Andrea e Andrea.

Autore:
Alberto Zamboni (@albyzambo)

Revisore:
Davide (@daxda)
Maurizio Natali (@simplemal)

SmartHome Channel

Special Team - I SaggiUtenti del canale #SmartHome sul nostro Slack uniti per creare guide e recensioni dedicate all'automazione. Partecipa anche tu entrando nel gruppo effettuando una donazione dal SaggioSupporto o discutendo con noi nel Canale Telegram SmartHome Italia