A 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“:
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):
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”:
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.
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. |