All’interno delle automazioni è spesso necessario valutare la posizione geografica di una o più persone per condizionarne l’esecuzione.
Per evitare di ripetere costantemente del codice nel definire lo stato di questa condizione è consigliato creare degli specifici sensori a supporto delle automazioni.
In questo articolo vedremo come creare dei sensori per questo scopo, adattabili a svariate situazioni.
Sommario
Materiale necessario
Per creare questi sensori è necessario aver strutturato il proprio sistema per la gestione dei packages come indicato in questo articolo.
Una volta predisposto il sistema, scarichiamo questo pacchetto contenente il materiale che utilizzeremo nei vari passaggi:
Predisposizione
Prima di partire con il sensore, è necessario configurare:
- Un dispositivo che fornisca la posizione geografica;
- Delle zone per delineare i punti di analisi.
I dispositivi vengono gestiti dal dominio Device Tracker e possono essere di qualsiasi natura. Generalmente viene sfruttato uno smartphone che integrato tramite l’applicazione ufficiale di Home Assistant disponibile per iOS ed Android creerà automaticamente questo sensore, o in alternativa è possibile usare una qualsiasi altra integrazione a piacere.
Le zone invece possono essere create sia in modalità “grafica” che “testuale” come indicato in questo articolo. Poiché generalmente prediligo sempre il testuale, partiamo creando una zona in questa modalità.
Indichiamo il punto centrale della zona desiderata all’interno del file secrets.yaml (Impostare il punto ricavando le coordinate tramite Google Maps):
# Zones
zones_casa_latitude: '41.89800'
zones_casa_longitude: '12.47669'
# -------------------------------------------------------------------------------------------------------------------
Creiamo quindi un pacchetto zones.yaml e dichiariamo la nostra zona.
Da valutare attentamente la chiave “radius” che indica di quanti metri sarà estesa la circonferenza della zona rispetto al punto centrale indicato dalle coordinate, come nell’esempio in questione dove il raggio della zona rispetto alle coordinate sarà di 200 metri.
Questo permetterà:
- Di eseguire azioni con un certo anticipo indicando un raggio più ampio;
- Di eseguire azioni di uscita quando ci sì è realmente allontanati dalla zona indicando un raggio più ampio;
- Di evitare falsi positivi di uscita dalla zona in caso di scarso segnale.
# Zones
zone:
# Casa
- name: 'Casa'
latitude: !secret zones_casa_latitude
longitude: !secret zones_casa_longitude
radius: '200'
icon: mdi:home-account
# -------------------------------------------------------------------------------------------------------------------
Ecco come apparirà la zona sulla mappa, dove il simbolo a destra indica l’impossibilità di modificarla tramite interfaccia:
Ora è necessario associare il dispositivo precedentemente integrato al proprio utente, questo viene gestito dal dominio Person.
Anche in questo caso se sì vuole configurare in modalità “grafica” questo è possibile tramite la sezione “Persone” presente nelle impostazioni, oppure procedere con la modalità “testuale” indicando nel file secrets.yaml l’ID del proprio utente:
# Persons
persons_vito_user_id: '123456789abcdefghijklmnopqrstuvx'
# -------------------------------------------------------------------------------------------------------------------
L’ID può essere recuperato tramite la sezione “Utenti” nelle impostazioni, selezionando il proprio utente:
Creiamo quindi un pacchetto persons.yaml ed indichiamo i dettagli per la nostra persona.
Nel caso sì voglia gestire più persone duplicare il codice per ogni persona presente, di conseguenza è consigliato che ogni persona abbia un apposito utente. Questo non è obbligatorio, una persona può esistere senza essere vincolata ad un utente come indicato nella documentazione ufficiale.
All’interno della chiave “device_trackers” vincolare il dispositivo che fornirà la posizione geografica alla nostra persona.
# Persons
person:
# Vito
- name: 'Vito'
id: 'Vito'
user_id: !secret persons_vito_user_id
device_trackers:
# Smartphone 1
- device_tracker.smartphone_1
# -------------------------------------------------------------------------------------------------------------------
Di conseguenza quando il dispositivo sarà fisicamente all’interno della zona precedentemente impostata anche la nostra “persona” risulterà all’interno di essa.
Se sì utilizza l’applicazione nativa e sì vuole una maggiore precisione è molto importante impostare un aggiornamento molto frequente dei sensori, ovviamente a discapito del risparmio energetico.
Molto importante anche rimuovere qualsiasi ottimizzazione della batteria sull’applicazione, attivare gli aggiornamenti in background, permettere all’applicazione di poter accedere sempre alla localizzazione (ad esempio su iOS) e verificare che la localizzazione sul proprio dispositivo sia correttamente abilitata e configurata.
Attenzione: Le impostazioni necessarie e le schermate possono variare in base al dispositivo e sistema operativo utilizzato.
Il sensore
Predisposto il sistema configuriamo il sensore di analisi, quindi creare un pacchetto chiamato presence.yaml.
Questo sensore, di tipo binario, sfrutterà la piattaforma template per essere costruito su misura.
Nell’esempio che segue analizzeremo lo stato di 2 persone contemporaneamente per valutarne la loro presenza nella zona “Casa”:
# Presence
# Binary Sensors
binary_sensor:
- platform: template
sensors:
# Casa
presence_home_status:
friendly_name: 'Casa'
value_template: >-
{% if is_state("person.vito", "Casa") or is_state("person.anna", "Casa") %}
true
{% else %}
false
{% endif %}
attribute_templates:
Valutazione_Vito: >-
{% if is_state("person.vito", "Casa") %}
Positiva
{% else %}
Negativa
{% endif %}
Valutazione_Anna: >-
{% if is_state("person.anna", "Casa") %}
Positiva
{% else %}
Negativa
{% endif %}
icon_template: >-
{% if is_state("binary_sensor.presence_home_status", "on") %}
mdi:home-import-outline
{% elif is_state("binary_sensor.presence_home_status", "off") %}
mdi:home-export-outline
{% else %}
mdi:close-box-outline
{% endif %}
# -------------------------------------------------------------------------------------------------------------------
Riavviato Home Assistant apparirà il sensore, che in futuro ci sarà di supporto alle automazioni.
La logica è strutturata nel seguente modo:
- Lo stato del sensore risulterà “Acceso” quando almeno una delle 2 persone sarà presente nella zona “Casa” (sfruttando una OR nella condizione);
- Nell’attributo “Valutazione_Vito” verrà indicato il valore “Positiva” quando la persona “Vito” sarà presente nella zona e “Negativa” quando non presente;
- Nell’attributo “Valutazione_Anna” verrà indicato il valore “Positiva” quando la persona “Anna” sarà presente nella zona e “Negativa” quando non presente.
Ora analizziamo come appare il sensore aprendone le proprietà.
Come possiamo comprendere nell’esempio sottostante, lo stato di ogni singola persona è visibile nell’area inferiore dove la persona “Vito” risulta in casa mentre la persona “Anna” no, ma in ogni caso il sensore risulta “Acceso” poiché anche solo una delle 2 persone è presente:
Ovviamente è possibile creare altri sensori per gestire multiple zone, ad esempio un sensore per verificare la presenza nel posto di lavoro, a scuola o dai familiari.
Per integrarlo nell’interfaccia usare il seguente codice:
type: entities
title: Presenza
show_header_toggle: false
entities:
- entity: binary_sensor.presence_home_status
2 commenti
Salve, ho un problemino con home assistant e spero che qualcuno mi aiuti. In pratica premetto che credo di aver dato tutti gli accessi possibili, ma ho un problema con il rilevamento della posizione. Cioè volevo chiedere se e come era possibile per fare in modo di velocizzare l’aggiornamento della posizione perchè in pratica dopo tutto quello che ho provato a fare mi aggiorna la posizione OGNI 5 minuti. C’è qualche modo che mi sfugge per ridurre questo tempo?
Ciao, complimenti per la guida, veramente utile. Volevo sottoporti un quesito:
ho Home assistant in modalità supervisor (Hassio) su Pi4 in docker. Smartphone Iphone 11 con app HA (no NABU – da esterno accedo tramite VPN su server Synology).
In Home assistant ho anche abilitato l’integrazione Icloud quindi mi trovo 2 device tracker legati allo smartphone.
Nelle impostazioni di localizzazione del telefono ho messo “sempre” sull’utilizzo posizione in background e 20 secondi il tempo di refresh. Ciò nonostante ho un ritardo nell’aggiornamento della posizione che a volte arriva anche a diverse ore, rendendomi di fatto inutili le automazioni legate alla posizione.
Stessa cosa sul telefono di mia moglie (Iphone 7) anche per lei si generano ritardi notevoli.
Come posso fare per ridurre al minimo questo ritardo?
Grazie mille se potrai aiutarmi.
Michele