community italiana di domotica personale
 
Utilizzare gli eventi di calendario “locale” (e non) in automazioni e script della domotica Home Assistant

Utilizzare gli eventi di calendario “locale” (e non) in automazioni e script della domotica Home Assistant

Home Assistant LogoA partire da fine 2022 Home Assistant, il più versatile e potente HUB per la domotica personale gratuito e Open Source (leggi qui per scoprire cosa sia, se non lo sai), è stata aggiunta una nuova, potente arma a quelle già (tante) disponibili: la piattaforma “Calendario locale”, figlia (come altre) del componente “Calendario”.

Parliamo di un elemento con il quale già moltissimi familiarizzano quotidianamente su smartphone, tablet, computer e applicativi di ogni genere: il concetto di “calendario” ha ormai sostituito totalente il concetto di “agenda cartacea”, consentendoci di gestire digitalmente tutti i nostri appuntamenti, personali o condivisi, lavorativi come familiari.

Apparentemente, la possibilità di definire/acquisire degli eventi calendaro all’interno del proprio HUB potrebbe non sembrare, di primo acchitto, particolarmente utile. Invece – sia che si tratti di eventi locali oppure ereditati dal cloud (eg. da Google Calendar) – si tratta di strumenti estremamente utili quando utilizzati come leve per gestire in modo intelligente le proprie automazioni e i propri script.

N.b. In questa scheda assumeremo che l’utente abbia ben chiari i concetti legati al funzionamento di automazioni e script di Home Assistant. Diversamente, potrebbe risultare ostico capire di cosa si parli e quale sia il valore di quanto descritto.

Da dove partire

Per sfruttare le funzionalità che descriveremo è innanzitutto necessario dotarsi di una (o più) entità di tipo “Calendario”. Per farlo è necessario attivare una o più piattaforme figlie del componente; per gli esempi che porteremo spiegheremo come implementare “Calendario Locale“, per quanto tali esempi siano analoghi e adattabili anche alle entità derivanti dall’uso delle altre piattaforme. Pur sempre di entità chiamate “calendar.*” parleremo.

Istanziare un calendario locale

Sempre che non si usino altre piattaforme, vediamo come istanziare un calendario locale basato sull’omonimo componente. In pratica è sufficiente recarsi alla voce “Impostazioni” > “Dispositivi e servizi” e cliccare sul “+” in basso a destra.

Effettuare la ricerca cercando “Local Calendar“:

Home Assistant - Calendario Locale - 1

Una volta cliccato, andrà inserito il nome del calendario che si andrà a creare (noi per gli esempi che seguiranno useremo “local“). Il nome impostato si rifletterà sul nome dell’entità che verrà creata (eg. calendar.local):

Home Assistant - Calendario Locale - 2

Una volta completato il percorso di configurazione sulla barra destra apparirà la voce “Calendario”, il quale permetterà di consultare nonché di aggiungere eventi.

Anatomia dell’entità

Prima di spiegare come utilizzare al meglio questo tipo di elementi, analizziamone l’anatomia.

Innanzitutto creiamo prima di tutto un evento sul nostro calendario. Per farlo è necessario recarsi alla voce di menu “Calendario” (barra di sinistra dell’interfaccia Dashboard di Home Assistant) e cliccare su “Aggiungi evento”:

Home Assistant - Calendario Locale - Aggiungi evento
la finestra di dialogo per l’aggiunta di un evento.

In caso si utilizzino, invece, degli eventi calendari esterni (come per esempio “Google Calendar“), va da sé che gli eventi vadano aggiunti e/o modificati in quell’ambiente, cosa che di conseguenza si proietterà presso l’entità su Home Assistant.


Ora, recandosi presso l’elenco delle entità (“Strumenti per gli sviluppatori” > “Stati“) e selezionando l’entità calendar.* corrispondente (nel nostro caso chiamata calendar.local), si potrà apprezzare la sua modellazione.

Home Assistant - Calendario Locale - Anatomia entità
uno stato esemplificativo.

Innanzitutto, parliamo dello stato, il quale – binario – assume valore ON durante il presentarsi di un evento e OFF quando a calendario non risulta nulla. Se per esempio imposto un evento dalle 8:00 alle 9:00 del mattino, alle 7:58 l’entità calendario risulterà OFF, mentre due minuti dopo diventerà ON, per restarci un’ora.

Negli attributi, invece, troviamo i dettagli dell’evento: in corso, se lo stato dell’entità è ON, quello seguente in ordine di tempo in caso sia OFF. Gli attributi non sono valorizzati se invece all’orizzonte non c’è alcun evento.

