Uscire e rientrare a casa: l’automazione domotica via Home Assistant

6 minuti di lettura

Senza questioni, una delle cose più fighe della domotica personale è il vedere la propria casa effettuare, come per magia, delle azioni automatiche quando si esce e quando si rientra.

Usciamo di casa (tutti), e acqua e gas si chiudono da soli, l’allarme si attiva, tutte e luci si spengono, le spine non essenziali si disattivano, eventuali notifiche di rilevamento (allagamento, fumo ecc.) entrano in modalità di armo, le tapparelle si abbassano. Anche solo uno della famiglia torna a casa, e le utenze si riattivano, all’apertura della porta d’ingresso il nostro smart speaker ci saluta dandoci la lettura dei dati telemetrici della casa (temperatura media, durata dell’assenza, eventuali eventi minori rilevati). Il limite è la fantasia, mai come in questo frangente.

Home Assistant ci è di grande aiuto nel realizzare questi scenari automatici grazie alla profonda flessibilità di configurazione delle sue automazioni.

Abstract

Capire la logica di un’automazione di uscita e/o di ingresso è molto facile: basta avere chiaro in testa il concetto di cambio di stato di un’entità Home Assistant.

Come sappiamo, ogni entità (di qualunque tipo) possiede un proprio stato che ne qualifica, appunto, la condizione istantanea. Un esempio classico è quello degli interruttori: solitamente un’entità di questo tipo possiede uno stato “on” o “off“. Quando lo stato cambia, tale cambiamento viene censito dallo “state bus” dell’HUB e, se configurato all’interno di un trigger di una o più automazioni, provvede ad innescala/e.

[N.b. Se non sai di cosa stiamo parlando, prima è il caso tu legga e comprenda questa scheda.]

Va da sé che sia possibile definire facilmente due automazioni che, al cambiamento di stato “in casa” a “fuori casa” (e viceversa) degli inquilini “facciano delle cose“, automaticamente, per noi.

Le entità da monitorare per realizzare queste automazioni sono tipicamente quelle di tipo “Device Tracker“, le quali rappresentano – nel proprio stato – la presenza di ogni inquilino.

Device Tracker

Il primo passo, dunque, è quello di dotarsi di tante entità di tipo “Device Tracker” quanti sono gli inquilini dell’ambiente domotico. In sostanza ognuno degli inquilini userà il proprio smartphone per comunicare alla domotica la propria posizione.

N.b. La domotica personale basata su Home Assistant non viola la privacy dei suoi utenti: tutte le informazioni relative agli stati (ivi inclusa quello del componente “Device Tracker”) sono collezionate LOCALMENTE e non vengono trasmesse a nessuna realtà esterna. Per i più scettici: Home Assistant è un progetto Open Source, il che significa che il codice sorgente è aperto, ergo il suo comportamento – comprovato – è verificabile da chiunque. Ovviamente gli eventuali servizi esterni utilizzati per collezionare la posizione sono responsabili della gestione di quell’informazione specifica.

Per ottenere delle entità “Device Tracker” le tecniche sono le più disparate: l’implementazione di una o più piattaforme figlie di questo componente consentono di dotarsi di tali entità.

Best practices

Quando finalmente sarà disponibile anche l’app nativa per controllare Home Assistant tramite Android (prevista per estate 2019), il 100% delle casistiche sarà coperto. Gli utenti iOS, infatti, semplicemente installando sui propri smartphone l’app nativa “Home Assistant Companion” (che sfrutta la piattaforma “Home Assistant Apple iOS“) si dotano, implicitamente, di un proprio “Device Tracker”. Quando anche Android sarà nella stessa situazione, il problema di dotarsi del propri tracker sarà risolto.

Fino ad allora:

Chi usa solo Android, invece, deve per forza di cose (per ora) usare solo una o più delle piattaforme di presence detection.

Tra le più usate in questi casi:

Raggruppare

Ottenuti i “Device Tracker” che ci servono abbiamo necessità di creare un’entità di tipo “Group” la quale rappresenti il nucleo familiare.
Ipotizziamo che la famiglia sia rappresentata dalle seguenti tre entità “Device Tracker”:

  • device_tracker.marco
  • device_tracker.daniela
  • device.tracker.giorgia

Creare un gruppo “famiglia” è facile, basta aggiungere in configurazione:

group:
  famiglia:
    entities:
      - device_tracker.marco
      - device.tracker.daniela
      - device.tracker.giorgia

il che genererà l’entità “group.famiglia“.

I gruppi di “Device Tracker” posseggono due soli possibili stati “home” e “not_home“. Lo stato diventa “home” quando anche uno solo dei device tracker è a casa, mentre diventa “not_home” quando tutti sono fuori casa.

Sì, ma dov’è “casa”?

Location

È importante definire in configurazione la posizione assoluta della propria casa. Se si usano infatti delle piattaforme di presence detection le quali usino il GPS (altre invece utilizzano altri metodi, come per esempio la NMAP) come informazione cardine, è ovvio che tale informazione vada paragonata con una posizione geografica assoluta.

Per indicare la posizione di “casa” è sufficiente recarsi alla voce “Impostazioni” > “Generale” del menu Home Assistant e posizionare il cursore sul punto corretto della mappa e, infine, cliccare su “Salva“.

Automazioni

Bene: abbiamo i nostri “Device Tracker”, li abbiamo raggruppati, abbiamo indicato la posizione di “Casa”. Siamo pronti per definire le due automazioni che gestiranno l’abbandono o il ritorno a casa.

IN USCITA
automation:
- alias: "USCITA"
  initial_state: 'on'
  trigger:
    platform: state
    entity_id: group.famiglia
    from: 'home'
  condition: []
  action: []
