Gestire e utilizzare la “prossimità” geolocalizzata sulla domotica Home Assistant

5 minuti di lettura

GPS Pin

Come chi frequenta da un po’ il mondo della domotica personale sa bene (e chi no sa, lo scoprirà ora) come una delle funzioni più apprezzate sia quella di poter innescare automazioni di diverso tipo e natura in base alla presenza o meno degli inquilini presso l’abitazione.

Home Assistant, il più noto e adottato tra gli HUB personali per domotica, fa della gestione della presenza una delle proprie (tante) vocazioni: l’utilizzo del componente “Device Tracker“ consente infatti di definire delle entità tali da rappresentare – nel proprio stato – la posizione dell’inquilino ad esse associato. Tale posizione viene solitamente associata alle “zone” configurate sull’HUB (“Casa”, “Lavoro”, “Scuola”, “Palestra” e così via).

Solitamente si provvede dunque a dotarsi di tante entità, tante quanti sono gli inquilini dell’ambiente domotico. In sostanza ognuno degli inquilini userà il proprio smartphone (solitamente) per comunicare automaticamente alla domotica la propria posizione man mano che varia.

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 definire delle entità “Device Tracker” collegate ai propri smartphone le tecniche sono le più disparate: l’implementazione di una o più piattaforme figlie di questo componente consentono infatti di raggiungere lo scopo; sebbene però le piattaforme di integrazione legate al componente “Device Tracker” siano molte, anche semplicemente installando sui propri smartphone l’app nativa “Home Assistant Companion” gli utenti si dotano, indirettamente, di un proprio geolocalizzatore GPS. Questa è la strada che solitamente si adotta e che consigliamo.

Va da sé che conoscere la posizione di un inquilino (o di gruppi di) rispetto alle zone configurate sull’HUB è particolarmente comodo in automazione: non a caso abbiamo dedicato una scheda ad hoc che spiega come realizzare automazioni basati sull’uscita e il rientro a casa

Ma se ci serve conoscere, piuttosto (o inoltre) la posizione assoluta, la distanza da casa (o da una zona specifica)?

Questione di prossimità

La posizione assoluta è utile, ma anche la prossimità, ovvero “quanto si è prossimi” rispetto a una zona definita in configurazione. Il perché è semplice e cercheremo di spiegarlo tramite un esempio, che segue.


Ipotizziamo di avere un’automazione Home Assistant la quale si inneschi a fonte dell’abbandono di casa segnalato dall’entitè device_tracker.marco e che provveda all’attivazione dell’allarme domestico alarm_control_panel.casa.
Qualcosa di questo tipo scritto in configurazione:

automation:
- alias: "Attivazione automatica allarme"
  initial_state: 'on'
  trigger:
    platform: state
    entity_id: device_tracker.marco
    from: 'home'
  condition: []
  action:
    service: alarm_control_panel.alarm_arm_away
    entity_id: alarm_control_panel.casa

L’automazione così creata (“automation.attivazione_automatica_allarme“) si innescherà ogni volta che il tracker cambierà stato da “home“.

Mettiamo poi di aver scritto un’altra automazione che provveda a disattivare “d’ufficio” l’allarme qualora sia attivo e la batteria dello smartphone associato all’entità tracker device_tracker.marco sia inferiore al 5%. Questo perché la persona potrebbe trovarsi fuori casa, tornare e trovare il cellulare spento, non avendo così la possibilità di spegnere l’allarme manualmente o automaticamente (tramite un’automazione gemella e contraria di quella sopra descritta).

automation:
  - alias: "Disattivazione automatica allarme per batteria scarica"
    initial_state: 'on'
    trigger:
      platform: numeric_state
      entity_id: sensor.smartphone_marco_battery_level
      below: 5
      for:
        minutes: 10
    condition:
      condition: state
      entity_id: alarm_control_panel.casa
      state: 'armed_away'
    action:
      - service: alarm_control_panel.disarm
        entity_id: alarm_control_panel.casa
      - service: notify.mobile_app_smartphone_marco
        data:
          data:
            push:
              badge: 1
          title: Domotica
          message: "Allarme disattivato d'ufficio per batteria quasi esaurita."

L’automazione così scritta utilizza il sensore sensor.smartphone_marco_battery_level associato all’app Home Assistant Companion installata sullo smartphone dell’utente per innescarsi quando il valore è sotto il 5% per più di 10 minuti. In caso verifica che l’allarme sia armato e, in caso, lo disarma e invia una notifica allo smartphone.