Tutti questi elementi ci tornano utili non solo per l’eventuale consultazione ma anche e sopratutto come leve di gestione di automazione e script.

Automazioni e script

Le entità di tipo “Calendario” sono particolarmente utili per gestire le eccezioni, più che innescare automazioni. Le automazioni per lo più si avviano tramite diversi tipi di trigger, anche legati al “fattore tempo“, ma comunque nessuno vieta di usare anche i calendari. 

Come trigger

Ipotizziamo di avere integrato sull’HUB delle luci del giardino (light.giardino), le quali vogliamo si accendano alle 20 e si spengano all’una di notte. Basterà creare un evento (con voce “Ripetizione” a “giornaliera”) dalle 20:00 alla 1:00 chiamato, per esempio “Accensione luci” e scrivere un’automazione così fatta (assumiamo sempre che l’entità calendario si chiami calendar.local):

automation:
  alias: Gestione luci
  trigger:
    - platform: calendar
      event: start
      entity_id: calendar.local
    - platform: calendar
      event: end
      entity_id: calendar.local
  condition:
    - condition: template
      value_template: "{{ 'Accensione luci' in trigger.calendar_event.summary }}"
  action:
    - if:
        - "{{ trigger.event == 'start' }}"
      then:
        - action: light.turn_on
          entity_id: light.giardino
      else:
        - action: light.turn_off
          entity_id: light.giardino

Cambiando semplicemente la programmazione dell’evento (per esempio l’orario), l’automazione cambierebbe comportamento in modo automatico.

ATTENZIONE: effettuando i test, ricordarsi di posizionare eventi ad almeno 15 minuti dal momento in cui si posiziona l’automazione che monitora l’evento stesso.

Volendo, si possono inserire anche degli offset:

...
  trigger:
    - platform: calendar
      event: start
      entity_id: calendar.local
      offset: -00:15:00
...

per anticipare o ritardare l’esecuzione del trigger in funzione dell’evento in avvio o completamento.


Le variabili, comunque, sono le più disparate.

Come gestione dell’eccezione

Un altro modo interessante di sfruttare i calendari è quello dell’eccezione, ovvero sfruttare gli eventi calendario per condizionare automazioni e script.

Ipotizziamo di avere un’automazione similare a quella sopra, non basata sui calendari ma sulla piattaforma “Time”, la quale provveda tutti i giorni a spegnere le luci del giardino all’una di notte. Ipotizziamo di volere tenere una festa estiva con qualche amico: certamente non vogliamo che le luci si spengano all’una, ma nemmeno vogliamo ricordarci di disabilitare l’automazione la sera della festa per poi riattivarla il giorno dopo. 

Basterà quindi ricordarsi che, in presenza di eventi denominati “Festa”, l’automazione non venga eseguita, scrivendola coerentemente:

automation:
  - alias: "Spegnimento luci giardino"
    trigger:
      - platform: time
        at: '1:00:00'
    condition:
      - condition: template
        value_template: "{{ not(is_state("calendar.local","on") and ('Festa' in trigger.calendar_event.summary))) }}"    
    action:
      - action: light.turn_off
        entity_id: light.giardino

con questa semplice configurazione, la condition è true (e quindi l’automazone viene eseguita) solo se non ci sono in corso eventi di calendario chiamati “Festa“.


Un altro uso è per esempio quello di condizione per interrompere o continuare l’esecuzione una sequenza di uno script (o comunque nel blocco action di un’automazione).

Per esempio:

script:
   mio_script:
   alias: "Script di esempio"
   sequence:
     - action: light.toggle
       entity_id: light.sala
     - action: remote.send_command
       data:
         entity_id: remote.broadlink
         device: samsung_tv
         command: power_on
     - condition: state
       entity_id: calendar.local
       state: 'off'   
     - switch.turn_off
       entity_id: switch.alexa_do_not_disturb_switch

in questa semplice sequenza, quando evocata essa sicuramente effettua il toggle della luce light.sala, l’invio del codice infrarosso tramite telecomando virtuale veso un elettrodomestico, ma disabilita la modalità “do not disturb” dello smart speaker Alexa integrato con Alexa Media Player solo se non ci sono eventi in corso sul calendario.


Da qui in poi, l’unico limite è la propria fantasia.


Altro:

Gestire pianificazioni e temporizzazioni in domotica tramite l’interfaccia Home Assistant

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.