IN ENTRATA
- alias: "RIENTRO"
  initial_state: 'on'
  trigger:
    platform: state
    entity_id: group.famiglia
    to: 'home'
  condition: []
  action: []

N.b. Come si nota, la prima automazione si innesca con il cambio di passaggio “da stato home a qualsiasi altro stato“, mentre la seconda “quando lo stato diventa home“. Sarebbe più intuitivo configurare la prima “da home a not_home” e la seconda “da not_home a home“, ma la configurazione proposta è più efficace  per arginare eventuali problemi di stati “spuri” che talvolta possono capitare. Provare per credere.

Ora non manca che indicare nei blocchi “action” cosa fare nei due casi.

Action

Ovviamente tutto dipende da cosa si ha a disposizione e cosa si vuol fare. Nel blocco action, come in tutte le automazioni, l’esecuzione viene eseguita in sequenza, pertanto bisognerà elencare servizi ed entità da evocare all’esecuzione.

LUCI

Poniamo di voler spegnere tutte le luci. Il blocco action da aggiungere all’automazione “automation.uscita” sopra definita è semplice:

  action:
    - service: light.turn_off
      entity_id: group.all_light

Non indichiamo una ad una tutte le luci: sfruttiamo infatti il gruppo preferinito “group.all_lights” associato al servizio “light.turn_off“.

Poniamo invece di volerne accendere una specifica al rientro: Il blocco action da aggiungere all’automazione “automation.rientro” sopra definita è semplice:

  action:
    - service: light.turn_on
      entity_id: light.ingresso

e così via.

EVOCARE UNA SCENA

Una buona pratica è quella dell’utilizzo delle scene predefinite, così da suddividere in modo più pulito il codice.
Immaginiamo di definire due scene, una per l’uscita e una per il rientro:

scene:
- name: Uscita
  entities:
    alarm_control_panel.allarme:
      state: armed_away
      code: 1234
    group.all_lights: off
    switch.acqua: on
    switch.gas: on
    switch.utenze: off
    media_player.tv: off
    script.vacuum_on: on
    script.uscita_sequence: on
- name: Rientro
  entities:
    alarm_control_panel.allarme:
      state: disarmed
      code: 1234
    switch.acqua: on
    switch.gas: on
    switch.utenze: on
    script.vacuum_to_dock: on
    script.rientro_sequence: on

Queste due scene (“scene.uscita” e “scene.ritorno“) impostano tutta una serie di stati:

  • (la prima) spegne tutte le luci;
  • impostano l’allarme domotizzato su Home Assistant (entità “alarm_control_panel.allame“);
  • impostano acqua e gas (entità “switch.acqua” e “switch.gas“);
  • imposta le utenze (“switch.utenze”)
  • spengono la tv all’uscita (qualora fosse rimasta accesa.. entità “media_player.tv“);
  • avviano il robot aspirapolvere all’uscita e lo stoppano al ritorno, se non ha ancora finito di girare (evocando uno script);
  • avviano due diversi script per eventuali sequenze condizionali (cose varie, magari non gestibili semplicemente impostando uno stato tramite scena).

Le rispettive automazioni pertanto diventano:

IN USCITA
automation:
- alias: "USCITA"
  initial_state: 'on'
  trigger:
    platform: state
    entity_id: group.famiglia
    from: 'home'
  condition: []
  action:
    - service: scene.turn_on
      entity_id: scene.uscita
IN ENTRATA
- alias: "RIENTRO"
  initial_state: 'on'
  trigger:
    platform: state
    entity_id: group.famiglia
    to: 'home'
  condition: []
  action:
    - service: scene.turn_on
      entity_id: scene.rientro

Notifiche

Poniamo di avere a disposizione delle entità di tipo “Notifications” e di voler venire notificati all’attivazione di una o entrambe le automazioni. Sarà sufficiente aggiungere in action il tipico blocco utilizzato in altre automazioni, per esempio:

    - service: notify.mio_telefono
      data:
        data:
          push:
            badge: 1
        title: Domotica
        message: "Allarme DISARMATO. Bentornato a casa."

Smart Speaker

Ipotizziamo di possedere:

Vogliamo (ma è solo un esempio per far capire le possibilità, ampie, in questi scenari) che, al ritorno a casa, Home Assistant attenda l’apertura della porta di ingresso per far pronunciare sia un messaggio di saluto (casuale, tra tre predefiniti) sia uno statistico (temperatura e qualità dell’aria) allo smart speaker Alexa.

La sequenza da inserire nel blocco action potrebbe essere:

      - wait_template: "{{ is_state('binary_sensor.contatto_ingresso', 'on') }}"
        timeout: '00:30:00'
        continue_on_timeout: 'false'
      - delay:
          seconds: 5
      - service: notify.alexa_media
        data:
          target:
            - media_player.alexa
          data:
            type: announce
            method: speak
          message: >
             {{ [
             "Bentornato a casa!",
             "Guarda chi si vede!",
             "Casa dolce casa."] | random }} La temperatura media è di {{ ((states("sensor.temperatura_sala")|float + states("sensor.temperatura_camera")|float )/2)|float|round(1)}} gradi, la qualità dell'aria è {{ states.sensor.air_quality.state }}.

In primis, la sequenza attende per trenta minuti l’apertura della porta d’ingresso (il tempo di parcheggiare, salire ecc.); una volta aperta la porta, attente qualche secondo (cinque) e poi fa pronunciare il messaggio ad Alexa.


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.

🔻 Clicca QUI per commentare l'articolo. 🔻