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: true 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: true 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: true 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:
|
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.
⚠️ Se di Home Assistant ne sai poco ma sei interessato a capirne di più, ti suggeriamo di partire da qui. |
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. Se ti sei perso, a tua disposizione c'è la mappa. |