Ma se mi trovo in ferie alle Isole Maldive?

Beh, ovviamente anche se lo smartphone si scarica in quella situazione non è (di certo) un problema: non voglio quindi che l’allarme si disattivi da solo. Diciamo che l’automazione di cui sopra si vuole che venga eseguita solo quando ci si trovi, diciamo, entro 30 km da casa – quindi realisticamente quando assumo di tornare a casa a breve.

“Proximity”

In nostro aiuto interviene il componente “Proximity“,  uno dei tanti componenti d’utilità di questo potente  HUB personale.

In sostanza, l’adozione di questo componente consente di dotarci di uno o più sensori che riportino nel proprio stato la distanza (in chilometri, o in altre unità di misura) rispetto a una zona definita in configurazione e la direzione del viaggio, se in movimento.

La configurazione è estremamente semplice:

proximity:
  casa:
    zone: home
    ignored_zones:
      - work
    devices:
      - device_tracker.marco
    tolerance: 200
    unit_of_measurement: km 

Questa configurazione genera un’entità chiamata proximity.casa e fornisce la distanza dalla zona “home” (quella di default rappresentante la posizione della propria abitazione).

Spiegazione dei campi:

zone Il nome della zona a cui far riferimento (nell’esempio sopra, “home“)
ignored_zones Le eventuali zone in cui non calcolare la prossimità con la zona di riferimento
devices L’elenco dei “Device Tracker” che contribuiscono al calcolo della prossimità (in caso di più elementi, viene preso come riferimento quello più vicino)
tolerance In metri, la tolleranza utilizzata per calcolare la direzione di spostamento
unit_of_measurement L’unità di misura con la quale esportare il dato (km, m, mi, yd, ft)

Si possono ovviamente definire più sensori di prossimità:

proximity:
  casa:
    zone: home
    ignored_zones:
      - work
      - school
    devices:
      - device_tracker.marco
      - device_tracker.daniela
    tolerance: 50
    unit_of_measurement: km
  lavoro:
    zone: work
    devices:
      - person.daniela
    tolerance: 10 
    unit_of_measurement: km

tornando quindi al nostro esempio, possiamo modificare la nostra automazione introducendo una condition tale da eseguire l’automazione solo quando proximity.casa indichi una distanza superiore ai 30 chilometri:

automation:
  - alias: "Disattivazione automatica allarme per batteria scarica"
    initial_state: 'on'
    trigger:
      platform: numeric_state
      entity_id: sensor.smartphone_marco_battery_level
      below: 5
      for:
        minutes: 10
    condition:
      condition: and
      conditions:
        - condition: state
          entity_id: alarm_control_panel.casa
          state: 'armed_away'        
        - condition: numeric_state
          entity_id: proximity.casa
          above: 30
    action:
      - service: alarm_control_panel.disarm
        entity_id: alarm_control_panel.casa
      - service: notify.mobile_app_smartphone_marco
        data:
          data:
            push:
              badge: 1
          title: Domotica
          message: "Allarme disattivato d'ufficio per batteria quasi esaurita."

La condition in AND prevede che, all’avvio dell’automazione, essa esegua le action solo se l’allarme è attivo e la distanza è superiore ai 30 km.

Ma si può fare molto di più.

STATI E ATTRIBUTI

Le entità di tipo “Proximity” posseggono, oltre allo stato che rappresenta la distanza, degli attributi essi stessi utilizzabili come trigger e/o come condition.

dir_of_travel La direzione del viaggio. I valori possibili sono:

  • not set
  • arrived
  • towards
  • away_from
  • unknown
  • stationary’ 
dist_to_zone La distanza dalla zona monitorata
nearest Il device o la persona più vicina a tale zona

Conclusioni

In buona sostanza, questo tipo di entità sono particolarmente utili perché si prestano a molteplici funzioni. Quella proposta nell’esempio è solo una delle tante possibili applicazioni: si pensi per esempio alla possibilità di variare il termostato del riscaldamento in funzione dell’avvicinamento degli inquilini a casa, oppure conoscere la distanza dei propri figli rispetto a scuola o altre zone per motivi di sicurezza, o altro.

Come sempre, il limite è la fantasia.


Home Assistant Official Logo ATTENZIONE: 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.

   
Telegram News Channel