In questo articolo parleremo della posizione delle persone con Home Assistant: come definire la presenza a casa in modo sicuro e come gestire in modo veloce l’entrata e l’uscita dalle zone configurate.
Home Assistant ci da un ventaglio enorme di possibilità per tracciare la posizione delle persone e sta quindi a noi utilizzare le possibilità giuste per i nostri scopi nel modo migliore.
Lo stesso risultato, infatti, lo possiamo ottenere in modi diversi ma con velocità e affidabilità differenti.
Questo articolo vuole quindi essere una guida per gestire la posizione delle persone con modalità che si sono rivelate molto stabili e attendibili così che ognuno non debba reinventarsi la ruota ma possa partire da una soluzione funzionante, comprendendola e adattandola alle proprie specifiche necessità.
Con le informazioni di questo articolo sarai in grado di sapere chi c’è a casa in modo sicuro, configurare delle notifiche su Alexa e/o su App Home Assistant quando una persona entra o esce da una zona definita (con funzionamento rapido!) e creare gli eventi “ultimo esce da casa” e “primo entra a casa” che ti permetteranno di effettuare azioni automatiche in modo semplice come spegnere tutte le luci, attivare/disattivare l’antifurto, abbassare le tapparelle e tutto quel che hai in mente.
Se è un argomento che può interessarti allaccia la cintura e partiamo, sono certo che troverai diversi spunti interessanti!
Sommario
- 1 Princìpi di base
- 2 Tracking diverso per persone diverse
- 3 Tre package per migliorare notevolmente la rilevazione
- 3.1 Package wifi.yaml: rendiamo istantaneo il passaggio tra zone
- 3.2 Package auto_detect.yaml
- 3.2.1 Rilevare la prima persona che si alza la mattina
- 3.2.2 Sensori più esteticamente gradevoli da mettere in UI
- 3.2.3 Quale device_tracker sta determinando la posizione dell’oggetto person?
- 3.2.4 Switch per impostare lo stato della posizione ad alta accuratezza dell’app
- 3.2.5 Definizione del gruppo “Qualcuno è a casa?”
- 3.2.6 Generiamo eventi “ultimo esce da casa” e “primo entra a casa”
- 3.2.7 Un aiuto dalla telecamera per rilevare lo stato di “a casa” prima di arrivare alla porta
- 3.3 Package zone_notify.yaml: notifiche all’arrivo / rientro dal lavoro
- 4 Conclusione
Princìpi di base
Con Home Assistant abbiamo la possibilità di tracciare non solo lo stato di a casa / non a casa ma anche la presenza nelle zone configurate (è possibile inserirle in Impostazioni -> Zone ) e addirittura la posizione GPS, che potremo tracciare su una mappa.
Mentre la presenza o meno a casa e nelle zone configurate ci sarà utile per le nostre automazioni la posizione GPS può essere un utile alleato per sapere dove sono i componenti della famiglia (che chiaramente devono essere consenzienti a condividervi la loro posizione) ed anche un utile strumento di debug per capire se la posizione di un dispositivo viene acquisita in modo regolare e corretto.
Potremo infine creare delle card di questo tipo utili, oltre che a livello informativo, anche a scopo di debug nel caso qualcosa non sia come ci aspettiamo:

Configuriamo le zone
Come prima cosa configuriamo le zone che ci interesserà tracciare e di cui creare automazioni che interagiscano con la presenza in esse.
Per farlo andiamo in Impostazioni -> Zone e creiamo tutte le zone che ci interessano.

Acquisiamo lo stato dei dispositivi con device_tracker
In Home Assistant la localizzazione delle persone viene effettuata con sensori nel dominio device_tracker. Di seguito un elenco di quelli che ritengo più interessanti per il nostro scopo:
Ricordati di disabilitare le ottimizzazioni della batteria e ogni funzione conservativa per evitare che il sistema operativo dello smartphone non permetta l’aggiornamento della posizione in background!
Leggi la documentazione ufficiale
Leggi la documentazione ufficiale
Leggi la documentazione ufficiale
Leggi la documentazione ufficiale
l contro, a mio avviso, sono di avere un’ulteriore app che effettua operazioni in background riducendo la batteria e il fatto che l’integrazione sfrutta delle API non ufficiali. Life360 potrebbe interromperne il funzionamento in ogni momento.
Ad ogni modo se hai difficoltà con la posizione di Home Assistant questa è una soluzione da provare.
Leggi la documentazione ufficiale
Leggi la documentazione ufficiale
Puoi configurare una o più di una delle integrazioni sopra elencate. Ognuna di esse ti potrà fornire tre tipi di stato diversi:
home
: quando il dispositivo tracciato viene rilevato come “a casa“<nome_zona>
: quando il dispositivo tracciato viene rilevato come all’interno di una zona configurata in Home Assistant il device_tracker restituirà come stato il nome della zona stessa. Chiaramente questo vale per le integrazioni che usano il GPS come l’app di Home Assistant o Life360.not_home
: quando il dispositivo tracciato risulta non a casa. Per le integrazioni che rilevano il collegamento alla rete di casa come Fritz, Nmap quando il dispositivo non risulta connesso.
Per le integrazioni che fanno uso del GPS come l’app Home Assistant e Life360, invece, quando la posizione risulta fuori dalla zona di casa ma anche fuori dalle zone definite. Ad esempio durante il tragitto tra casa e il lavoro.
Accorpiamo più informazioni nell’entità Person
E’ una buona idea utilizzare più di un device tracker (in questo articolo io utilizzerò Fritz! e Home Assistant Mobile App), ognuno dei quali viene esposto con una propria entità, che può essere in disaccordo con le altre. A venirci in soccorso c’è l’oggetto Person, configurabile in Impostazioni -> Persone in cui possiamo associare ad ogni persona i propri device_tracker che concorrono alla determinazione della sua posizione.

Ogni persona può infatti avere uno o più device_tracker associati (potenzialmente anche nessuno). In tal modo Home Assistant applicherà dei criteri piuttosto sofisticati per determinare nel migliore dei modi la posizione più probabile della persona, soprattutto quando i tracker non sono in accordo. Consiglio a tal proposito di leggere con attenzione la pagina di documentazione ufficiale che descrive molto bene questo aspetto con un esempio concreto.
Potrebbe sembrarti superfluo ma in questo modo disaccoppi il concetto di “persona” da quello di “dispositivi della persona”. Come conseguenza se cambierai o aggiungerai modalità di tracciamento ti basterà modificare i tracker della persona e le tue automazioni continueranno a funzionare senza alcuna modifica.
Gli oggetti person possono quindi assumere lo stato di home
, not_home
e <nome_zona>
esattamente come i device_tracker, solo che lo stato è determinato dall’aggiornamento migliore/più recente.
Nota: l’oggetto person, fortunatamente, è molto conservativo nel determinare lo stato di home
. Se quindi anche uno solo dei sensori risulta home l’oggetto person
sarà esso stesso home
. Questo è utilissimo perchè se mentre siamo a casa il GPS avesse una posizione molto imprecisa perchè siamo all’interno della casa e credesse di trovarsi fuori casa, ci sarebbe sempre l’integrazione locale (del router o NMAP/ping) a ricordare all’oggetto person che in realtà noi siamo a casa.
Poco più avanti aggiungeremo anche un terzo device tracker per velocizzare i cambi di zona in alcuni frangenti.
Tracking diverso per persone diverse
Non necessariamente per tutte le persone dobbiamo utilizzare le stesse tipologie di device_tracker. Nella mia configurazione, ad esempio, ho due categorie di persone: quelle appartenenti alla mia famiglia che hanno installato l’app Home Assistant e quelle che possono venire a casa mia ed ha senso tracciarne la presenza.
Nel primo caso, per i componenti della famiglia, traccio la posizione GPS, le zone e la presenza o meno a casa (vedremo meglio in seguito come).
Per tutti gli altri, invece, mi limito a tracciarne il fatto che il loro smartphone sia collegato alla mia rete wifi. In questo modo basta che abbiano con sé il telefono per far sapere al mio Home Assistant che sono a casa mia.
Per esempio gestisco la presenza della nonna quando io e mia moglie non ci siamo per configurarlo lo stato del riscaldamento automaticamente. O ancora gestisco anche la presenza della nonna per l’attivazione / disattivazione automatica dell’antifurto.
Tre package per migliorare notevolmente la rilevazione
Compresi i concetti di base passerò ora a descrivere tre dei package che ho creato per migliorare sensibilmente la velocità e la precisione delle rilevazioni.
Il file che hai appena scaricato persone-base-packages-v2.zip contiene una cartella Persone da scompattare all’interno della tua cartella packages, così da ottenere una struttura come questa:

Ricordo che non sono packages che puoi copiare e sei pronto ma andranno adattati alle tue specifiche esigenze. Servono per illustrare un metodo e imparare magari delle cose lungo il percorso.
Se te lo stai chiedendo, inoltre, gli altri packages dello screenshot li discuteremo in un altro articolo 😉
Per comprendere i packages e adattarli alle tue esigenze è bene che tu capisca com’è la mia configurazione.
In questi packages sono coinvolte tre entità person:
- person.henrik: sono io, tracciato dall’app e da Fritz e dal wifi (vedi in seguito)
- person.antonella: mia moglie, tracciata dall’app e da Fritz e dal wifi (vedi in seguito)
- person.ankie mia mamma, tracciata solo da Fritz
Io lavoro nella zona chiamata ufficio
, mia moglie lavora nella zona chiamata negozio
. Dal lockdown ho iniziato a tornare a casa a pranzo, prima andavo a mangiare in un locale vicino, per questo c’è una configurazione apposita per escludere o meno la possibilità.
Per le notifiche utilizzo lo script multinotify che permette di inviare notifiche alle app e ad Alexa contemporaneamente, oltre che gestire diversi comodi aspetti come un volume notifica separato.
Se non lo conosci ti consiglio caldamente il seguente articolo: Multinotify: il package per le notifiche su Alexa e App
Passiamo ora alla descrizione dei tre package così da capirne i concetti che ne stanno alla base.
Package wifi.yaml: rendiamo istantaneo il passaggio tra zone
Ora che abbiamo configurato i nostri oggetti person
e le zone che ci interessa tracciare (come il luogo di lavoro dei componenti familiari, i genitori / suoceri ed ogni luogo che vogliamo utilizzare come identificazione dello stato al fine di farne delle automazioni) possiamo procedere a creare delle automazioni al passaggio dentro e fuori le zone. C’è un “però”…
La prima cosa di cui ci accorgeremmo, infatti, è che le automazioni al cambio stato delle entità person
(e uguale sarebbe usando i device_tracker
) risultano a volte in ritardo rispetto alle aspettative. Questo perchè l’app non interroga la posizione GPS di continuo per risparmiare batteria e dovrà quindi avere il tempo di “accorgersi” che si è entrati o usciti da una determinata zona.
Possiamo però usare un trucchetto per velocizzare parecchio questi passaggi: sfruttare il collegamento a un SSID specifico di quella zona. L’app invia infatti in modo quasi immediato le connessioni o disconnessioni dalle reti Wifi.
Per attivare questo sensore andare dal’app premendo sull’hamburger menu , Configurazioni -> App complementare -> Gestione dei sensori -> sezione Sensori di rete e abilitiamo il sensore Connessione WiFi. Questa operazione creerà un sensore il cui stato sarà l’SSID (il nome della rete wifi) a cui il telefono è collegato oppure
<not connected>
se non collegato ad alcuna rete WiFi.
Per fare un esempio in ufficio ho uno specifico SSID wifi. Quando arrivo in ufficio il mio telefono si connette all’access point ancor prima che sia entrato dalla porta d’ingresso. Mentre il GPS deve ancora aggiornarsi il telefono informa la mia istanza di Home Assistant che si è collegato a quella specifica rete WiFi e uso questa opportunità per impostare lo stato del device_tracker alla zona dell’ufficio.
Stesso discorso all’uscita: il telefono si scollegherà dal WiFi ben prima che il GPS se ne accorga. E anche in questo caso sfrutto questo evento per impostare lo stato del device_tracker a not_home
prima che lo faccia il GPS.
(quando sei a casa, invece, l’oggetto person non cambia da home finché un sensore, specialmente quello del router, rimane su home)
Come funziona l’impostazione del device_tracker in base all’SSID
Analizzando il package wifi.yaml scaricato precedentemente ci accorgiamo che è composto da una sola automazione che gestisce tutti i tracker e tutte le reti wifi che vogliamo gestire. Di seguito l’automazione che poi andiamo ad analizzare per capirne il funzionamento ed adattarla alla tua configurazione. Gli SSID e le zone sono inventati a scopo didattico.
automation: # Rilevazione della zona in base all'SSID a cui è collegato lo smartphone - id: 48d481d3-9051-443b-a8ea-3e698f99f560 alias: Tracker - Wifi - Telefoni trace: stored_traces: 20 trigger: - platform: state entity_id: - sensor.tel_henrik_wifi - sensor.tel_anto_wifi - sensor.tel_erica_wifi_connection to: action: - variables: tracker: "{{ trigger.from_state.object_id }}" zona: > {% set zone = [ {'ssid': '<not connected>', 'zona': 'not_home'}, {'ssid': 'ssid-casa', 'zona': 'home'}, {'ssid': 'ssid-guests', 'zona': 'home'}, {'ssid': 'altro-ssid', 'zona': 'negozio'}, {'ssid': 'ssid-ufficio', 'zona': 'ufficio'}, {'ssid': 'ssid-ufficio-guests', 'zona': 'ufficio'}, {'ssid': 'ssid-casa-amici', 'zona': 'mariorossi'}, {'ssid': 'ssid-casa-amici-5g', 'zona': 'mariorossi'}, {'ssid': 'ssid-suocera', 'zona': 'suocera'}, {'ssid': 'ssid-nonni', 'zona': 'nonni'} ] %} {{zone | selectattr('ssid', 'eq', trigger.to_state.state) | map(attribute='zona') | first | default('not_home')}} - alias: "Imposta la zona" service: device_tracker.see data: dev_id: "{{tracker}}" location_name: "{{zona}}"
Analizziamo pezzo per pezzo l’automazione per capirne il funzionamento.
trace: stored_traces: 20
Tramite questo semplice attributo indichiamo ad Home Assistant di conservare le ultime 20 tracce di esecuzione dell’automazione, che possono venirci estremamente utili per effettuare il debug dell’entrata/uscita dalle zone.
trigger: - platform: state entity_id: - sensor.tel_henrik_wifi - sensor.tel_anto_wifi - sensor.tel_erica_wifi_connection to:
Nel trigger indichiamo ad Home Assistant tutti i sensori wifi degli smartphone che abbiamo attivato precedentemente e to:
così che l’automazione venga eseguita ogni volta che lo stato di uno di questi sensori cambi.
action: - variables: tracker: "{{ trigger.from_state.object_id }}"
Nella prima azione impostiamo delle variabili che useremo in seguito. La prima, chiamata tracker
, conterrà l’object_id
dell’entità che ha fatto scattare l’automazione. L’oggetto speciale trigger
, infatti, rappresenta il trigger che ha fatto scattare l’automazione tra tutti quelli configurati e ci permette di acquisirne lo stato precedente, successivo al trigger e, chiaramente, i dati identificativi come entity_id
(per esempio sensor.tel_henrik_wifi
) o object_id
(nell’esempio precedente sarebbe tel_henrik_wifi
)
zona: > {% set zone = [ {'ssid': '<not connected>', 'zona': 'not_home'}, {'ssid': 'ssid-casa', 'zona': 'home'}, {'ssid': 'ssid-guests', 'zona': 'home'}, {'ssid': 'altro-ssid', 'zona': 'negozio'}, {'ssid': 'ssid-ufficio', 'zona': 'ufficio'}, {'ssid': 'ssid-ufficio-guests', 'zona': 'ufficio'}, {'ssid': 'ssid-casa-amici', 'zona': 'mariorossi'}, {'ssid': 'ssid-casa-amici-5g', 'zona': 'mariorossi'}, {'ssid': 'ssid-suocera', 'zona': 'suocera'}, {'ssid': 'ssid-nonni', 'zona': 'nonni'} ] %} {{zone | selectattr('ssid', 'eq', trigger.to_state.state) | map(attribute='zona') | first | default('not_home')}}
L’assegnazione della variabile zona
è il cuore dell’automazione. Tramite template, infatti, dichiariamo un array di dizionari da assegnare alla variabile interna zone
. In ogni record dell’array delimitato da []
, infatti, dichiariamo un dizionario delimitato da {}
che dichiara l’attributo ssid
(che definisce il nome della rete che vogliamo gestire) e l’attributo zona
che definisce il nome della zona che vogliamo attribuire a quello specifico nome rete wifi.
Sostituisci quindi i tuoi SSID che vuoi gestire con i nomi delle zone che hai definito in Home Assistant.
L’ultima riga è la selezione effettiva che restituisce il nome della zona a partire dall’array di dizionari definita e dallo stato del sensore che ha fatto scattare il trigger.
Seguiamone il flusso:
- zone è l’array di dizionari
- tramite pipe
|
lo diamo in pasto alla funzioneselectattr('ssid', 'eq', trigger.to_state.state)
che seleziona il record avente l’attributossid
uguale (eq sta per equal) al valore dello stato dell’entità che ha fatto scattare il trigger (trigger.to_state.state
). Il risultato è un array dei dizionari che rispettano la condizione specificata. - tramite pipe
|
processiamo il risultato conmap(attribute='zona')
che estrae dai dizionari di ogni record il solo attributozona
restituendo un array di stringhe contenenti le zone dei record filtrati precedentemente. - tramite pipe
|
processiamo quindi l’array precedente confirst
che ci restituirà la sola stringa corrispondente al primo record dell’array in ingresso (la selezione restituisce un record solo ma selectattr restituisce un array quindi per avere un valore singolo è necessario prendere un solo elemento confirst
) - infine tramite ancora pipe
|
processiamo il risultato condefault('not_home')
così che se il dato in arrivo è nullo restituiamo il valorenot_home
che corrisponde a quando non siamo né a casa né in una zona definita. Quando questo può accadere? Quando siamo connessi ad una rete wifi avente SSID non definito nell’elenco precedente!
- alias: "Imposta la zona" service: device_tracker.see data: dev_id: "{{tracker}}" location_name: "{{zona}}"
Definiti i valori delle due variabili spiegate sopra non ci resta che effettuare la magia. Con il servizio device_tracker.see, infatti, possiamo impostare un device_tracker (se non esiste lo crea!) avente entity_id device_tracker.QUEL_CHE_PASSIAMO_A_DEV_ID
e come stato quel che passiamo a location_name
.
A dev_id
passiamo il valore della variabile tracker, definita al principio, contenente l’object_id
del sensore, ad esempio sensor.tel_henrik_wifi
corrispondente a tel_henrik_wifi
che quindi creerà o aggiornerà l’entità device_tracker.tel_henrik_wifi
avente lo stato passato a location_name
.
device_tracker.see
saranno visibili al primo cambio di rete wifi del dispositivo e non esisteranno, pertanto, prima che questa operazione avvenga. Per forzarla al momento si può disattivare il wifi del telefono per impostare lo stato del sensore a <not connected>
Aggiungere i device_tracker wifi ognuno al relativo oggetto person di appartenenza
Una volta creati i device_tracker wifi come spiegato nel capitolo precedente dobbiamo modificare gli oggetti person relativi ad ognuno di essi ed includere tali device_tracker in essi come spiegato nel capitolo relativo.
In tal modo sarà la logica presente in Home Assistant ad accorpare le informazioni derivanti da GPS, device_tracker locale (quale Fritz) e device_tracker wifi nel migliore dei modi, valutando qual è l’informazione più aggiornata tra quelle presenti, quando discordi, e aggiornando lo stato dell’oggetto person di conseguenza. Vedrai che tale logica farà un buon lavoro e genererà un risultato affidabile.
Nell’immagine che segue ti mostro un esempio reale del mio sistema che mette a confronto la posizione (a partire dall’alto) dei seguenti elementi:
- Oggetto person
- Posizione del device_tracker dell’app companion
- device_tracker di FritzBox che determina la connessione alla rete di casa
- device tracker wifi come creato precedentemente
- sensore SSID usato dal device_tracker wifi a scopo di controllo
- source, attributo dell’oggeto person che determina da cosa Home Assistant sta prendendo la posizione

Possiamo notare come in diverse occasioni la connessione o sconnessione alla rete wifi abbia impostato una posizione che altrimenti non avremmo potuto avere.
Package auto_detect.yaml
In questo package ci sono varie utilità. Vediamole insieme pezzo per pezzo.
Rilevare la prima persona che si alza la mattina
input_boolean: primo_sceso_scale_today: name: La prima persona è scesa dalle scale oggi? automation: # Primo che scende le scale della giornata - id: 47182d5e-8f95-43f2-9503-fca9dd5fcd3c alias: Persone - Evento - Primo che scende le scale della giornata description: Chiama l'evento quando il primo scende le scale della giornata (presumibilmente la mattina) trigger: - platform: state entity_id: binary_sensor.motion_soggiorno to: 'on' - platform: state entity_id: binary_sensor.motion_cucina to: 'on' condition: - condition: state entity_id: input_boolean.primo_sceso_scale_today state: 'off' action: - alias: "Imposto flag primo_sceso_scale_today" service: input_boolean.turn_on target: entity_id: input_boolean.primo_sceso_scale_today - event: primo_sceso_scale # Alle 6:20 di mattina resetta lo stato di "primo sceso dalle scale oggi", così alla mattina scatta di nuovo scendendo le scale - id: d617f7ff-28eb-4255-9926-b8ead30700b7 alias: 'Persone - Logica - Reset flag primo sceso dalle scale oggi' trigger: - platform: time at: '06:20:00' action: - service: input_boolean.turn_off target: entity_id: input_boolean.primo_sceso_scale_today
Questa automazione, che ha poco a che fare con la posizione, può essere però di ispirazione per diversi utilizzi uguali o simili.
In sostanza, avendo casa su più piani e la zona notte è al primo piano, determino il momento in cui il primo componente della famiglia scende a pian terreno dopo la notte. In quel momento genero l’evento primo_sceso_scale
che uso in diverse automazioni definite in altri package: un briefing di Alexa che dà il buongiorno, fa gli auguri se è il compleanno di qualcuno, se fuori c’è luce del sole alza le tapparelle e mette musica di sottofondo (a seconda di vari parametri).
Alle 6:20 di mattina resetto lo stato di “primo sceso dalle scale” così che l’automazione sopra sia pronta a scattare quando il PIR a pian terreno rileva la presenza di qualcuno.
Sensori più esteticamente gradevoli da mettere in UI
binary_sensor: - platform: template sensors: # Stato di "a casa" di Henrik basato sul suo oggetto Person # un falso "non a casa" dovuto ad un bounce della presenza dell'entità person. L'arrivo a casa è immediato tanto quanto la rilevazione di Fritz, # mentre l'uscita necessita che sia Fritz che il sensore dell'app, ritardato 10 minuti, concordino nello stato di "non a casa" henrik_at_home: friendly_name: "Henrik a casa?" unique_id: "henrik_at_home" device_class: presence value_template: "{{ is_state('person.henrik_sozzi', 'home')}}" entity_picture_template: "/local/henrik{% if not(is_state('person.henrik_sozzi', 'home')) %}_off{% endif %}.jpg"
Questi sensori binari (sopra ne è riportato uno solo sui tre definiti in quanto il principio di funzionamento è identico) servono per utilizzare l’informazione di persona a casa nell’interfaccia utente in quanto creano un sensore di presenza con stato on / off (a casa, fuori casa), con immagine henrik.jpg
quando a casa e henrik_off.jpg
quando fuori casa. Tramite un software di fotoritocco ho generato la seconda immagine modificando la prima in bianco e nero e schiarendola un po’, così che sia evidente anche graficamente lo stato di ogni persona.
L’impostazione di device_class
al valore presence
permette ad Home Assistant di sapere che lo stato di on e off si riferiscono alla presenza nominando tale valore in modo opportuno.
Questi sensori sono pratici da inserire nelle card o nei badge delle viste, ottenendo un risultato come questo:

Quale device_tracker sta determinando la posizione dell’oggetto person?
template: - sensor: # Sensori person_NAME_source che determinano nel tempo quale sorgente viene usata dall'oggetto person per determinare la posizione - name: Person Henrik Source unique_id: 8693c26f-d00d-493b-b129-f79a03d97deb state: "{{ state_attr('person.henrik_sozzi', 'source')[15:] }}"
Anche in questo caso riporto uno solo dei sensori template in quanto gli altri funzionano allo stesso modo. Le entità create (sensor.person_henrik_source
nel codice sopra) contengono il valore dell’attributo source dell’oggetto person, che contiene il nome del device_tracker usato per determinare la posizione dell’oggetto person. Il codice [15:0]
serve a prelevare da tale valore dal quindicesimo carattere così da saltare il dominio del sensore. In tal modo il valore restituito è più compatto e sarà, per esempio, tel_henrik_wifi
e non device_tracker.tel_henrik_wifi
.
Questo sensore è usato nella vista grafica dello stato dei device_tracker mostrata al termine del capitolo riguardante il tracker wifi.
Switch per impostare lo stato della posizione ad alta accuratezza dell’app
switch: - platform: template switches: # Swtich tel_NOME_hq_gps per rilevare e modificare lo stato di alta qualità nella rilevazione della posizione dei telefoni tel_henrik_hq_gps: friendly_name: Tel Henrik HQ GPS unique_id: e67c8229-65f9-40b1-9f6c-c8c983ccb69d value_template: "{{ is_state('binary_sensor.tel_henrik_high_accuracy_mode', 'on') }}" availability_template: "{{ states.binary_sensor.tel_henrik_high_accuracy_mode.state is defined }}" turn_on: service: notify.mobile_app_tel_henrik data: message: "command_high_accuracy_mode" title: "turn_on" turn_off: service: notify.mobile_app_tel_henrik data: message: "command_high_accuracy_mode" title: "turn_off"
Di nuovo questo è uno degli switch dichiarati per ogni persona, tutti funzionano allo stesso modo.
Questi switch permettono, inserendoli in interfaccia grafica, di mostrare se la posizione dell’app della persona sta usando la posizione di alta accuratezza oppure quella normale. Premendo è possibile inoltre impostarne lo stato così da specificare in casi particolari se si desidera una posizione più precisa.
Ricorda anche che attivando la posizione ad alta accuratezza il consumo della batteria sarà più elevato.
Definizione del gruppo “Qualcuno è a casa?”
group: # Gruppo per determinare se qualcuno è a casa (contiene solo i telefoni che certamente non sono lasciati a casa) anyone_at_home: name: Qualcuno è a casa? entities: - binary_sensor.henrik_at_home - binary_sensor.antonella_at_home - binary_sensor.ankie_at_home
Questo è un semplice gruppo che contiene tutti i binary sensor dichiarati sopra relativi a tutti i telefoni tenuti sempre con sè. Attenzione a ragionare bene su quali dispositivi includere: lo smartphone di mia figlia, ad esempio, non l’ho incluso in quanto quando lei è a scuola il telefono è a casa (e farebbe risultare qualcuno a casa, se incluso nel gruppo).
Questo gruppo può poi essere utilizzato per qualunque tipo di automazione in altri package, ad esempio per modificare la temperatura delle zone di casa quando qualcuno rientra e viceversa abbassarle quando non c’è nessuno a casa.
Il suo stato, infatti, diventa on
se lo stato di almeno una qualsiasi delle entità definite è on
.
Generiamo eventi “ultimo esce da casa” e “primo entra a casa”
automation: # Chiama l'evento uscita ultimo da casa - id: 86680100-fb55-4867-9f24-e8133ccc74e4 alias: Persone - Evento - Generazione - Uscita ultimo da casa description: Chiama l'evento uscita ultimo da casa trigger: - platform: state entity_id: group.anyone_at_home to: 'off' action: - event: uscita_ultimo_da_casa # Chiama l'evento arrivo del primo a casa - id: cd3842d0-39d6-45a9-8f0c-6d18852e32fa alias: Persone - Evento - Rientro del primo a casa description: Chiama l'evento rientro del primo a casa trigger: - platform: state entity_id: group.anyone_at_home to: 'on' action: - event: arrivo_primo_a_casa
Queste due automazioni generano gli eventi uscita_ultimo_da_casa
e arrivo_primo_a_casa
.
Tali eventi possono essere utilizzati da qualunque altro package per effettuare delle automazioni in questi due specifici casi, ovvero quando l’ultima persona esce da casa (lasciandola quindi vuota) e quando il primo rientra a casa.
Pensiamo ad esempio allo spegnimento delle luci in modo automatico quando tutti sono fuori casa. O all’inserimento / disinserimento automatico dell’antifurto. O ancora ad alzare / abbassare le tapparelle in modo automatico.
Gestire tutti questi casi con trigger basati su questi eventi ci permette di tenere separati i package di luci, antifurto e tapparelle da questo e utilizzare un evento che ha una specifica logica definita una volta sola.
Altro vantaggio è rendere molto chiara e comprensibile la condizione di attivazione del trigger in altri package sulla base delle logiche definite qui. uscita_ultimo_da_casa
, infatti, è auto esplicativo.
Se in futuro volessimo modificare la logica di definizione di “a casa” o il numero delle persone gestite sarà sufficiente modificare questo package e tutti gli altri che fanno uso di questi eventi non dovranno essere modificati! Un bel vantaggio!
Consiglio questo approccio a livello generale dove abbia senso creare degli eventi logici disgiunti dalle automazioni sottostanti.
Un aiuto dalla telecamera per rilevare lo stato di “a casa” prima di arrivare alla porta
automation: # Quando rilevo movimento dalla telecamera frontale forzo una rilevazione della posizione GPS delle app di chi non risulta a casa # (perchè potrebbe essere lui/lei che sta entrando. Così facendo l'app rileverà la posizione prima di arrivare alla porta di casa) - id: 18b09f9d-7d52-4d09-9d8a-42d789ffcc80 alias: "Persone - Logica - Forzo rilevazione GPS quando movimento da cam front" trigger: - platform: state entity_id: binary_sensor.front_cam_motion from: "off" to: "on" action: - alias: "Se Henrik non è a casa forza un rilevamento GPS" choose: - conditions: - condition: not conditions: - alias: "Henrik è a casa?" condition: state entity_id: person.henrik_sozzi state: "home" sequence: - service: notify.mobile_app_tel_henrik data: message: "request_location_update" - alias: "Se Antonella non è a casa forza un rilevamento GPS" choose: - conditions: - condition: not conditions: - alias: "Antonella è a casa?" condition: state entity_id: person.antonella state: "home" sequence: - service: notify.mobile_app_smartphone_antonella data: message: "request_location_update"
Ultima automazione definita in questo package è un helper che funziona abbastanza bene nel mio caso.
Quel che fa, in sostanza, è forzare una rilevazione della posizione delle persone che non risultano a casa (e che possono far cambiare lo stato di group.anyone_at_home
definito sopra) quando viene rilevato un movimento dalla telecamera che inquadra il mio vialetto di ingresso.
In tal modo, se l’app companion non ha ancora rilevato il rientro a casa prima di entrare dal cancello di casa, sarà il movimento della telecamera ad imporre un refresh della posizione a chi non risulta a casa, facilitando la possibilità di essere rilevato a casa PRIMA di arrivare alla porta di ingresso di casa.
Chiaramente è una condizione particolare che può andar bene solo se hai una abitazione indipendente come la mia ma è un concetto che può essere utilizzato a più ampio spettro.
Perchè questa accortezza? Perchè quando una persona rientra a casa l’antifurto viene automaticamente disinserito, le tapparelle (se fuori c’è luce), si accende la luce frontale di casa e quando apriamo la porta di casa Alexa ci saluta per nome e accende la luce dell’ingresso, mettendo poi una musica di sottofondo (e facendoci gli auguri se è il compleanno di chi sta entrando).
E’ quindi importante fare il possibile affinchè lo stato di “a casa” venga rilevato a tutti i costi prima di entrare in casa. E posso dire che tra rilevazione tramite wifi, come spiegato sopra, app companion e questa accortezza il 99,9% delle volte funziona senza problemi.
Package zone_notify.yaml: notifiche all’arrivo / rientro dal lavoro
L’ultimo package che prendiamo in esame gestisce le notifiche tramite Alexa e app (sempre tramite multinotify) quando un componente della famiglia arriva o esce dal lavoro.
Magari ad alcuni può sembrare una violazione della privacy ma io e mia moglie le troviamo molto comode in quanto chi di noi è a casa riesce ad organizzarsi meglio con i tempi di preparazione pranzo / cena e gestione delle bambine. Se si è tutti d’accordo (e non c’è niente da nascondere 😉 ) credetemi che è una bella comodità. Inoltre abbiamo dei super device_tracker
potenziati con il wifi, perchè non sfruttarli?!
Il primo blocco definisce due input_boolean
:
input_boolean: notifiche_lavoro: name: Notifiche and/rit lavoro icon: mdi:briefcase-outline henrik_ritorno_a_pranzo: name: Henrik ritorna a casa a pranzo icon: mdi:pasta
notifiche_lavoro
è pensato per essere inserito nell’interfaccia grafica e poter quindi abilitare o disabilitare tutte le notifiche di questo package.
henrik_ritorna_a_pranzo
è anch’esso pensato da inserire in una card e serve per determinare se io rientro a pranzo oppure no (prima della pandemia difficilmente rientravo a pranzo ma con i ristoranti chiusi ho iniziato a farlo e lascio quindi questo flag impostato, attivando la notifica del rientro al pranzo).
L’automazione di rientro dal lavoro (variante semplice)
Iniziamo con analizzare l’automazione più semplice: quella di mia moglie che esce dal negozio (l’altra di mia moglie ha lo stesso principio):
automation: - id: 489203b7-4720-4e73-8801-e130c889dfe9 alias: "Persone - Notifica - Antonella esce dal negozio" description: "Avvisa tramite Alexa quando Anto esce dal negozio" trigger: - entity_id: person.antonella from: Negozio platform: state condition: - condition: template value_template: "{{ (as_timestamp(now()) - as_timestamp(state_attr('automation.persone_notifica_antonella_arriva_in_negozio', 'last_triggered') | default(0)) | int > 1800)}}" - condition: template value_template: "{{ (as_timestamp(now()) - as_timestamp(state_attr('automation.persone_notifica_antonella_esce_dal_negozio', 'last_triggered') | default(0)) | int > 1800)}}" - condition: state entity_id: input_boolean.notifiche_lavoro state: 'on' action: - service: script.multinotify data: title: Antonella sta tornando message: Antonella è uscita dal negozio! alexa_message: '<say-as interpret-as="interjection">yippii</say-as>. La mamma è uscita dal negozio!' alexa_target: media_player.ovunque notify_app: notify.all_devices channel: people-fromwork group: people tag: "{{trigger.to_state.name}} home"
Partiamo dal trigger: sull’oggetto person
di mia moglie quando lo stato passa da Negozio
a qualunque altra cosa.
Ci sono tre condizioni. L’ultima è quella più semplice: se le notifiche di questo tipo sono attivate tramite l’input_boolean configurato all’inizio.
Le prima due, invece, sono due template che permettono l’esecuzione dell’automazione solo se il tempo trascorso dall’ultima volta che questa o l’automazione di arrivo in negozio di mia moglie è più di 1800 secondi (mezz’ora).
Ricorda questo “trucchetto” che puoi usare in molti altri contesti dove non vuoi che un’automazione venga attivata più volte di seguito in un lasso temporale a scelta. Sfruttiamo l’attributo last_triggered
che restituisce la data/ora dell’ultima volta che l’automazione è stata valutata, ovvero in cui un trigger è scattato. Prendiamo la data/ora corrente now()
, l’attributo last_triggered
, li trasformiamo in timestamp e sottraendo il secondo dal primo otterremo il numero di secondi trascorsi.
Questo evita i possibili bounce di stato possibili per diverse ragioni o ad esmepio che l’automazione riscatti se di ritorna indietro a prendere una cosa dimenticata e si esce di nuovo.
Nell’action richiamiamo lo script multinotify usando un testo per l’app e uno con una interiezione da far pronunciare a tutti i dispositivi Alexa di casa ed inviare a tutte le app.
L’automazione di rientro dal lavoro (variante più complessa)
Vediamo ora l’automazione che notifica il rientro a casa della mia persona, con qualche condizione in più che può risultare utile anche a te:
automation: # Arrivo al lavoro / rientro dal lavoro - id: 49f72ed4-1b6c-4729-baf9-edaa86fd072f alias: "Persone - Notifica - Henrik ritorna dal lavoro" description: "Quando Henrik esce dalla zona lavoro dopo le ore 19:00 annuncia il ritorno a casa con Alexa" trigger: - entity_id: person.henrik_sozzi from: Ufficio platform: state condition: - condition: template value_template: "{{ (as_timestamp(now()) - as_timestamp(state_attr('automation.persone_notifica_henrik_ritorna_dal_lavoro', 'last_triggered') | default(0)) | int > 1800)}}" - condition: state entity_id: input_boolean.notifiche_lavoro state: 'on' - condition: or conditions: - condition: time after: '19:00:00' before: '22:00:00' weekday: - mon - tue - wed - thu - fri - condition: and conditions: - condition: state entity_id: input_boolean.henrik_ritorno_a_pranzo state: 'on' - condition: time after: '11:40:00' before: '14:00:00' weekday: - mon - tue - wed - thu - fri action: - service: script.multinotify data: title: "Henrik sta tornando" message: "Henrik sta tornando dall'ufficio!" alexa_message: '<say-as interpret-as="interjection">yippii</say-as>. Papà sta tornando dall ufficio!' alexa_target: media_player.ovunque notify_app: notify.all_devices channel: people-fromwork group: people tag: "{{trigger.to_state.name}} home"
La sostanza è uguale alla precedente ma in più ha delle finestre temporali espresse nelle condizioni così riassumibili:
- Se esco dal lavoro dal lunedì al venerdì tra le 19:00 e le 22:00 oppure
- Se esco dal lavoro dal lunedi al venerdi tra le 11:40 e le 14:00 e
l'input_boolean
henrik_ritorno_a_pranzo
èon
Questo perchè a me capita di uscire dal lavoro durante la giornata per interventi presso clienti o commissioni, in questo modo mi assicuro che l’orario sia uno di quelli dove rientro a casa.
Una notifica generica ogni volta che una persona monitorata entra o esce da casa
# Qualcuno arriva a casa o parte da casa - id: 0bb4febe-f9b1-445c-9b27-ac9793c4a617 alias: "Persone - Notifica - Qualcuno arriva o parte da casa" trigger: # To: home - platform: state entity_id: person.henrik_sozzi to: "home" - platform: state entity_id: person.antonella to: "home" - platform: state entity_id: person.erica to: "home" - platform: state entity_id: person.angelo to: "home" - platform: state entity_id: person.ankie to: "home" - platform: state entity_id: person.anna to: "home" - platform: state entity_id: person.giuseppe to: "home" - platform: state entity_id: person.paola to: "home" # From: home - platform: state entity_id: person.henrik_sozzi from: "home" - platform: state entity_id: person.antonella from: "home" - platform: state entity_id: person.erica from: "home" - platform: state entity_id: person.angelo from: "home" - platform: state entity_id: person.ankie from: "home" - platform: state entity_id: person.anna from: "home" - platform: state entity_id: person.giuseppe from: "home" - platform: state entity_id: person.paola from: "home" action: - service: script.multinotify data: notify_app: notify.mobile_app_tel_henrik title: > {% if trigger.to_state.state == 'home' %} {{trigger.to_state.name}} è a casa {% else %} {{trigger.to_state.name}} non è più a casa {% endif %} message: > {% if trigger.to_state.state == 'home' %} {{trigger.to_state.name}} è ora entrato/a a casa {% else %} {{trigger.to_state.name}} è ora uscito/a da casa {% endif %} channel: > {% if trigger.to_state.state == 'home' %} people-tohome {% else %} people-fromhome {% endif %} group: people tag: "{{trigger.to_state.name}} home"
Con questa automazione, che ha come trigger il passaggio da home
a qualunque altro valore o da qualunque altro valore ad home
delle persone monitorate (tramite app o anche solo tramite device_tracker
locale come Fritz che rileva il collegamento alla propria rete dello smartphone), possiamo ricevere una notifica contenente il nome della persona che è arrivata o è appena andata via da casa nostra.
Questa automazione, nata a scopo di debug, l’ho poi trovata utile per diversi motivi. La notifica inviata tramite l’app ha title
e message
contenenti il nome della persona e channel
differente a seconda che sia un ingresso o un’uscita. In tal modo possiamo assegnare una suoneria differente ai due tipi di notifica.
Il group
è sempre people
, così che questo tipo di notifiche si raggruppi con le altre notifiche dello stesso tipo.
Infine il tag
è composto dal nome della persona più la scritta home, così che sia la stessa per persona, sia per l’ingresso che per l’uscita. Tramite questo stratagemma se una persona va e viene diverse volte da casa sul telefono vedremo solo la notifica dell’ultima azione e non tutta la storia della giornata.
Conclusione
Ricordando la premessa che queste automazioni potrebbero non andar bene a tutti per diversi motivi come il momento in cui il tracker Fritz (o similare) si accorge della vostra presenza a casa o della presenza o meno di access point Wifi da tracciare o altre particolarità ancora, proprie di ogni differente abitazione, spero però di aver condiviso un modo di approcciarsi alla questione che ti abbia dato degli spunti per aiutarti a costruire le automazioni più idonee alla tua specifica situazione.
Nel mio caso posso garantire che quanto spiegato in questo articolo è in uso da oltre un anno e funziona davvero bene!
Ti auguro che anche nel tuo specifico caso riesca a trovare un equilibrio tra tempi ed esigenze come nel mio così da poter utilizzare le informazioni circa la posizione di ognuno in specifiche automazioni di casa tua.
Ti è piaciuto questo contenuto?
Se ti è stato utile l’articolo che hai letto potresti pensare di darmi una mano offrendomi qualche caffè!
Oltre ad aiutarmi a star sveglio nelle nottate di ricerche e scrittura mi daresti una mano concreta nel sostenere le spese del server web, incentivandomi a produrre altri contenuti di qualità.
Puoi usare Paypal:
Oppure Buymeacoffee:
Ottimo articolo, solo una correzione: TADO condivide la posizione in termini di distanza da casa e gradi (qualche info sui campi di bearingFromHome su https://blog.scphillips.com/posts/2017/01/the-tado-api-v2/ e interessante progetto di cpoetter su GitHub che qualche anno fa funzionava egregiamente). Con opportuna formula matematica puoi arrivare alla posizione. Chiaramente può essere che l’integrazione non la supporti.
Grazie, interessante l’informazione su Tado. Effettivamente ho visto l’articolo che citi ed effettivamente i gradi sono espressi con parecchia precisione tanto che potrebbe essere in effetti possibile calcolare una posizione. Anche se è un po’ overkill in quanto ci sono metodi più semplici. Ma volendo usare un’app che già lo fa potrebbe essere un’opzione. Non ho verificato (perchè non uso il tracker Tado in HA) se l’integrazione utilizza tali dati e se li utilizza con sufficiente precisione (ad esempio se arrotonda al grado intero è inutile). Cmq. interessante, grazie!
Buongiorno,
seguo con molto interesse il blog e non posso che fare i complimenti per come è scritto e come sono esposte e trattate le tematiche.
Per quanto riguarda il tracking la soluzione con iBeacon come la vedi? Posseggo anch’io il fritz 7590 ma la rilevazione non mi ha mai convinto del tutto, risultando spesso fuori casa quando invece non lo ero; non ho ancora provato i settaggi che proponi sopra, mea culpa… ho iPhone, se può essere indicativo
Grazie, un saluto
Grazie Alberto! iBeacon non l’ho mai provato perché essendo dell’altra sponda (Android) non ho mai avuto il modo. Però può essere un valido ausilio di rilevazione della zona se hai iPhone, immagino. Io stavo pensando ad una soluzione con un ESP8266 in zona portachiavi all’ingresso di casa e un portachiavi Tile per ogni mazzo di chiavi per rilevare con certezza la presenza / assenza a casa delle persone, da aggiungere agli altri criteri dell’articolo. Comunque ogni sistema può essere usato, basta conoscerne i limiti e le peculiarità per integrarne i dati al meglio.
Ah, mi ero dimenticato di rispondere alla seconda parte… Il device tracker Fritz è quanto di più affidabile abbia per rilevare a casa / fuori casa. So che iPhone da una certa versione ha introdotto un meccanismo anti tracciamento che randomizza il mac address ogni tanto (che può essere il motivo per cui non ti convince 😉 so che può essere disattivato ma non chiedermi dove… Provalo bene perchè funziona in modo ottimo!
Ti confermo che la colpa è esattamente del meccanismo che dici, sostanzialmente dopo un tot diventa “invisibile” per il Wi-Fi facendo credere ad home assistant di essere fuori casa. Per 10 euro ho preso tempo fa un dongle iBeacon per provare (ma è sempre mancato il tempo), che con OwnTracks dovrebbe aiutare nello scopo. Se funziona bene ti aggiorno. Grazie, un saluto
Ciao nel caso la cartella package non è presente basta crearla? Per inserire i file?
Il tutto funziona con home assistant 2021.9.6?
Fabrizio
Ciao Fabrizio. Si, la cartella package va creata. Non serve che si chiami necessariamente così, puoi chiamarla anche “pippo” o puoi crearne più di una. Serve a farti un’organizzazione dei file corretta. L’importante è che la (o le) richiami con il nome corretto dal configuration.yaml con il comando
packages: !include_dir_named packages
.Il tutto funziona con l’ultima versione di HA, la sto usando correntemente così come è stata scritta nell’articolo 🙂
Ciao, mi sto avvicinando ora al mondo HA. Leggo con interesse il tuo articolo poiché devo realizzare una funzione che, tramite HA, mi permetta di comunicare ad un PLC Schneider la presenza in casa di qualche membro della famiglia. Ora, la comunicazione funziona perfettamente, mi manca l’automatismo. Vorrei sfruttare questa guida che hai redatto ma mi areno subito alle funzioni base. Quindi, domanda 1:
– id: 46ff3d01-3f76-4f8b-a128-558a4c26a6ff —> E’ un ID casuale o lo generi in qualche modo preciso?
– Il nome della SSID da inserire nel file Secrets. La mia SSID è un nome con degli spazi (FRITZ!Box 4040 2,4GHz. C’è una notazione precisa per includere gli spazi?
Grazie mille.
Andrea
Ciao Andrea,
l’id è un valore casuale, l’importante è che siano tutti diversi gli id delle automazioni per permettere di identificarli in modo univoco. E’ opzionale, puoi anche non metterlo ma in tal caso non potrai guardare la traccia storica di esecuzione che è la manna dal cielo per capire perchè un’automazione non abbia funzionato a regime.
Io ho utilizzato semplicemente un GUID, che è la cosa univoca più veloce da generare (usando VSCode basta installare un Plugin che generi GUID e con un click lo generi nel codice)
Per quanto riguarda la seconda domanda, vale per qualsiasi valore in qualunque file di configurazione yaml di Home Assistant: basta che metti la stringa tra apici singoli o doppi. Il tuo valore sarà quindi qualcosa come:
wifi_ufficio: "FRITZ!Box 4040 2,4GHz"
Ciao, grazie della risposta. Credo di aver fatto tutto bene ma l’automazione non funziona.
L’ho scritta così:
# ANDREA WiFi CASA OFF
– id: cd4f5929-bc8a-4197-88ad-3d81a7a195ac
alias: Tracker Andrea Wifi Casa OFF
description: Imposta lo stato not_home quando il telefono si scollega dal WiFi di casa
trigger:
– entity_id: device_tracker.mi_9
from: !secret SSID_Casa
platform: state
action:
– service: python_script.set_state
data:
entity_id: device_tracker.mi_9
state: not_home
source_type: wifi
Ho testato lo script python e quello funziona perfettamente ma l’automazione… col cavolo!
Per testarla ho provato a disconnettermi dalla WiFi di casa ma niente, non ne vuole sapere.
Cosa sbaglio??
Grazie
Hai sbagliato entità nel trigger! Non devi usare il device Tracker, che mappa dove sei, ma il sensore che dice a quale ssid sei collegato. Controlla di averlo attivo dall’app sul telefono in Configura App, gestione sensori, Connessione Wifi. Usa quel sensore come trigger.
Ciao, grazie ancora! Ho modificato il trigger ma non funziona nulla. Ho la sensazione che le automazioni non vengano proprio eseguite. Ho attivato altri sensori del telefono (info batteria) ma il loro aggiornamento su HA é lentissimo e spesso non si aggiornano. Dove sbaglio? Grazie
Puoi verificare dal log di esecuzione della automazione che si accede da impostazioni -> automazioni e cliccando sull’icona con un orologio che torna indietro relativo alla tua automazione incriminata.
Puoi verificare che tu non abbia delle limitazioni energetiche nel sistema operativo relative all’app di Home Assistant che ne limitano gli aggiornamenti in background.
Ma soprattutto se questi sono i tuoi problemi ti consiglio di fermarti un attimo, partire da cose più semplici, accendere una luce con un sensore di movimento, avanzare per piccoli passi e poi, una volta acquisita la consapevolezza del sistema, di realizzare automatismi più complessi come questo. Ci metterai di più ad arrivare a destinazione ma una volta arrivato starai viaggiando veloce e potrai tagliare nuovi e più lontani traguardi con facilita…
Ciao, grazie della risposta. In realtà ho scoperto che le automazioni funzionano benissimo ma i problemi sono nell’App del telefono che non aggiorna lo stato dei sensori a meno che la App stessa non sia attiva in primo piano. Se spengo la WiFi del telefono, ad esempio, il suo stato non viene aggiornato a meno che non apro l’App dopo aver attivato la VPN del telefono. Credo quindi che il problema sia nella configurazione dell’App. Eppure le ho dato tutti i permessi, l’esecuzione in background, tutto di tutto. Stesso problema nel telefono di mia moglie. Riguardo al tuo consiglio delle cose semplici.. in realtà sono partito proprio da quelle. Interruttori, sensori di presenza, monitor consumi e comunicazione Modbus TCP/IP con il PLC di casa mia. Tutto per passi. Ora mi manca la gestione delle presenze in casa per attivare del codice scritto nel PLC per la gestione del ricambio aria e della climatizzazione. Grazie comunque del tuo aiuto!
Sul mio Samsung devo escludere l’app dall’ottimizzazione batteria altrimenti si comporterebbe come descritto. Ma ogni produttore chiama la cosa in modo diverso quindi non so darti una indicazione precisa. Ma l’area di ricerca è quella.
E ti garantisco che a me e mia moglie, Xiaomi A2 Lite vecchiotto, funziona molto bene.
Io ho uno Xiaomi Mi9 e mia moglie un Redmi 5 Plus (sempre Xiaomi). Tutto attivato ma non ne vuole sapere di funzionare…
Grazie mille, il tuo articolo è stato molto illuminante.. complimenti!!
Disinstallata l’app da entrambi i telefoni. L’ho riconfigurata totalmente, ho attivato tutti i permessi, ho eliminato il risparmio energia, ho attivato tutte le condivisioni possibili. Ho perso un pomeriggio intero. Il nulla più totale. Se apri l’app e sei collegato (VPN se sono fuori casa) allora tutto si aggiorna. Altrimenti nulla di nulla. Così è scoraggiante. Non sono un profano di tecnologia e/o programmazione, lo faccio di mestiere da 20 anni. Mai avuto tutti questi problemi a far funzionare una cosa che, fondamentalmente, è banale. Se la sensoristica funziona bene, risponde correttamente, fare automazioni non è complesso, basta un po’ di pratica e si riesce. Ma con un funzionamento così ‘approssimativo’ è impossibile anche provare a fare qualcosa di funzionante. Anche perché cadi nell’errore di pensare che una automazione non funziona mentre invece è il sensore trigger a non funzionare. Molto deluso.
Scusa se ti ho mal valutato quando ti ho consigliato di iniziare dalle cose semplici, ora ho un quadro migliore della tua situazione. Ti posso dire una cosa sola: tieni duro. Home Assistant è un gran software. Nessuno ti fa pagare niente, è open source e con tante teste. Sebbene coordinato non sempre tutto è lineare come sarebbe un software commerciale ma ha davvero tanta potenzialità. In casa mia è diventato una cosa che non solo apprezza ma da cui dipende anche mia moglie 🙂 E più lo usi più entri in un tunnel senza fondo. Non farti scoraggiare da un disguido. Comincia magari trovando una strada alternativa (Life360?) o manuale, poi ci lavorerai sopra per capire dove hai problemi.
Detto questo, perchè la VPN? Non potrebbe essere lei che causa qualche disguido? Inoltre se apri l’app da dentro casa in wifi l’interfaccia funziona? Non va solo in background e solo quando sei collegato in wifi? C’è qualcosa di strano da capire. Hai configurato correttamente i due indirizzi (esterno e interno con nome wifi)?
Cerca di capirlo non con le automazioni, che hai sempre mille dubbi sui trigger all’inizio, ma guardando lo storico dei sensori, il wifi nel tuo caso. Così vedi quando e come era.
Poi magari hai trovato un problema con il tuo smartphone, puoi eventualmente provare ad aprire un issue nel repo github dell’app: https://github.com/home-assistant/android
Anch’io in passato ho avuto qualche problema con l’aggiornamento in background ma normalmente mi funzionava. Da diversi mesi non ho più mezzo problema.
Ciao, grazie del tempo che mi dedichi. Allora, quando sono in casa è connesso con il WiFi, tutto funziona alla grande. Appena mi disconnetto (ad esempio perché me ne sono andato) ecco che non si aggiorna più nulla. Se attivo la vpn torna tutto a funzionare perché, di fatto, é come se fossi connesso al WiFi di casa. Uso la vpn da sempre per avere accesso ad altri dispositivi nella mia rete domestica e non ho mai avuto problemi. Ora, tu mi parli di 2 indirizzi, uno esterno ed uno interno. Boom!! Forse il problema é li. Da me, nella app, ho configurato URL di home Assistant e URL di connessione interno sullo stesso indirizzo. SSID WiFi della connessione domestica impostato con il nome corretto. Come imposto URL di home Assistant per accedere dall’esterno senza usare VPN?? Perché allora il problema é questo, senza VPN attiva la app non riesce a comunicare con il server di HA!!! Ecco il problema!! Grazie!!!
Ah ecco, l’ho capita al contrario, cioè che non funzionasse collegata al wifi, invece era al contrario: non funziona quando connessa all’esterno! Così è tutto più chiaro!
È importante fare in modo che tu possa accedere ad Home Assistant da fuori casa e per farlo ci sono due modi: uno semplicissimo (quello che uso io): accedi da Impostazioni -> Home Assistant Cloud e attiva Nabu Casa. Costa 5$ (meno di 5€) al mese per un ottimo servizio che ti permette di esporre il tuo HA in sicurezza con certificato https in internet senza Nat del router (funziona anche se non hai un IP pubblico, fa connessione inversa) e ti permette di collegare HA ad Alexa e Google Home con un click. Inoltre contribuisci a fare stare in piedi il progetto di Home Assistant finanziando gli sviluppatori (per conto mio se li meritano tutti, hanno trasformato casa mia… 😜)
L’altra via è gratis ma più impervia, trovi diverse guide online: comporta crearsi un certificato da sè, aprire una porta sul router e usare un servizio tipo duckdns.
Fatta una di queste due cose è importante che nella configurazione app tu imposti in URL di connessione interno l’indirizzo con cui raggiungere HA da dentro la tua rete wifi (esempio: http://192.168.68.250:8123/ ), URL di Home Assistant l’indirizzo con cui raggiungerlo da internet (se fai Nabu Casa ti danno loro l’indirizzo) e in SSID della rete domestica il nome esatto case sensitive della rete wifi di casa, così l’app sa che quando il telefono è connesso a QUELLA rete usa l’url interno, altrimenti usa quello esterno (“URL di Home Assistant”)
La VPN non può essere un metodo perché la attivi a bisogno, l’app ha necessità di comunicare costantemente per aggiornare i sensori di posizione, wifi, stato batteria, ecc.
Ovviamente la VPN è cosa ottima per far manutenzione da remoto al sistema ad esempio accedendo alla configurazione attraverso samba con VSCode o ai device che hai collegato in rete.
Dai che ci sei 😉
Ci sono riuscito!!!
Adesso i sensori si aggiornano immediatamente!!
Per risolvere il problema ho utilizzato una delle guide InDomus (https://indomus.it/guide/collegarsi-da-remoto-a-home-assistant-installato-con-distribuzione-hassio/) utilizzando il servizio gratuito DuckDns, istallando l’omonimo componente aggiuntivo su HASSIO e configurando lo stesso servizio sul router (attivando poi il port-forwarding sulla porta TCP 8123 all’indirizzo del mio Raspberry). Funziona perfettamente!!! Comunque ti ringrazio del tuo prezioso aiuto. Se mai ci dovessimo incontrare ti devo una bevuta!!!
Ci conto! 😜🍻
Ciao, sfrutto ancora le tue conoscenze per una domandina semplice. Leggendo questo tuo articolo vedo che sfrutti il parametro ‘entity_picture_template’ per gestire le immagini delle persone in casa. In quel cartella devono risiedere le immagini?
Ciao, le immagini di qualunque tipo vanno messe nella /config/www
Ciao, un ultima domandina. Tutto sembra funzionare, le automazioni vengono avviate correttamente. Ma quando viene eseguita l’automazione scatenata dall’aggancio del mio telefono alla wiFi dell’ufficio, la mia posizione rimane sempre “Fuori casa”. Anche quella di mia moglie (non assoggettata a nessuna automazione) viene sempre vista come “Fuori casa”. Ho riavviato il Raspberry per sicurezza ma non cambia nulla. Hai un suggerimento?
Lascia perdere la mia domanda. Ho preso un abbaglio. Tutto funziona alla grande!!
Ottimo 😁👍🏻
Ciao, ti faccio una domanda. Su che piattaforma hardware stai usando HA? Io la sto eseguendo su un Raspberry Pi 3 B+. Ho caricato alcuni add-on (VS Code, InfluxDB, Grafana, DuckDNS) ed ho notato che la RAM di sistema è occupata al 95%. Inoltre, ogni tanto, non riesco ad accedere tramite browser (sia in casa che fuori casa). L’altra mattina mi sono collegato con l’app e stesso problema (la sera prima tutto funzionava). Tant’è che nel grafico storico dei sensori ho un ‘buco’ di qualche ora! Hai idea da cosa possa dipendere? Ti è mai successo? Forse il Pi 3 B+ è sottodimensionato? Grazie
Ciao, io su Raspberry Pi 4 con 4GB di RAM. Come Addon ho File Editor, Mosquitto broker, NetDaemon (al momento spento), Samba Share, SQlite Web, SSH & Web Terminal. L’utilizzo di RAM è 25%. L’utilizzo medio di CPU è del 2%.
Il fatto che la RAM sia al 95% è la probabile causa dei tuoi problemi, l’rpi3b+ ha 1GB di RAM che, se non installi addon, può anche andar bene ma certamente è sottodimensionato, anche per velocità. InfluxDB e Grafana non sono leggeri, direi che lo staoi spremendo troppo.
Ti consiglio, se hai qualche soldino in più, di passare ad un MiniPC/NUC che è certamente la scelta migliore (magari virtualizzando con ProxMox). Altrimenti almeno un Rpi4 2GB direi che è il minimo.
Ti consiglio anche un SSD (leggi questo mio articolo!) in quanto l’SD prima o poi ti abbandona…
Grazie! Gentilissimo come sempre. Allora rimuovo influx e grafana. Poi mi faccio le ossa con il mio pi3 e, quando ho raggiunto ciò che voglio, faccio il salto ad un hardware più potente!!
Ciao Henrik
Un consiglio se posso chiedere…
Non ho un Router FritzBox ma, come molti in italia, un onesto TIM HUB .
Non riesco a identificare il servizio che esponga i mac-adress, o qualche cosa di simile, dei device collegati (anche se molto probabilmente c’è perchè con l’App TIM Modem ho l’elenco dei connessi
Non mi resta quindi che cercare una strada diversa per “leggere” la presenza nella intranet di casa del cellulare, ovviamente dopo avergli assegnato un indirizzo ip Statico/Prenotato.
Ed ecco la richiesta di consiglio che estendo anche a tutti i tuoi lettori… : Nmap o Ping?
Leggendo in giro ci sono pro e contro:
Il PING ha bisogno di pochissime risorse del server ma per contro alcuni cellulari non rispondono, NMAP è più esoso, ma forse qualche device in più lo becca…
?
Grazie!
Ciao, da quanto ne so non esiste una integrazione per modem Tim. E francamente se fossi uno che fa integrazioni non ci spenderei il mio tempo in quanto potrebbe cambiare da oggi a domani, fanno un nuovo accordo con un altro produttore e cambiano tutto. Fritz invece ha una sua linea di prodotti e hanno delle api dichiarate con librerie per utilizzarle.
Riguardo la domanda finale ti consiglio di provare prima ping. Se risponde alle tue esigenze stai con quello che appunto è più leggero per l’host e per la rete. Altrimenti nmap potrebbe funzionare meglio ma personalmente sul rpi4 ho avuto problemi, a volte andava in timeout e non riusciva a completare la scansione ma poi avendo preso il Fritz ho risolto ogni problema in tal senso (il suo device Tracker è fantastico e a risorse zero!)
Cmq se proverai nmap fermati a studiare un po’ la sua sintassi e come funziona in quanto ha diverse modalità che vanno da solo ping ad una rilevazione più complessa e pesante, con diverse vie di mezzo. Fai le tue prove, non hai altra scelta 😉
(…oppure… Fritz…)
Grazie! Purtroppo passare a Fritz non me la sento, sono tra i pochi fortunati con l’FTTH e l’ONT è integrata nel Modem e francamente va da dio!
Discorso diverso è il frmware del router Telsy che… lascia a desiderare.
Ho fatto qualche prova … i cellulari della famiglia non rispondono al Ping, rspondono in maniera un po’ migliore ai pacchetti di NMAP ma ogni tanto “saltano” .
Proverò utilizzano in “person” la tripletta
– Geolocalizzazione APP Home Assitstant,
– Nmap,
– e il riconoscimento della rete WiFi a cui si collegano…
poi speriamo che gli “algoritmi” di Person facciano il miracolo 🙂
Se ritieni vi aggiorno qui…
Ciao.
Capisco la situazione. In ufficio ho l’ont staccato (openfiber) e ti lascia più libero. Nulla ti vieta di usare due dispositivi comunque, puoi anche iniziare col Fritz collegato al router Tim a cui imposti il Fritz in dmz. Ma a parte questa divagazione direi che la tua scelta migliore è esattamente quella che hai espresso. Si, certo, aggiorna pure con gli esiti grazie, è sempre interessante! 👍🏻
Un altro dubbio…
l’entità (nel tuo caso) “device_tracker.tel_henrik”
che con il comado pyton viene aggiornata,
deve essere “creata” ?
mi spiego meglio,
tutto va alla grande, il servizio
– service: python_script.set_state
data:
entity_id: device_tracker.smartphone_Xxxx
state: not_home
source_type: wifi
setta correttamente l’entità, ma solo se “precedentemente esistente”,
in altre parole se in “Strumenti per Sviluppatori” –> Stati –> vado a pre-settare l’entità device_tracker.smartphone_Xxxx,
allora poi Pyton ne cambia lo stato.
Ma se non esiste (per esempio dopo un riavvio di HA)
non la crea “dal nulla”
immagino sia da generare in Configuraion.yaml… della serie:
device_tracker:
– platform (?)
name: smartphone_Xxxx
name: smartphone_Yyyy
name: smartphone_Zzzz
sbaglio?
Grazie!
L’entità device_tracker da te nominata viene creata automaticamente dall’app quando la connetti ad Home Assistant la prima volta e da lì non se ne va più via… Quando riavvi HA l’entità deve essere al suo posto come tutte le altre entità (nessuna entità “sparisce” al riavvio). C’è qualquadra che non cosa…
“viene creata automaticamente dall’app quando la connetti ad Home Assistant la prima volta”
scusa ma è questo che non capisco… 🙁
Quando colleghi l’app installata sul tuo smartphone all’istanza di Home Assistant in automatico le entità dei sensori vengono create in Home Assistant. Se abiliti ulteriori sensori questi vengono creati quando li abiliti dall’app. E le entità non vengono mai cancellate al reboot. Di conseguenza da quando hai avviato l’app i sensori sono lì a disposizione. Il device_tracker è uno di quelli attivo per default quindi, appunto, da quando hai collegato l’app alla tua istanza di Home Assistant è lì da usare e non se ne va da solo.
Premetto che ti ringrazio per la pazienza infinita che hai con me e con tanti che ti rompono le scatoe… encomiabile :-)!
Quato dici mi è chiaro, e così capita anche a me… i sensori / entità creati dall’app (dal cellulare andoid) non spariscono mai!
tuttavia l’idea era quella di fare come hai fatto tu,
partire da un sensore dell’App del cellulare (quello che mi dice il nome della rete WiFi a cui è collegato il cellulare)
e trasformarlo in una entità device_tracker
Questo perchè solo questo tipo di entità posso unirlo alle altre modailità di analisi della posizione di “Person.” (come dici più sopra in questa pagina.
Quindi:
Il sensore che arriva dall’App/Cellulare è
sensor.cellulare_wifi_connection
l’Automazione wifi.yaml, che ci hai suggerito, provvede a percepirne la variazione:
trigger:
– entity_id: sensor.cellulare_wifi_connection:
from: Telecom-12345678
platform: state
condition: []
e con il magico Python vai a modificare il varlre dell’entità device_tracker:
action:
– service: python_script.set_state
data:
entity_id: device_tracker.smartphone_mio
state: not_home
source_type: wifi
e l’inghippo è qui:
Python cambia di stato l’entità “device_tracker.smartphone_mio” solo se esiste già.
Python non la crea ex novo se non c’è…
posso connettere e sconnettere il cellulare dalla WiFi di casa ma nessuna traccia dell’entità “device_tracker.smartphone_mio”
per testare la cosa è necessario creare l’entità “device_tracker.smartphone_mio” andando in
Strumenti per sviluppatori…
definendo la Nuova entità “device_tracker.smartphone_mio”
e come STATO metterci qualche cosa …. “pippo” per esempio.
da questo momento in poi “device_tracker.smartphone_mio” esiste e python ne cambia di stato agganciando o sganciando il cellulare dalla wifi di casa correttamente
Tuttavia, se spengo o riavvio HA “device_tracker.smartphone_mio” scompare dalle Entità Correnti in Strumenti per sviluppatori e torno da capo
lo stesso male se richiamo il servizio set_state a mano:
Strumenti per sviluppatori –> Servizi –>
service: python_script.set_state
data:
entity_id: device_tracker.smartphone_mio2
state: home
source_type: wifi
poi “Ciama il servizio”
ma di “device_tracker.smartphone_mio2” nessuna traccia tra le Entità Correnti!
Poco male, pensavo, basta di ri-generarla all’avvio inserendola in configuration.yaml
ma non ne esco…
come si fa per fare in modo che l’entità device_tracker non sparisca al riavvio!
o perlomeno come fare per generarla in automatico?
è un problema del mio HA… ?
So che ho le idee confuse… portate pazienza!
Grazie!
Ma il problema è il device_tracker. Non lo devi creare a mano! Quando colleghi l’app ad Home Assistant ti viene creato un
device_tracker.nome_telefono
che perdura nell’eternità. Ed è quello che devi usare come entità da aggiornare con ilset_state
.Ad ogni modo ti consiglio di aspettare ad arrovellarti troppo su questo articolo perchè nelle ultime nottate ci ho lavorato parecchio per usare il wifi in modo più elegante e funzionale e posso dire di aver trovato la panacea che funziona benissimo, è super manutenibile ed è molto più compatta. E non soffre dei bounce che avvengono con set_state. Insomma, la soluzione perfetta!
Ci dedicherò il prossimo articolo… 😉
Capito, uso il device.trecker generato dall’app…. in attesa del tuo nuovo articolo ci provo… altrimenti dove sta il divertimento 🙂
Ciao Henrik, vorrei farti una domanda un po’ off-topic (non so dove contattarti).
Io devo scrivere un registro modbus sul mio PLC M251. Il dato è un INT. Il dato che devo scrivere lo recupero da uno slide che ho creato. Dopodiché ho realizzato una automazione che, al variare del valore dello slide, provvede a chiamare il servizio ‘modbus.write_register’ scrivendo sul registro modbus il valore dello slide. La chiamata è questa:
service: modbus.write_register
data:
value: ‘{{ states(”input_number.kitchen_temperature”) | int }}’
hub: M251
address: 800
unit: 1
Ora, il problema che ho è che il dato ‘kitchen_temperature’ è un float ma il dato che scrivo nel registro (e che leggo nel PLC) è un INT poiché il modbus lavora impacchettando registri a 16 bit (INT, appunto). Ora, come faccio sempre in altri ambiti, quando devo trasferire un dato FLOAT mediante modbus, lo moltiplico per 10. In questo caso quindi, se leggo un valore dallo slide pari a 23,5 andrei ad inviare 235. Il problema è che non riesco a moltiplicare per 10 il valore. Avrei pensato anche a modificare il valore fornitomi dallo slide (generando valori moltiplicati per 10) ma poi non riesco a ‘spostare’ la virgola come farei, ad esempio, con un normale sensore. Puoi aiutarmi??
Grazie
Scrivimi nei contatti del blog o su Messenger (non ci sono miei omonimi nel mondo 😂) così non intasiamo i commenti di OT. E credo di avere la soluzione 😜
Ciao ho una domanda: le tabelle di presenza possono essere sfruttate solamente con modem/ router fritz? Ho un modem asus RT1200G connesso in cascata a una vodafone station revolution, posso in qualche modo sfruttare le tabelle del router per non dover continuamente bombardare la rete di pacchetti ICMP?
Ciao, no ci sono altre integrazioni che permettono di usare le tabelle interne dei router (il cui vantaggio hai ben compreso 🙂 ). Per Asus mi risulta che il tuo router utilizzi AsusWRT. In tal caso c’è l’integrazione relativa: Integrazione AsusWRT.
Ma ho solo cercato sul sito, non l’ho mai provata quindi non ti so dire di più.
Ciao, grazie mille ho aggiunto l’integrazione e vede i vari dispositivi connessi. L’unico problema é che avendo connesso tale router in cascata a una vodafone station revolution posso tener traccia solamente di alcuni dispositivi (quelli connessi al router asus per l’appunto)… Esiste qualcosa per usare le tabelle di presenza della station revolution? Grazie mille!
Che io sappia no, mi spiace. Prova a cercare però, Google è tuo amico 😉
Grazie mille per l’aiuto… al momento sto usando asuswrt e sembra funzioni abbastanza bene. L’unico problema é che non mi rileva uno smartphone e pertanto il tracking di quest’ultimo e un pochino meno preciso (ma diciamo accettabilie, soprattutto grazie alla verifica della connessione wifi). Ho effettuato qualche ricerca e purtroppo non ho trovato nulla sulla VS Revolution.
Ho una domanda sul package “auto_detect”: non mi : non ho ben capito come poter sfruttare l’evento “uscita_ultimo_da_casa”… Cosa cambia fra questo evento e il semplice tracking che posso trovare nelle impostazioni degli utenti di home assistant (i device_tracker)?
Tale evento traccia in maniera piú precisa i dispositivi oppure ho capito male (oppure va ad agire direttamente sull’entitá della persona)? Se cosí fosse, perché nell’automazione della notifica al rientro dal lavoro non usi l’evento ma l’entitá della persona?
Perdona tutte queste domande… ti ringrazio di nuovo!😊😊
Non può non rilevarti un telefono, se si collega al wifi ed è in rete lo deve rilevare… Su Fritz non ho alcun device non rilevato che si collega.
L’evento “uscita_ultimo_da_casa” e “entrata_primo_in_casa” (vado a memoria ma si capisce anche se sbaglio i termini) servono per rilevare, rispettivamente, l’uscita dell’ultima persona che esce di casa e l’ingresso della prima che vi rientra. Ovvero intercettano lo stato di casa con qualcuno -> casa con nessuno e viceversa. Questa informazione la uso da tante parti per fare cose tipo abbassare automaticamente le tapparelle (all’uscita) o alzarle (al rientro), attivare l’antifurto e disattivarlo, ecc. Se vivi da solo questi eventi sono coincidenti con gli stati da home a qualunque altro o da qualunque altro a home. Ma se le persone sono più di una no…
Si può ottenere lo stesso effetto con un semplice gruppo che raggruppi le persone che vivono in casa e usando lo stato del gruppo nelle automazioni (il gruppo è home fintanto che anche un solo componente è home) ma trovo che gli eventi siano migliori per separare logicamente i package avendo meno dipendenze da entità definite altrove. Ma è questione di gusti, entrambe le soluzioni sono equivalenti.
Per rispondere alla tua ultima domanda al rientro dal lavoro uso la persona perchè voglio che l’automazione si attivi quando la singola persona torni dal lavoro, indipendentemente che a casa ci sia qualcuno o no.
Ciao
Ciao Henrik, sto leggendo questo articolo con molto interesse ma non ho capito come tracciare lo smartphone di un ospite che non usa l’applicazione Home Assistant?
Ho Sky WIFI e il modem/router rileva i device collegati al wifi ma su HA non ho traccia di questi device quindi se volessi dare il benvenuto a mia sorella quando entra in casa come faccio? Funziona solo con Fritz Box?
Ciao Henrik,
Complimenti per la guida.
Sono un neofità e ho qualche dubbio.
1) Per settare il device tracker con lo stato derivato dalla WIFI usi lo script set_state.
Nel package che hai creato c’è un service.yaml e set_state.py.
Mi potresti dare qualche dritta su come devo configurararli?
2) Non avendo la possibilità di utilizzare altra entità tranne il device tracker, non posso creare il secondo sensore binario. Quindi
configurando un delay di 10 min nel sensore legato all’app avrei una risposta molto lenta.
Hai qualche suggerimento a riguardo?
Grazie
Paolo
Ciao, per il set_state, come ho scritto nell’articolo, rimando all’articolo specifico: Impostare lo stato di un’entità in Home Assistant.
Per quanto riguarda la seconda domanda ti suggerisco di attendere un pochino perché ho sviluppato una seconda versione di questo package, migliore, più semplice e senza il problema dei bounce. Ti consiglio di basarti sul nuovo articolo che arriverà… 🙂
Ciao
Ciao, io ho sky wifi è non riesco ad utilizzarlo su HA come device tracker, nel log ricevo questo errore:
ERROR (MainThread) [pyskyqhub.skyq_hub] Error parsing data at initialisation for “indirizzo_ip_del_router”, is this a Sky Router?
ERROR (MainThread) [homeassistant.components.device_tracker] Error setting up platform legacy sky_hub
ho configurato sky_hub come device tracker nel configuration.yaml come da documentazione:
# tracker su router sky hub
device_tracker:
– platform: sky_hub
host: !secret sky_hub_ip
interval_seconds: 60
consider_home: 180
new_device_defaults:
track_new_devices: true
Puoi aiutarmi? Grazie.
Mi spiace ma non usando Sky hub non ho idea di come poterti aiutare. Ho dato un occhio alla pagina dell’integrazione che riporta essere usata da 34 installazioni in tutto il mondo (argh) e da come si configura (alla vecchia maniera) direi che è poco seguita. Potrebbe essere un aggiornamento firmware dello Sky Hub che ha mandato fuori uso l’integrazione o una configurazione specifica, non saprei.
Però essendo una integrazione del core puoi aprire una issue a riguardo nel repo del core e ti devono dare retta 🙂
Ciao Henrik, secondo te com’è possibile che quando il telefono si collega al SSID non scatti l’automazione
Detta così mi ci vuole la sfera di cristallo per risponderti 😉 Ad ogni modo ti consiglio di attendere un attimo a mettere in azione questa automazione perchè ho una versione migliorata e molto migliore del Tracker wifi… Tra non molto ne farò un nuovo articolo.
Attenderò! Grazie mille Henrik, complimenti per il lavoro!
Ciao Henrik. Innanzitutto mi complimento dei tuoi articoli e dei tuoi interventi nelle varie sezioni dell’HA. Ti seguo da quando conosco questo hub. Secondo l’ultimo articolo riguardante il tracciamento wifi, vorrei porti una domanda. Vorrei, ( ad oggi ho questa impostazione per il device tracker), non usare il GPS per tanti motivi tra cui la durata della batteria. Se, nelle impostazioni dell’app companion, abilito il sensore di rete wifi, il risultato è non connesso. Da qui deduco che senza abilitazione del GPS il package wifi.yaml non funziona. C’è un modo di utilizzare questo metodo senza l’ausilio del GPS??
Ciao Francesco, grazie per i complimenti 😊
Parlo per Android (iOS non lo conosco abbastanza): la rilevazione del wifi è soggetta ai permessi GPS. Per cui se vuoi fare quanto hai chiesto devi dare i permessi di geolocalizzazione all’app ma poi disabilitare il sensore relativo, così che l’app non acquisisca la posizione.
Ottimo aggiornamento e bellissimo articolo, come sempre! 😊
Ho apportato le modifiche per adattarlo alla mia configurazione e l’ho testato in parte (domani al rientro dal lavoro vedo se va la notifica) ho notato perè che l’automazione che manda una notifica generica quando qualcuno entra o esce di casa mi continua ad inviare notifiche che sono tornato a casa nonostante non mi sia mosso da casa.
L’unica differenza è che nel sensor.person_xxx_source si alterna il tracker dell’APP e quello di Nmap (purtroppo non ho un Fritz) e nel caso del GPS a volte mi cambia di pochissimo le coordinate rilevate (comunque semre in zona home) forse sono questi due fattori a scatenare le notifiche continue??
Per ora ho disattivato l’automazione per non essere sommerso di continue notifiche.
Molto bella l’idea di usare l’SSID dei wifi associati alle zone. 👍
Ciao Michelangelo, grazie per le belle parole 🙂
Quel che sperimenti, se l’automazione che hai fatto è corretta, di certo non dipende dalle coordinate che cambiano. Questo è normale in quanto la precisione del GPS è variabile a seconda di mille fattori quindi ci sta che stando fermo in casa le coordinate non rimangano le stesse. L’importante è, appunto, che rimangano nella zona home.
Può invece essere che i due tracker che si alternano abbiano uno stato differente, causando un cambio stato continuo della person, hai provato a verificarlo? Verifica sullo storico dello stato dell’oggetto person. Se così non fosse prova ad indicarmi il trigger che hai usato, magari c’è un errore lì.
Riporto il debug dell’automazione preso dal campo “Changed Variables”:
*************************************************************************************************
this:
entity_id: automation.persone_notifica_qualcuno_arriva_o_parte_da_casa
state: ‘on’
attributes:
last_triggered: ‘2022-02-20T13:04:11.756686+00:00’
mode: single
current: 0
id: 0bb4febe-f9b1-445c-9b27-ac9793c4a617
friendly_name: Persone – Notifica – Qualcuno arriva o parte da casa
last_changed: ‘2022-02-21T15:16:55.133902+00:00’
last_updated: ‘2022-02-21T15:16:55.133902+00:00’
context:
id: f510e5f786841aa5e4c597617fd4c359
parent_id: null
user_id: ad628439837b43cdb13cff22c4418481
trigger:
id: ‘1’
idx: ‘1’
platform: state
entity_id: person.xxx
from_state:
entity_id: person.xxx
state: home
attributes:
editable: false
id: xxx
latitude: xx.xxxxxxx
longitude: xx.xxxxxxx
gps_accuracy: 87
source: device_tracker.redmi_note_4
user_id: ad628439837b43cdb13cff22c4418481
entity_picture: /api/image/serve/710f45dec82b2519cfcc953d0e55c451/512×512
friendly_name: xxx
last_changed: ‘2022-02-21T13:53:50.437992+00:00’
last_updated: ‘2022-02-21T14:54:42.217443+00:00’
context:
id: 3676ece4980ff564dc4ba39f577071eb
parent_id: null
user_id: null
to_state:
entity_id: person.xxx
state: home
attributes:
editable: false
id: xxx
latitude: xx.xxxxxxx
longitude: xx.xxxxxxx
gps_accuracy: 72
source: device_tracker.redmi_note_4
user_id: ad628439837b43cdb13cff22c4418481
entity_picture: /api/image/serve/710f45dec82b2519cfcc953d0e55c451/512×512
friendly_name: xxx
last_changed: ‘2022-02-21T13:53:50.437992+00:00’
last_updated: ‘2022-02-21T15:44:42.018636+00:00’
context:
id: d130146e765abd7098a42e8d5cfe0242
parent_id: null
user_id: null
for: null
attribute: null
description: state of person.xxx
*************************************************************************************************
L’evento si è ripetuto più volte di seguito; qui sotto altro debug quando passa da una sorgente all’altra:
*************************************************************************************************
this:
entity_id: automation.persone_notifica_qualcuno_arriva_o_parte_da_casa
state: ‘on’
attributes:
last_triggered: ‘2022-02-21T15:56:07.419438+00:00’
mode: single
current: 0
id: 0bb4febe-f9b1-445c-9b27-ac9793c4a617
friendly_name: Persone – Notifica – Qualcuno arriva o parte da casa
last_changed: ‘2022-02-21T15:16:55.133902+00:00’
last_updated: ‘2022-02-21T15:56:07.857478+00:00’
context:
id: 6e4f74f771e57c1b386f90312cddc2e7
parent_id: f773521a81bc713bdacd3c14c12b6dbd
user_id: null
trigger:
id: ‘1’
idx: ‘1’
platform: state
entity_id: person.xxx
from_state:
entity_id: person.xxx
state: home
attributes:
editable: false
id: mcv93
latitude: xx.xxxxxxx
longitude: xx.xxxxxxx
gps_accuracy: 56
source: device_tracker.redmi_note_4
user_id: ad628439837b43cdb13cff22c4418481
entity_picture: /api/image/serve/710f45dec82b2519cfcc953d0e55c451/512×512
friendly_name: xxx
last_changed: ‘2022-02-21T13:53:50.437992+00:00’
last_updated: ‘2022-02-21T15:56:07.400845+00:00’
context:
id: f773521a81bc713bdacd3c14c12b6dbd
parent_id: null
user_id: null
to_state:
entity_id: person.xxx
state: home
attributes:
editable: false
id: xxx
source: device_tracker.xiaomi_communications_ab_12_cd
user_id: ad628439837b43cdb13cff22c4418481
entity_picture: /api/image/serve/710f45dec82b2519cfcc953d0e55c451/512×512
friendly_name: xxx
last_changed: ‘2022-02-21T13:53:50.437992+00:00’
last_updated: ‘2022-02-21T15:56:17.435714+00:00’
context:
id: d24f8015bb3c6f82fe5e920a85e8fbed
parent_id: null
user_id: null
for: null
attribute: null
description: state of person.xxx
*************************************************************************************************
Non so quale è l’evento scatenante dato che lo stato è sempre “home” può cambiare leggermente il valore GPS o la sorgente.
Anche guardando lo storico vedo sempre lo stato “home”.
La notifica per il ritorno dal lavoro invece funziona perfettamente senza intoppi o doppie/svariate notifiche.
Riesci a riportarmi il codice della tua automazione? Perchè ho un sospetto… 🙂 Se vuoi anche privatamente (trovi la mia mail in alto a destra sul sito)
Il fatto che tu avessi un sospetto lo ha fatto venire pure a me e perciò mi sono ricontrollato con calma tutto e ho trovato l’inghippo: nella mia furia cancellatrice ho eliminato per sbaglio il ‘from: “home”‘ dalla automazione, ecco perchè continuava ad attivarsi la condizione di “arrivato a casa”. 😳
Ora l’automazione è attiva da una mezz’ora e non mi è arrivata nessuna nuova notifica!
Scusa ancora per il falso allarme!
Ahah, ecco appunto! Pensavo proprio quello perché se non metti from e to il trigger scatta anche quando vengono modificati gli attributi (se non vuoi che accada e scatti qualunque valore cambi nello stato ma NON negli attributi va messo to: senza valore)
Bene, ottimo che era questo e niente di sistemico 👍🏻
Ciao complimenti per l’articolo.
Non capisco una cosa, ho aggiunto il file del package wifi.yaml e configurato come di seguito:
automation:
# Arrivo e partenza dal negozio di Antonella
– id: 48d481d3-9051-443b-a8ea-3e698f99f560
alias: Tracker – Wifi – Telefoni
trace:
stored_traces: 20
trigger:
– entity_id: sensor.ipex_ssid
platform: state
# – entity_id: sensor.tel_anto_wifi
# platform: state
# – entity_id: sensor.tel_erica_wifi_connection
# platform: state
# condition:
# – “{{ trigger.from_state.state != ‘LaTana’ }}”
# – “{{ (as_timestamp(now(), 0) – as_timestamp(trigger.from_state.last_changed, 0)) > 180 }}”
action:
– variables:
tracker: “{{ trigger.from_state.object_id }}”
zona: >
{% set zone =
[
{‘ssid’: ”, ‘zona’: ‘not_home’},
{‘ssid’: ‘wlan’, ‘zona’: ‘home’}
]
%}
{{zone | selectattr(‘ssid’, ‘eq’, trigger.to_state.state) | map(attribute=’zona’) | first | default(‘not_home’)}}
– alias: “Imposta la zona”
service: device_tracker.see
data:
dev_id: “{{tracker}}”
location_name: “{{zona}}”
ha una volta cambiato lo stato crea un file known_devices.yaml con dentro, creando un device_tracker.ipex_ssid che io non uso.
ipex_ssid:
name: ipex_ssid
mac:
icon:
picture:
track: true
la domanda è come si potrebbe fare per far agganciare al corretto device_tracker ?
Ciao, è giusto che ti crei un nuovo device tracker che si chiama nello stesso modo del sensore usato, è esattamente lo scopo dell’automazione! Poi devi aggiungere quel tracker al tuo oggetto person e Home Assistant fa delle valutazioni usando tutti i tracker associati alla persona e le fa bene.
Ciao Henrik complimenti per la tua chiareza e disponibiltá. Sono un neofita. Ho inserito la linea packages: !include_dir_named packages/ ma HA dice che “Setup failed for packages: integration not found’. Dove sbaglio? Grazie
Ciao, grazie 🙂 Detto così non saprei, verifica la sintassi di dove richiami i packages con packages: !include_dir_names packages e la sintassi yaml dei packages. Ti consiglio la lettura di questo capitolo
Ottima guida, molto istruttiva. Vorrei aggiungere una card che mi riepiloghi i tempi trascorsi in una zona, ad esempio vorrei sapere quante ore trascorro in negozio (per mantenere il tuo esempio) e quanto a casa. Come posso fare?
Ciao, la prima cosa che mi viene in mente sarebbe di creare una input_number contenente le ore che passi in negozio ed una contenente le ore che passi a casa. Con un’automazione le resetti a zero quando vuoi tu (se lo vuoi fare, altrimenti le lasci incrementare fin quando vuoi te)
Fai poi un’automazione sul cambio stato dell’oggetto person (o con più automazioni o con un bel choose ed un’automazione sola) in cui quando esci da casa sommi il tempo tra trigger.from_state.last_changed e trigger.to_state.last_changed (ovvero il tempo trascorso dall’ultimo cambio stato) aggiungendolo all’input_number tempo_casa e, stessa cosa, per il negozio aggiungendo il tempo a tempo_negozio.
I due input_number verranno man mano incrementati con i tempi che desideri.
Ciao,
Seguo con molto interesse tutti i tuoi articoli, le tematiche sono trattate ed esposte in maniera assolutamente professionale e non posso che fare i complimenti per il sapere che diffondi. Credo di dovere a te e Max Albani parte della paternità del mio HA!
Sto cercando di implementare la tua logica utilizzando il sensore SSID dell’HA Companion e di “convertirlo” in device tracker, sono partito dal creare il sensore che passa allo stato home nel momento che riconosce una delle mie reti wi-fi:
sensor
– platform: template
sensors:
wifi_gfk:
friendly_name: “Telefono Gfk collegato al wi-fi”
value_template: >-
{% if (“MyOrbiNet” in states(‘sensor.iphonegfk_ssid’)) %}
home
{% else %}
not_home
{% endif %}
icon_template: >-
{% if (“MyOrbiNet” in states(‘sensor.iphonegfk_ssid’)) %}
mdi:home
{% else %}
mdi:home-export-outline
{% endif %}
Ho usato la funzione IN in quanto ho diverse SSID che iniziano con lo stesso nome, fin qui tutto bene.
Da qui l’automazione che utilizza il sefvizio device_tracker.see (geniale!) per creare il device tracker in base al contenuto precedente:
#—————————————————————-#
– id: “PRES Imposta Device Tracker da SSID”
alias: “PRES Imposta Device Tracker da SSID”
description: ‘Imposta Device Tracker da SSID’
trigger:
– entity_id: sensor.wifi_gfk
platform: state
action:
– variables:
tracker: “{{ trigger.from_state.object_id }}”
zona: “{{ trigger.to_state.state }}”
– alias: “Imposta la zona”
service: device_tracker.see
data:
dev_id: “{{tracker}}”
location_name: “{{zona}}”
mode: single
In condizioni di funzionamento normale il tutto funziona come atteso, il problema si pone al riavvio di HA dove, nonostante il sensore acquisisca lo stato corretto (home/not_home), il device tracker rimane sempre nello stato not_home.
Da quello che ho notato, all’avvio il sensore parte come unknown e sembra innescare l’automazione ponendo il device tracker = not_home, dopo una ventina di secondi assume lo stato corretto, per esempio home ma non innesca l’automazione.
Spero di essere stato chiaro e se tu o qualcuno dei lettori potesse illuminarmi ne sarei infinitamento grato.
Grazie ancora.
Ciao Gianfranco, grazie mille per le belle parole! Condivido il gran rispetto per Max, con cui mi confronto e chiacchiero spesso. Lui è il punto di riferimento per l’UI, ma non solo! Io e lui ragioniamo in modo molto simile riguardo script ed automazioni e il nostro know-how si è spesso intrecciato. Amo le contaminazioni di questo tipo.
Venendo al dunque. Si, in una delle ultime versioni è stato introdotto il concetto di unknown finché non scatta il trigger. Però se dici che poi diventa home ma non fa scattare l’automazione del device_tracker questo non è possibile in quanto il trigger che hai usato è
platform: state
senza argomenti e questo viene chiamato anche se cambia solo un’attributo (se vuoi che cambi al solo cambio di stato metti unto:
senza valori).Ti consiglio di spulciare bene le tracce di debug dell’automazione per capire cosa succede quando passa da unknown a home.
Io non mi sono mai interessato particolarmente alla cosa perché usando il device tracker per alimentare l’oggetto person, insieme all’app e al tracker di Fritz, non è importante lo stato corrente quanto il cambio stato. L’oggetto Person, infatti, valuta i cambi di stato e li valuta in funzione della data/ora di riferimento per capire se è più o meno recente dell’ultimo aggiornamento e filtrare eventuali cambi “obsoleti”. Solo i cambi recenti vengono poi propagati allo stato dell’oggetto person.
Quindi il fatto che parta unknown non ha molta importanza.