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
- 5 Ti va di darmi una mano?
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 va di darmi una mano?
Il contenuto di questo sito è completamente gratuito senza pubblicità invasive e il fine non è certo guadagnare …ma mantenere un sito ha un costo. Se ti va di darmi una mano per sostenere le spese o ti va di sostenere questo progetto hai le seguenti modalità:
- Donazione con Paypal:
- Regalami un caffè su Buymeacoffee:
- Effettua i tuoi acquisti Amazon a partire da QUESTO LINK (o tramite i prodotti sotto)
- Acquistare i tuoi prodotti Shelly usando QUESTO LINK
- Effettuare i tuoi acquisti AliExpress usando QUESTO LINK
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.
Come creare l’unique_id nella creazione dei sensors template?
Ciao Maurizio, io utilizzo VSCode per editare il codice YAML di Home Assistant, con l’estensione Home Assistant Config Helper. Lo consiglio vivamente!
Per generare l’unique_id (e ogni altro valore univoco tramite nuovo UUID) uso un’estensione che si chiama “UUID Generator”. Abilita una voce nel menu contestuale dell’editor, quando vuoi inserire un UUID basta cliccare col tasto destro e scegliere “Generate UUID at cursor” et voilà 🙂
Ciao Henrik, per prima cosa grazie per i tuoi contenuti… sempre il top. Sto avendo un problema con il package ” wifi”: in pratica i sensori relativi al ssid sono sempre settati su “not_home” in quanto fanno ancora riferimento ad una vecchia integrazione nmap che ho comunque rimosso… le entitá invece sono rimaste e pertanto non vengono generate quelle nuove… cosa posso fare?
Ciao e grazie! 😊 In teoria dovrebbe funzionare lo stesso, se la vecchia integrazione non c’è più le entità sono lì per chi le usa quindi non è necessario che siano rigenerate. Prova piuttosto a chiamare a mano il servizio che imposta lo stato per vedere se si movimenta e verifica il debug dell’ automazione per scoprire cosa non sta funzionando.
Ciao Henrik, per prima cosa ti ringrazio per le tantissime guide che permettono ai neofiti come me di addentrarsi nel mondo della domotica!
Ti scrivo perchè sto provando ad attuare questa guida, ma purtroppo senza successo. Ti elenco qui cosa ho fatto:
1) Ho creato la cartella packages e al suo interno il file Wifitracker.yaml
2) Ho abilitato i sensori relativi alla connessione Wifi sulle app che mi interessevano, in particolare le entità che ho trovato sono:
sensor.redmi_note_9_pro_wifi_connection e sensor.samsung_daiana_wifi_connection
3) All’interno del file packages: Wifitracker.yaml ho usato il tuo codice, te lo incollo qui:
“`
automation:
– id: 48d481d3-9051-443b-a8ea-3e698f99f560
alias: Tracker – Wifi – Telefoni
trace:
stored_traces: 20
trigger:
– entity_id: sensor.redmi_note_9_pro_wifi_connection
platform: state
– entity_id: sensor.samsung_daiana_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’: ‘WiFi_5ghz’, ‘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: “{{device_tracker.francesco}}”
location_name: “{{zona}}” “`
Ho ovviamente validato la configurazione e riavviato il server ma non trovo (anche dopo aver provato un paio di volte a collegare e scollegare il wifi dal cell) nessun altro possibile device tracker nella lista di dispositivi da collegare alle “Person”.
Non sapendo come generare l’id nella prima riga ho anche provato a toglierlo, ma non cambia nulla.
Sapresti dirmi gentilmente dove sbaglio?
Ti ringrazio in anticipo.
Ciao
Francesco
ciao enrik, lascia stare il mio post precedente. Stamattina misteriosamente funziona tutto senza aver toccato assolutamente nulla. Ti ringrazio comunque!
Ti faccio invece un’altra domanda:
per me questa rilevazione di presenza è resa molto più complicato dal fatto che la mia compagna lavora a nemmeno 20 m da casa, per cui nel suo caso la rilevazione tramite gps la segnala ovviamente sempre a casa. Non avendo un router fritz ho quindi settato come device tracker per lei soltanto il nome della connessione wifi, tuttavia in questo modo se dimenticasse semplicemente il wifi staccato risulterebbe fuori casa. Avresti qualche altra magica idea da implementare in questo caso?
Grazie mille ancora
Ciao Francesco, visto che hai risolto non commento il post precedente tranne che per la domanda restata senza risposta: l’id della prima riga è un testo qualsiasi che sia univoco. Puoi lasciare il mio valore o generare un valore qualsiasi, va bene anche “pippo123” per intenderci. Per essere sicuro di avere un valore sempre univoco io genero un UUID con un addon di VSCode così con un click lo si genera certamente univoco. Non è obbligatorio, puoi non metterlo proprio ma abilita la possibilità di salvare le informazioni di debug delle ultime esecuzioni quindi è importante metterlo 🙂
La posizione di lavoro della tua compagna è una grandissima rogna… Qualunque soluzione avrà dei contro che dovrai valutare attentamente. Le cose che mi vengono in mente sono le seguenti:
Quel che ti posso consigliare è fare come ho fatto io: fare esperimenti per trovare la combinazione più affidabile, ti fai una view di una plancia dedicata al debug dove mostri lo stato corrente e il grafico delle ultime 24h dei vari tracker/sensori che vuoi usare e ogni giorni lo controlli per capire cosa funziona e cosa no. E pian piano affini e migliori fino ad arrivare ad una soluzione che ti soddisfi. Credo che alla fine dovrai passare da un sensore basato su template con la logica che vuoi implementare con dei tempi di off e di on per evitare piccoli eventi (meglio avere l’informazione un po’ in ritardo ma affidabile che averla subito ma con falsi positivi o negativi…)
Mi spiace che una risposta magica non ci sia… 🙁
Ciao Enrik, premetto che la posizione delle persone nel mio Home Assistant è realizzata seguendo scrupolosamente le tue guide. Ora, ho un problema che non riesco a comprendere. Per semplicità di codice, ho creato 2 sensori binari che passano allo stato ON quando sono a casa. Il primo rileva la posizione mediante GPS, il secondo mediante WiFi (ho un router Fritz!). L’or di entrambi definisce la mia posizione a casa. Ora, spesso capita che il sensore che restituisce la mia posizione a casa mediante Fritz! rimanga sullo stato ON poiché il device_tracker rimane fisso sulla posizione “home” anche se fisicamente io sono altrove. Da cosa può dipendere? Grazie
Ciao Andrea, hai fatto bene ad adottare tramite binary_sensor un meccanismo di questo tipo. Pensa che l’articolo era ben partito così, con un binary_sensor per persona che metteva in or lo stato di home di fritz e dei tracker, così da evitare false uscite di casa. Poi l’ho rimosso in quanto ho acquisito fiducia nella gestione interna di Home Assistant dell’oggetto Person. In seguito ho riperso tale fiducia in quanto ho verificato che in alcune condizioni il cambio stato non avviene come vorrei io (che privilegio lo stato di Home anche se un unico tracker dice home). Penso che quindi aggiornerò di nuovo l’articolo in tal senso, tu ti sei già portato avanti! 🙂
Nel merito della richiesta. Il tracker del Fritz ti rimane su Home per un tempo di qualche minuto o indefinitivamente? Nel primo caso è normale (ci mette un po’ Fritz a dire che non sei più a casa ed è giusto così per evitare che una breve disconnessione porti ad un fuori casa), nel secondo no e non so da cosa possa dipendere se non da un errore dell’integrazione.
Puoi provare il codice di tracking “vecchio” cliccando su CONFIGURA dell’integrazione e selezionando l’opzione “Abilita il vecchio metodo di rilevamento” per provare a vedere se non accade più.
Io ho problemi a tracciare i dispositivi non connessi in wifi ma anche altri, se ben ricordo, in quanto ho diverse cose collegate in ethernet tra cui un repeater 1200 in mesh via ethernet, con quell’opzione funziona tutto.
Puoi anche verificare quando non risulti a casa nel Fritz, in Rete locale (vado a memoria) se risulta connesso o no. Se non lo risulta, come suppongo, è un buon caso da sottoporre ad un issue dell’integrazione.
Puoi anche provare a chiedere a Simone Chemelli (lo trovi nel gruppo Home Assistant Italia di Facebook) che è uno degli autori dell’integrazione.
Ciao Enrik, ho fatto tutte le verifiche che mi hai suggerito. Se accedo al Fritz, il mio telefono risulta sconnesso (sono 3 ore che sono fuori casa, vorrei vedere!!). Il device_tracker del mio telefono relativo alla WiFi è, invece, su home. Ho riavviato tutti i Fritz (ne ho 3, un 4040 che fa da router, un 7430 che fa da ripetitore mesh ed un WLAN repeater sempre in mesh), ho riavviato Home Assistant ma nulla. Ora provo a cambiare l’opzione che mi hai suggerito. La cosa strana è che il telefono di mia moglie funziona senza problemi. Grazie dell’aiuto e dei consigli.
Aspetta, non vorrei aver capito male. Quando parli di “device_tracker del mio telefono relativo alla WiFi” intendi il device_tracker fornito dall’integrazione Fritz che usando il router determina chi è connesso alla rete di casa e chi no oppure il device_tracker creato, come spiegato nell’articolo, basato sul sensore dell’app Home Assistant Companion che dice a quale SSID si è connessi? Perchè mi viene il dubbio.
Se stai parlando del device_tracker di Fritz potrebbe appunto essere una condizione anomala dell’integrazione. Se anche l’altro metodo di rilevamento non funziona correttamente apri un Issue, potrebbe esserci qualche particolarità legata ai modelli che hai tu o alla tua specifica topologia di collegamento. Fammi sapere 🙂
Intendo il device_tracker fornito dall’integrazione Fritz. In realtà devo correggere quanto ho scritto sopra. Riavviando Home Assistant si aggiorna. Ora mi vede fuori casa. Però ha un comportamento anomalo.
Invece il sensore creato con l’automazione funziona correttamente.
Buon pomeriggio.
Finalmente ho avuto un po’ di tempo per macinarmi questo corposo articolo.
Devo ripeterti che tu 6 su un altro pianeta rispetto ai copioni che trattano l’argomento HA sul panorama italiano.
Volevo capire una cosa: la necessità di creare un binary-sensor per gestire l’icona della presenza in casa o meno di una persona.
Dove sarebbe l’errore nello gestire la questione in una button card con:
entity: person.enrik_sozzi
entity_picture: |
[[[
if (entity.state = ‘home’) return ‘/local/My_icons/Enrik_si.png’;
else return ‘/local/My_icons/Enrik_no.png’;
]]]
Grazie dell’attenzione
Ti ringrazio infinitamente! Purtroppo ne pubblico meno di quanto vorrei perchè comunque stendere un articolo così richiede tanto tempo…
La domanda che poni è tutt’altro che stupida. L’articolo in precedenza era strutturato diversamente. Avevo creato il binary_sensor da te citato per basare le mie automazioni e l’UI su una logica differente da quella di person in quanto, al tempo, person non si comportava sempre in modo corretto (in più l’app aveva diversi problemi in tal senso). Morale gestivo io la presenza a casa, mandando in off il sensore (fuori casa) solo e soltanto se tutti i sensori erano d’accordo in tal senso con anche un tempo minimo. Quando ho deciso di semplificare e rimuovere tale logica mi è rimasto il binary_sensor che ho pensato può essere utile usare come riferimento per le automazioni, così che se in futuro dovessi tornare a tale soluzione (e forse si perchè ho un caso limite che fa un po’ impazzire questa logica…) non dovrei cambiare nulla se non la logica dietro a questo sensore.
Oltre a questa motivazione più seria ho le persone più importanti come badge nella UI e questo è comunque l’unico modo per mostrarli in modo gradevole.
Mi fa molto piacere questa domanda perchè significa che ci hai ragionato su e hai compreso bene l’argomento, bravo!
Scusami se ti stò inondando di domande ma per me è occasione di cercare di capirci e quindi imparare qualcosa.
1) Tu scrivi:
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).
Questo è sicuramente corretto.
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.
Questo, IMHO, per quanto ho potuto capire è sbagliato.
Perchè l’automazione non riconosce l’ospite in casa tua, ma riconosce la tua presenza in casa di mariorossi (che ti ha dato accesso al suo wifi)
Forse ti riferisci all’ultima automazione che hai proposto.
Ma probabilmente nella nuova revisione dell’articolo hai tagliato qualcosa.
Come fai a sapere se Giuseppe è a casa tua (e probabilmente non ha l’App HA e se ce l’ha è agganciata al suo HA e non al tuo!)? Perchè gli hai dato l’accesso al tuo wifi.
Quindi il tuo router Fritz passa ad HA che so il MAC del cellulare di Giuseppe e quindi ci vorrebbe un’automazione ad hoc per aggiornare il tracker_di_giuseppe.
2) la zona deve essere NECESSARIAMENTE definita fisicamente in HA?
Ti spiego quando io entro in macchina, il cell si collega al wifi dell’auto
Se io aggiungessi:
{‘ssid’: ‘ssid-auto’, ‘zona’: ‘car’}
in mancanza di una zona definita in HA potrebbe funzionare?
E se io definissi la zona ‘auto’ in mezzo al mare potrebbe funzionare?
Il tracker_tel sarebbe ‘not_home’
il tracker_wifi sarebbe ‘car’ ma essendo il tracker_tel GPS prevarrebbe la sua lettura.
Mi verrebbe quindi da dire che chi non ha esigenze di “prossimità alle zone tutte con wifi” (visto che l’aggancio del wifi c’è o non c’è) converrebbe tarare l’oggetto person solo sul wifi.
3) quando crei le automazioni come fai a vedere “on the fly” il valore di una variabile? Mi spiego meglio tu stai sviluppando l’automazione e scrivi la formula per la variabile zona. Come fai a vedere qual’è il suo valore (prima di creare un device_tracker sbagliato? Ti mandi una notifica? Ai miei tempi in VBA c’era MSGBOX per la bisogna.
4) hai definito la variabile tracker: “{{ trigger.from_state.object_id }}” per utilizzarla una sola volta nel blocco successivo dev_id: “{{tracker}}”. E’ una necessità del codice YAML o potevi anche scrivere dev_id: “{{ trigger.from_state.object_id }}”
5) Le variabili tracker e zona sono disponibili globalmente o solamente per l’automazione che le ha definite?
Non c’è alcun riferimento con alcuna automazione dell’articolo comunque, è semplicemente un device_tracker che fa il suo lavoro di suo in Home Assistant 🙂 Se vuoi più info questa è la doc dell’integrazione di Fritz.
a = 1
all’inizio dello script dentro ad una sequenza di una azioneif
modifichi la variabilea = 2
, quando esci dalla sequenza dell’if e torni alla sequenza originalea
varrà di nuovo1
. Quantomeno bizzarro ma è così. Qui più info.Riguardo all’ultima domanda se hai bisogno di variabili globali avrai bisogno di helper (in italiano tradotto “aiutanti…) come input_boolean, input_select, ecc. Oppure ci sono dei custom components per implementare variabili globali e persistenti al riavvio. I più noti sono Var e saver. Ma sono argomenti un po’ avanzati, tienili lì per quando capirai meglio le basi.
Grazie per le dettagliate spiegazioni.
Avevo alcune banali automazioni home/not home basate sul tracker del telefono.
Le ho modificate con il tracker del wifi e le trovo più precise nella risposta.
Si è vero… nonostante le mie elementari conoscenze di programmazione, peraltro risalenti a tanti, tanti anni fa ho notevoli difficoltà ad approcciarmi a questo nuovo linguaggio.
Ma probabilmente è un problema mio (ma anche della piattaforma che è eccessivamente dinamica?).
Volevo offrirti qualche confezione di caffè ma forse hai tolto l’opzione.
Vado di donazione, non fosse altro per la pazienza che hai dimostrato con le mie pedanti domande 🙂
Ciao, prima di tutto grazie mille per la donazione!!! <3 L'opzione di Buy Me A Coffee è ancora lì, hai avuto problemi? Cmq. Paypal ha funzionato bene 😀
Nel merito:
occhio a basare lo stato di home/not_home solo sul wifi (presumo intendi il sensore dell'app che dice a quale SSID sei collegato) perchè se muovendoti si scollega o il telefono va in risparmio energetico e spegne il wifi o qualunque problema temporaneo risulteresti not_home. Se usi questa informazione per cose importanti come me, ad esempio chiudere tapparelle, spegnere luci, attivare antifurto... Non è simpatico 😀 Per questo io preferisco incrociare più sensori, così da avere più certezze. A dire il vero sono tornato dell'ipotesi di non basarmi sull'oggetto person ma di farmi un sensore dove basta anche un solo tracker che mi dice che sono a casa per considerare a casa (come avevo steso originalmente l'articolo...) perchè ho delle situazioni border limit dove parcheggiando l'auto in strada davanti casa fa in tempo a collegarsi il wifi e mentre faccio manovra si scollega e vado home -> not_home e poi ancora home. E le tapparelle vanno su, giù e ancora su…
Insomma pianifica bene la tua condizione home.
Io ci ho messo un po’ a trovarmi a mio agio (ma ancora adesso non è che ci sguazzo eh, la sintassi di tante cose devo sempre riguardarla ogni volta che scrivo un’automazione…) ma principalmente perchè non è un linguaggio di programmazione vero e proprio ma un linguaggio di scripting basato su YAML, che peraltro si evolve in continuazione ed ha sintassi a tratti un po’ bizzarre.
Ti consiglio assolutamente, se già non lo fai, di usare VSCode come addon oppure installato sul PC, accedendo alla config tramite Samba e installando le seguenti estensioni di VSCode: Home Assistant Config Helper, indent-rainbow, Material Design Icon Intellisense, UUID Generator. Un altro modo di scrivere YAML che semplifica molto. In particolare guarda bene le possibilità offerte dall’estensione di Home Assistant Config Helper…
Che figura!! No script aveva bloccato il codice dell’icona!
Non mancherà occasione per reiterare.
Ecco… appunto… se ti crei un sensore secondo le tue esigenze il tutto ha senso.
L’uso dell’oggetto person (o solo del device.tracker) che è a dichiarata prevalenza GPS potrebbe creare problemi in particolari situazioni orografiche/d’uso.
Aborro l’uso della domotica per applicazioni estremamente… sensibili ma questa è una scelta (e una responsabilità!) esclusivamente personale.
Se tu non ci sguazzi nel codice YAML, io sono affogato da tempo 🙂
A risentirci (forse) con l’articolo sugli allerts di protezione civile!
Noscript sta “simpatico” a chi ha siti… 😀 Non sentirti in dovere, non lo faccio certo per guadagnare. Certo una mano a sostenere le spese del sito fa sempre molto piacere. Anche e soprattutto per il significato che rappresenta.
Quali problemi di natura orografica/d’uso vedi? Io lo trovo una rappresentazione perfettamente calzante e funzionale.
Il mio principio guida per la domotica è farle fare quel che dovrei fare io manualmente in modo automatico, senza compromettere le normali funzionalità manuali. In questo spirito attivare tutto l’attivabile in modo automatico rientra nel disegno e devo dire che sia io che mia moglie ne siamo molto soddisfatti, se l’antifurto non fosse automatico ci dimenticheremmo la metà delle volte di inserirlo / disinserirlo… Se non tracciassi gli ospiti non potrei tenere il riscaldamento mentre noi non ci siamo e mia mamma o mia suocera stanno con le bambine (cosa che regolarmente accadeva prima di avere Home Assistant, usando Tado stand alone). Ma come giustamente dici è una scelta personale e ognuno è giusto che abbia i suoi confini e le sue regole. Che poi magari evolvono nel tempo cmq, mai dire mai 😉
Beh dai, a fare script e automazioni yaml vado abbastanza spedito, quel che voglio dire è che comunque è ricco di piccole/grandi eccezioni, imperfezioni, stranezze che spesso fanno perdere un gran tempo… E comunque la sintassi non è ricordabile per tante cose quindi è un continuo consulto della documentazione che fortunatamente è fatta bene.
E lo Yaml non aiuta tanto la leggibilità, trovo… Prova a fare due o più choose uno dentro l’altro 😀
L’articolo sugli alerts della protezione civile non è mio per cui sentirai magari l’autore (immagino sia Caio di Hassiohelp 😛 ), buon lavoro!
Ciao Henrik, grazie alle tue guide continuo ad ampliare la mia conoscenza per HA.
rilevo la presenze degli ospiti in casa con device tracker tramite l’integrazione di FritzBox, vorrei creare un contatore per sapere quanti di questi ospiti (che sono raggruppati in ‘GROUP’) sono presenti ma non riesco a crearlo. questo è la assegnazione:
– platform: template
sensors:
ospitiweb:
friendly_name: ‘Ospiti in casa’
icon_template: ‘mdi:ghost’
value_template: “{{ expand(‘group.ospiti’) | selectattr(‘state’, ‘home’) | list | count }}”
mi restituisce sempre 0 anche se i singoli tracker sono in HOME.
hai qualche consiglio?
Grazie
Ciao Carlo, occhio che nel template c’erano caratteri strani anzi che le virgolette di delimitazione interne delle stringhe, suppongo che siano state convertite dove le hai scritte per pubblicarle perchè altrimenti HA da errore per quello quindi passo oltre.
Ti ho corretto il template per generare il valore che vuoi tu:
"{{ expand('group.ospiti') | selectattr('state', 'eq', 'home') | list | count }}"
, l’ho appena provato con un mio gruppo simile e funziona.Però attenzione, io l’ho provato in Strumenti per sviluppatori -> Modelli (e ti consiglio di fare lì tutti i test per velocizzare l’iterazione del codice) ma nel template c’è un problema come lo hai scritto:
come dice la pagina di doc dei template trigger il sensore si aggiornerà ogni volte che le entità utilizzate nel template si aggiornano.
E abbiamo un problema: l’entità che abbiamo nel template è
group.ospiti
che assume lo stato dihome
quando anche un solo componente è a casa, altrimentinot_home
. Per cui gli unici valori che potrai avere sono 0 e 1 in quanto quando non c’è nessuno a casa ed entra un ospite il sensore passerà danot_home
adhome
e il template sensor si aggiornerà. Poi arriva il secondo ospite ma il gruppo non si aggiornerà più , restandohome
e quindi non scatenerà il rendering del template sensor. Spero che si capisca, non proseguo l’esemplificazione.Per ovviare a questo problema bisogna che utilizzi i “nuovi” (ormai da un po’…) trigger based sensor che permettono di inserire dei trigger, proprio come le automazioni, che determinano quando far aggiornare il sensore. E dovrai mettere trigger di stato, uno per ogni persona nel gruppo ospiti.
Si lo so che non è scalabile, se un giorno aggiungi una persona nel gruppo ospiti devi ricordarti di aggiungere lì il trigger.
La soluzione esiste ma comincia ad essere piuttosto avanzata. E’ quella di usare un solo trigger: l’evento
state_changed
e controllare che sia di un oggetto appartenente al tuo gruppo. Io mi sono fatto così diverse cose, se lo vuoi posso darti il codice ma pensaci solo se mastichi bene lo yaml, altrimenti ti consiglio di fermarti al consiglio precedente.Buon lavoro!
E’ bello confrontarsi con te!
Anche se tempo stiamo andando un po’ OT.
Il problema che ho riscontrato con i tracker è che se uno di essi è GPS la sua indicazione prevale sugli altri. Quindi se per un motivo qualsiasi (sei in garage ed il GPS piglia male) il telefonino ti localizza not_home la sua indicazione prevale sul tracker SSID che invece ti da home.
Infatti per le MIE esigenze sono giunto alla determinazione di togliere il tracker del telefono dall’oggetto person e lasciare solo quello SSID visto che non ho esigenze di prossimità e tutti gli “obiettivi” sono dotati di WIFI proprio.
Ora, giusto per complicarmi un po’ la vita, sto provando a fare un sensore ad hoc che fra qualche anno sarà pronto quando riuscirò a capire (forse) il perchè degli errori/non funzionamenti.
Per quanto riguarda la filosofia domotica mi trovi pienamente d’accordo.
Io mi riferivo ad applicazioni (che ho chiamato) sensibili delle quali non penso sia necessario parlarne oltre in questa sede.
I choose/conditions/sequence… fu la mia prima volta è durata una nottata intera ma alla fine ce l’ho fatta.
Aaaaaahhh. Se vai nell’ultimo commento di un utente tritamarroni nell’articolo della radioattività ….
Ti ringrazio 🙂 Non ti preoccupare per l’OT, il proprietario del sito mi hanno detto che è di manica larga 😀 finchè si parla di domotica non siamo OT 😉 Peraltro riguarda sempre l’argomento persone e posizione, argomento dell’articolo.
Ok, capisco il tuo cruccio. Ogni utente ha delle particolarità di utilizzo, come scrivevo anch’io ne ho una in cui l’oggetto person non fa la cosa giusta. Per questo io ti consiglierei l’approccio che avevo avuto io precedentemente (e spiegato nell’articolo, precedentemente, poi l’ho revisionato togliendo quella parte ahimè ma la rimetterò…) ovvero farti un template binary sensor per ogni persona che determini la sua presenza a casa. Nel mio caso li avevo chiamati
binary_sensor.NOMEPERSONA_at_home
. Il template non faceva che mettere in OR i vari tracker utilizzati e aggiungevo anche undelay_off
di qualche minuto. Poi avevo basato tutte le mie autuomazioni su di essi.In questo modo ottieni due risultati: se il GPS in garage ti dice che sei fuori casa ma sei connesso al tuo wifi il sensore ti dirà che sei a casa. Se passi davanti a casa facendo manovra come succede a me e mi si connette e disconnette dal wifi durante la manovra lo stato non andrà
not_home
perchè sono necessari i minuti configurati neldelay_off
per andarenot_home
.Più in generale comunque hai in mano la gestione della determinazione dello stato e quindi ne puoi modificare/governare le logiche.
Usare solo il wifi lo vedo un po’ aleatorio e rischioso… Ma magari mi sbaglio eh.
Riguardo le applicazioni “sensibili” forse ho capito a cosa ti riferisci ma io non ho interesse all’argomento, se ho ben inteso.
e per l’ultimo commento dell’articolo sulle radiazioni… perdonami, mi ero totalmente dimenticato! Non avendo alcun problema a mandare del traffico alla concorrenza (perchè non la vedo come concorrenza, non facendolo per guadagnare…) però posso dirti che c’è un articolo su Hassiohelp che mi sembra molto articolato e tocca tutti i temi degli avvisi della protezione civile. Dagli un occhio, magari trovi quel che cerchi 🙂
Con i tuoi articoli si impara… di là si copia
Ho risolto utilizzando sensor_binary, Grazie per la tua veloce e utile assistenza
Ciao Henryk, come ti ho scritto sono riuscito a farlo funzionare, potresti inviarmi ugualmente la soluzione in yaml più avanzata che utilizzi tu in modo che posso continuare ad arricchire il bagaglio di conoscenza. Grazie
Ciao Henrik, sono un nuovo appassionato di HA e sto iniziando da quest’estate, anche grazie ai tuoi video casa-lavoro e rit. a specializzarmi su questa piattaforma che a naso mi sembra abbia infinite potenzialità. Sto avendo un problema con un’automazione che interessa per l’appunto i device_tracker offerti dall’integrazione di Fritz. Il mio problema che forse avranno avuto altri utenti ma non ho capito quale sia la soluzione, è che con il passare del tempo, anche a seguito di dissociazioni dalla wifi e riassociazioni varie (ho 2 reti, una a 2,4 e una a 5 con nomi diversi) ho visto che HA mi aggiunge (non so con quale criterio) dei suffissi numerici ai miei device_tracker del tipo: device_tracker.mio_telefono_x dove x assume cifre che possono aumentare con il passare del tempo. Chiaramente questo mi comporta il problema che, avendo creato il gruppo Famiglia con i device_tracker interessati, poi con il passare del tempo può essere che l’automazione non funzioni in quanto scopro che il mio device_tracker ha cambiato nel frattempo il suffisso numerico. Non so se mi sono spiegato bene, spero di si. Ora ho anche impostato Fritx per impedire l’aggiunta di nuovi dispositivi che trova sulla rete ed ho impostato già da tempo l’assegnazione riservata dell’IP in base al MAC Address. Sai darmi una dritta in merito? Grazie e complimenti per tutto.
Ti consiglio di tenere le reti wifi 2.4 e 5 GHz su stesso SSID, così dai modo al gestire mesh del Fritz di spostare ogni dispositivo sulla banda migliore per distribuire le comunicazioni.
Detto questo il problema che lamenti sembra causato dal Mac address random che Android e iOS nelle ultime versioni hanno introdotto per privacy che però, ovviamente, fanno credere ogni volta di essere un dispositivo differente al Fritz ed avendo lo stesso nome rilevato ne ricrea l’entità come xxx_2, xxx_3 e così via. Devi disattivare questa cosa nelle impostazioni degli smartphone. Su iOS non so dove sia, su Android devi entrare nella connessione wifi di casa e alla voce privacy imposti “Indirizzo MAC dispositivo”. In questo modo il router lo rileverà sempre come lo stesso dispositivo.
Grazie per i complimenti e benvenuto nel tunnel senza fondo 🤣
Ecco, avevo qualche dubbio proprio su quell’aspetto di iOS… mannaggia e me lo hai confermato. Maledetti MAC Address random… andranno bene per la privacy e per la sicurezza, ma quando si implementano questi automatismi sono delle gran rogne… Vedrò di sistemare seguendo il tuo consiglio. Per quanto riguarda l’SSID unico ci devo riflettere perchè tempo fa ci ho ragionato su e poi avevo deciso di tenere separati i nomi perchè chiaramente con la 5ghz i dispositivi vanno che è una scheggia e notavo che non sempre Fritz switchava per la rete migliore in termini di velocità.
Vedrai che se disattivi i MAC address random non avrai più problemi. I device tracker che espone Fritz sono quanto di più solido abbia per determinare chi è a casa, al momento. Lo adoro. E lo uso per tracciare anche gli ospiti più frequenti (amici e parenti).
Per quanto riguarda le frequenze separate ho visto anch’io con (l’unico) dispositivo iOS di mia figlia che fa ogni tanto delle cose strane passando a 2.4 pianissimo quando potrebbe andare tranquillamente a 5 molto veloce. Con Android questo non avviene. Non ho ancora verificato se con l’ultimo aggiornamento di FritzOS sia risolto o no.
Anch’io ero partito con due reti distine ma ci sono diversi contro. Quando arrivi a casa il telefono si collega ad uno dei due a caso, se non ti va bene devi andar dentro te a cambiarlo. Che per me andrebbe quasi anche bene, seppur scomodo, ma per mia moglie e le mie figlie… 😀
Inoltre il telefono su reti diverse non fa roaming, tende a restare connesso fino alla morte alla rete attuale. Quindi se sei connesso 5 GHz e vai in un punto della casa che prende male (la frequenza a 5GHz passa meno bene le pareti di casa…) devi collegarti tu a 2.4…
Lasciando le reti automatiche il telefono usa sempre l’alternativa migliore perchè è il router mesh che fa Steering automatico. Almeno questa la mia esperienza d’uso. Da quando uso wifi con SSID uguale mi sono dimenticato totalmente della sezione wifi del telefono di tutti i membri della famiglia…
Ma è giusto che tu faccia le tue considerazioni, non credo esista una risposta universale.
ciao Henrik non se se sono off topic,
ho scaricato il package saluto di entrata… ma non mi funzionano le risposte da Alexa!! mi daresti una mano??
Ti ho risposto su facebook. Per riferimento a chi dovesse leggere tale package è un puro riferimento “as-is”, non l’ho ideato per condividerlo (come Multinotify, per intenderci). Va capito bene e adattato in ogni sua parte alle proprie esigenze.
Pingback: Posizione affidabile con app Home Assistant • Henrik Sozzi TECH
Ciao Henrik, giusto un dubbio. I sorgenti nei package sono leggermente differenti dagli esempi della pagina. Sono più aggiornati package o la pagina?
Ad esempio nell pagina questo punto è diverso:
trigger:
– entity_id: sensor.tel_henrik_wifi
platform: state
– entity_id: sensor.tel_anto_wifi
platform: state
– entity_id: sensor.tel_erica_wifi_connection
platform: state
Grazie
Ciao Paolo, che acume! E’ vero, i trigger sono scritti in modo diverso ma risultano esattamente identici. Nel caso che hai riportato nel commento sono stati creati tre trigger, nel file ce n’è uno solo che elenca le tre entità. Il risultato nell’esempio è esattamente identico. Probabilmente era rimasto un po’ più indietro il file perchè l’ho dovuto anonimizzare per pubblicarlo.
Ad ogni modo se ti interessa l’ho pubblicato anche su github
Ciao Henrik,
ho un problema che sicuramente saprai risolvere con device_tracker con fritzbox,
lo utilizzo (oltre che per la presenza delle persone) per vedere quali computer sono accesi (presenti),
quelli collegati in Wifi funzionano bene (home/not_home)
quelli collegati con la Lan quando si attivano (home) allo spegnimento non cambiano lo stato,
unico modo per riportarli alla normalità è riavviare HA.
Come posso risolvere.
Grazie
Era successo anche a me. Un po’ di versioni fa i dev dell’integrazione hanno cambiato metodo di rilevamento usando un’api che da informazioni più precise ma solo per i dispositivi connessi in wifi… Anche secondo me non ha senso.
Per risolvere, comunque, vai nell’integrazione del router Fritz, premi su CONFIGURA e abilita il flag “Abilita il vecchio metodo di rilevamento”. Riavvia e a quel punto funzioneranno anche i device lan.
Anch’io lo uso per i PC (e diverse altre cose)
Grazie. Sempre utile e tempestivo
Ciao Henrik, un dubbio. Quando un oggetto person è collegato come source sul device_tracker del Fritz, ad esempio quando sono a casa, nell’entità non sono presenti le coordinate e quindi in una mappa sparisce l’entità. Questa cosa tu come la risolvi? Grazie
Ciao Paolo, questo perchè l’entità person eredita stato ed attributi dal device_tracker che decide di utilizzare ed esseendo il device_tracker di Fritz senza coordinate è corretto che questo accada (anche se effettivamente le coordinate della zona Home Assistant le ha, potrebbe usare quelle… Potrebbe essere un’issue da aprire nell’integrazione…)
Ad ogni modo anch’io ho una card con la mappa con la posizione dei componenti della famiglia e lì uso, anzi che le entità person, i device_tracker degli smartphone, che hanno sempre la posizione.
Ciao Henrik, ho notato che da alcuni giorni l’automazione Tracker – Wifi – Telefoni mi sta dando il seguente errore:
“Error: UndefinedError: ‘dict object’ has no attribute ‘from_state'”
Può essere cambiato qualcosa con gli ultimi aggiornamenti? Grazie
Henrik, forse succede solo chiamando l’automazione da interfaccia, come non detto.
Ciao Paolo, le automazioni che usano l’oggetto trigger non le puoi chiamare dall’interfaccia, in tal caso chiaramente il valore di trigger non è quello che si aspetta ovvero lo stato del sensore ssid, in questo caso.
Giusto qui di che ti dia quell’errore chiamandola da UI.
Cmq no, nessun problema per me, continua a funzionare senza problemi.
Ciao Henrik,
ho qualche problema ha utilizzare la soluzione SSID ma non so se è per via dell’Iphone che non si fa tracciare o perché sbaglio qualcosa. Dovrei inviarti qualche foto ma non so come fare.
Ciao Henrik, per iniziare ti faccio i complimenti per la pagina web e per gli aiuti che dai a quelli che, come me, sono alle prime armi con HA. Ti chiedo una info per la questione WIFI. io utilizzo Apple e vedo che ci sono molte differenze nell’APP complementare. Sai come posso configurare il mio HA avendo in casa solo iphone? Inoltre ti chiedo che solo il Fritz può essere configurato o anche i modem nativi ti po dello Wind. grazie
Ciao Alex, grazie per i complimenti, mi piacerebbe fare di più ma col tempo che mi rimane è già un miracolo… 🙁
Si, purtroppo iOS ha forti limiti in quello che le app possono fare e quindi l’app complementare espone un decimo (forse meno…) di sensori rispetto a quella Android. Ma il device_tracker da usare nell’oggetto Person e il sensore sull’SSID collegato ci sono e quindi dovresti poter effettuare tutto comunque. Mia figlia ha un iPhone X ed è correttamente funzionante. L’unica cosa è che iPhone aggiorna la posizione quando vuole lui (da documentazione “dopo significativi spostamenti”) e quindi ti puoi fidare si e no. Ma la zona in cui è presente è aggiornata con geofencing e devo dire che quello funziona bene quindi se quel che ti interessa è sapere in che zona sono i telefoni funziona nello stesso modo di quanto esposto nell’articolo.
Per quanto riguarda i tracker dei router no, non solo Fritz. Proprio ora. nella 2023.9, è stata rilasciata l’integrazione per la vodafone station. Per la Wind non saprei, devi cercare…
Se non dovessi trovare niente puoi usare NMAP che però non è affidabilissima, almeno nella mia esperienza. Inoltre deve continuamente comunicare sulla rete per rilevare chi c’è e chi no, non è il massimo ma è un’altertativa.
Ciao, prima di tutto complimenti davvero per il lavoro! Ho scoperto solo ora dell’esistenza dell’articolo. Lo sto provando da qualche ora e le entità funzionano alla perfezione; ho visto nei commenti che qualcuno aveva già sollevato il “problema” però è passato diverso tempo quindi te lo ripropongo; c’è modo di mantenere lo stato home/not_home anche dopo il riavvio di HA?
Ciao Matteo, grazie per i complimenti 🙂 Quello che nomini è un annoso “problema” di Home Assistant. Diverse entità, per scelta, non hanno uno stato permanente e lo assumono solo quando questo si modifica. Così se riavii non hai un valore fino al cambio stato, come notavi. Anche secondo me sarebbe giusto mantenere il valore al riavvio ma bisogna chiederlo o tramite issue nel repo di Home Assistant (a cui ti risponderanno che “non è una issue!”) oppure tramite i suggerimenti votabili sul forum. Oppure aspettare il mese di WTH (“what the heck!” dove si possono dare suggerimenti su cose che dovrebbero funzionare in modo diverso, e questo mi sembra un ottimo candidato! 🙂
Poi, detto questo, credo che si possa fare un workaround, anche se non ne ho mai sentito la forte necessità perchè HA non lo si riavvia quasi mai (e se lo fai spesso c’è qualcosa che non so o che sbagli te 😉 ).
Una soluzione potrebbe essere quella di creare un input_text per ogni device tracker, fare un’automazione triggerata alla chiusura di home assistant e salvare i device tracker che ti interessano nei relativi intput_text. E poi fare un’automazione che triggera all’avvio di home assistant usando il servizio device_tracker.see impostando quindi ai vari device_tracker gli stati salvati in precedenza.
E’ solo uno spunto scrivendo in libertà eh, non ho mai provato a farlo.
Grazie ancora, sopratutto per la risposta celere! Io riavvio spesso quando ci metto mano, essendo sempre un work in progress ho tanto da fare e imparare. Provo a valutare la questione input_text e vedere se ho le capacità per farlo. Un’altra domanda, vorrei capire se ho compreso il concetto di person; quando si è in home la priporità viene data al device tracker che abbiamo creato con la tua guida rispetto a quello del gps?
Ciao Henrik, ottimo articolo! Ho preso spunto dalla tua automazione per l’aggiornamento della posizione e l’ho resa un po’ più semplice: dato che gli ssid sono delle stringhe, si possono usare come chiavi di un singolo dizionario, che quindi diventa una serie di ssid: posizione.
Ottenere il valore associato ad una chiave di dizionario è immediato con il metodo get(chiave, valore_default).
I dizionari servono proprio a questo, a fare un lookup a velocità costante anziché dover iterare gli elementi di una lista fino a quando non si trova quello che soddisfa la condizione.
le azioni dell’automazione diventano quindi:
action:
– variables:
ssid_zones:
: not_home
home-ssid: home
work-ssid: work
# …
– service: device_tracker.see
metadata: {}
data:
dev_id: “{{ trigger.from_state.object_id }}”
location_name: “{{ ssid_zones.get(trigger.to_state.state, ‘not_home’) }}”
Ciao, grazie, hai perfettamente ragione! Quella sintassi è stata la prima che ho imparato per memorizzare tipi di dati complessi nei template e l’ho abusata ovunque 😁 Essendo io un
programmatore .net tipi esposti da Python mi erano piuttosto ignoti. Oggi padroneggio un po’ di più Python e farei anch’io esattamente come hai suggerito, ad eccezione del get con valore di default che non conoscevo (utilissimo!!!) Per cui ti ringrazio molto e aggiornerò l’articolo! 👍🏻
PS: ma quanto è più chiara la sintassi yaml del dizionario… Al tempo non conoscevo nemmeno quella!
E, come ti scrivevo anche su GitHub, non c’è nemmeno bisogno del primo valore not_home in quanto con il get che hai usato tutto il resto non previsto risulterà not_home 😉
Felice di essere stato d’aiuto! Come forse hai visto ho corretto il mio commento su GitHub 😉
Ciao Henrik, piuttosto che home o not home, a me il tracker (che poi tracker non è perchè non riesco ad inserirlo nella persona) mi ritorna sempre lo stato di ON: sbaglio qualcosa ?
automation:
– id: 48d481d3-9051-443b-a8ea-3e698f99f560
alias: Tracker – Wifi – Telefoni
trace:
stored_traces: 20
trigger:
– platform: state
entity_id:
– sensor.ac2003_wifi_connection
action:
– variables:
tracker: “{{ trigger.from_state.object_id }}”
zona: >
{% set zone =
[
{‘ssid’: ”, ‘zona’: ‘not_home’},
{‘ssid’: ‘Casa2’, ‘zona’: ‘home’},
{‘ssid’: ‘Casa5’, ‘zona’: ‘home’},
{‘ssid’: ‘Casa2_EXT’, ‘zona’: ‘home’},
{‘ssid’: ‘lucant’, ‘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}}”
Grazie in anticipo e complimenti per l’articolo !
Ciao, probabilmente ti stai confondendo e stai guardando lo stato dell’automazione (che è quella del codice che hai riportato). Il tracker viene creato, se non esisteva, alla prima esecuzione di questa automazione e si chiamerà device_tracker.ac2003_wifi_connection (perchè usa l’object_id dell’entità che triggera, nel tuo caso hai solo quella).
Se guardi il device_tracker vedrai che assume gli stati home, not_home e gli eventuali nomi di zona e lo potrai aggiungere a person.
Ciao ho letto l’articolo, mi sono fermato molto prima dei package custom. Ho usato una semplice automazione sulle persone che notidicano con un trigger quando entrano in casa o no in base alla LAN o GPS. Però il GPS dovresti approfondire come fare per aggiungere un componente della famiglia ad Home Assistant come citi tu nell’articolo, quindi partendo da zero con il telefono della persona interssata e l’app home assistant. Io vorrei solo ottenere i dati GPS ma non dargli accesso al pannello di HA, e vorrei creare un’automazione differente che mi mandi diverse notifiche una quando è un casa realmente uno quando entra nel raggio GPS della zone.casa. Potresti aiutarmi?
Ciao Henrik, e grazie per la dettagliatissima spiegazione. Io ho un problema un po’ particolare e non so se sia possibile da risolvere. Ho due case (casa1 e casa2) ed entrambe hanno un router wifi; in casa1 c’è l’hub HA e alcuni dispositivi integrati, mentre in casa2 ho solo alcuni dispositivi integrati in cloud. Vorrei tracciare l’entrata e uscita da casa1 e casa2 utilizzando la app companion su 2 telefonini, però considera che entrambi i device NON hanno sim con dati: in pratica quando perdono la connessione wifi la app companion non è più inn grado di aggiornare i sensori integrati in HA (gps, ssid, bssid ecc). Purtroppo mi sono reso conto che se la companion non è in grado di spedire all’hub gli stati aggiornati, essi rimangono com’erano indefinitamente finchè il telefonino non si connette ad un’altra wifi; ad esempio se esco a fare la spesa per 2 ore, lo stato del tracker della mia “person” su HA rimane costantemente “in casa”. C’è modo di forzare lo stato del tracker su “not home” se la companion non manda aggiornamenti per tot tempo?…
Ho provato ad usare l’integrazione nmap tracker e per casa1 (dove c’è HA) funziona perfettamente, tuttavia non è una soluzione per la seconda casa. Acquistare dati sulle sim dei cell non lo considero perchè casa1, dove vivo, è all’estero e casa2, dove torno un paio di giorni al mese, è in Italia e non è una soluzione efficiente.
Ciao, che condizione arzigogolata 🙂 Prova a vedere se non c’è un’integrazione direttamente del router in HA che sarebbe parecchio più efficiente di NMAP tracker, che è pesante. Io ad esempio uso FritzBox e con la sua integrazione funziona molto bene la rilevazione dei device connessi senza dover comunicare altro sulla rete ma usando lo stato che già il router ha.
Detto questo non ho una soluzione al problema.
La prima cosa che mi viene in mente, però, è che potresti mettere un’istanza di HA in locale nella seconda casa così da usare anche lì nmap o meglio l’integrazione del router e poter quindi rilevare usando quello. Poi puoi acquisire le entità che ti interessano dall’istanza remota di HA così che nel tuo HA principale ti fai dei sensori che tengano in considerazione i due tracker basati su nmap o integrazione router per generare uno stato casa1, casa2 o not_home.
Per collegare le istanze puoi usare questo componente: https://github.com/custom-components/remote_homeassistant
Purtroppo sei in una situazione un po’ complessa senza connessione dati esterna a casa…
Grazie per la risposta; in effetti la mia è una situazione un po’ borderline.
Per quanto riguarda casa1 nove uso nmap tracker, in effetti ho un router integrabile in HA (un vecchio ma ancora efficiente asus rt-n66u) e posso attivare i device-tracker su ogni dispositivo che si è mai collegato ad esso; vedrò se la soluzione funziona bene come nmap (quando avevo provato mi sembrava fosse un po’ più lento a cambiare lo stato).
Per quanto riguarda casa2 preferivo non fare investimenti; se non è fattibile lascerò perdere.
Ho notato una cosa interessante però: in casa2 ho un termostato tado connesso ed integrato via cloud, e tra le varie entità ci sono anche i due device_tracker degli smartphone mio e di mia moglie; magari usando in “person” su HA sia il tracker del router di casa1 che quello di Tado in casa2, potrei ottenere quello che vorrei.
Provo a configurare così HA e quando vado a casa2 verifico come si comporta.
Intanto buona pasqua a tutti.. magari non e` proprio il giorno migliore per rompere le scatole al prossimo, ma visto il meteo e la nullafacenza, ho deciso di buttare un occhio piu` accurato al gran lavoro (as usual) di Henrik. 🙂
Sono ancora un po’ in alto mare, pero` volevo intanto capire una cosa… nel file wifi.yaml, c’e` una discrasia tra quanto scritto sopra ed il contenuto del file…
Qui l’automation riporta:
trigger:
– platform: state
entity_id:
– sensor.tel_henrik_wifi
– sensor.tel_anto_wifi
– sensor.tel_erica_wifi_connection
to:
Nel file invece:
trigger:
– entity_id: sensor.tel_henrik_wifi
platform: state
– entity_id: sensor.tel_anto_wifi
platform: state
– entity_id: sensor.tel_erica_wifi_connection
platform: state
Il “to:” quindi e` sparito… non e` piu` necessario?
E poi, le entity_id sono arbitrarie (quindi create ad hoc) o devono essere uguali al sensore che il telefono ha per la connessione wifi (nel mio caso, “sensor.pixel_6_pro_wifi_connection”)?
Perche` ho notato che alla fine la posizione dei nostri utonti (mio e della mia iena) e` sempre e comunque determinata dalla geolocalizzazione e mai dal wifi connesso, il che fa perdere un po’ di senso al lavoro…
Any ideas? (dopo Pasqua, ovviamente 🙂 )
Ciao.
Ciao Walter, solo per aver usato la parola “discrasia” hai tutta la mia stima 🙂
Grazie della segnalazione. In effetti mi sa che ho aggiornato alla versione più recente l’articolo ma non il package da scaricare. Funziona allo stesso modo e preferisco la sintassi usata nell’articolo (con un solo trigger basato sulle tre entità) per via del fatto che è più compatto. Il to: merita un approfondimento.
Se specifichi to: senza alcun valore stai indicando al trigger di far eseguire l’automazione qualunque valore assumano le entità elencate, quindi solo e soltanto quando cambiano valore il trigger viene lanciato. Se non metti il to: qualunque modifica allo stato dell’entità innesca l’automazione. E’ una sottile differenza che significa che nel secondo caso (senza il to:) anche solo un cambio attributo senza che il valore dell’entità cambi fa scattare il trigger.
Essendo che i sensori in questione non hanno attributi le due sintassi si equivalgono. Ma a scopo divulgativo a volte le piccole cose fanno grandi differenze, come mi hai appena ricordato. La sintassi più formalmente corretta è usando il to:
Le entity ID nel trigger non sono arbitrarie, devono essere i sensori che il telefono espone (e che hai attivato, non sono attivi per default) riguardo all’SSID collegato. Questa automazione creerà automaticamente dei device_tracker con lo stesso nome dei sensori che il telefono espone (per dirla in modo corretto con lo stesso object_id). Esempio il tuo sensore sensor.pixel_6_pro_wifi_connection che avrai messo nel trigger creerà automaticamente grazie all’automazione il device_tracker.pixel_6_pro_wifi_connection.
La posizione degli utenti del tuo sistema è sempre determinata dalla posizione perché non hai ancora attivato correttamente questa automazione 🙂 Quando lo farai vedrai che diverse volte il wifi scatenerà un cambio zona prima del GPS.
Ogni tanto la lingua Italica serca di rendersi utile… 😂😂
Ok, chiarito perfettamente sia la differenza tra le due versioni che l’uso del to:, comunque avevo provato ambedue senza (giustamente) riscontrare differenze.
Chiaro anche il discorso sensore -> tracker, in effetti l’avevo gia` fatto cosi` (a sentimento, non mi “suonava” che potesse essere diverso da com’e`) ma per ora continua a ‘ballonzolare’ allegramente tra i vari tracker e non riesce a mettersi d’accordo con se’ stesso 😎
Per intenderci, oggi pomeriggio sono rientrato alle 16.41 e da li` si e` scatenata la samba della posizione, in circa un’ora sono andato ovunque, compreso il garage che sta a 100 mt da casa 😂…
dopo con calma cerco di distillare i perche` ed i percome, ma gia` vedo parecchia indecisione tra i vari tracker…. a scopo di test ho aggiunto anche un’istanza di traccar sul mio telefono, che alla fine pare discreta.
Il tracker migliore e` quello via ping ma per altri motivi non lo posso usare se non per test.
Il mio router (Mikrotik) ha una funzione praticamente identica a quella del Fritz! ma non mi pare proprio il massimo della reattivita`…
Vabbe`, faccio un po’ di prove e se non ti spiace ti tengo aggiornato.
Grassie.
Anche Fritz non è velocissimo, soprattutto in uscita da casa. Ma quello è il metodo, secondo me, più importante e affidabile per avere la posizione di “a casa”, assolutamente da usare nel mix. Rispetto all’articolo mi son fatto un binary_sensor per persona (binary_sensor.henrik_a_casa, ecc) che, con la mia logica, determina se ognuno è a casa o no. A differenza di Person, che ha le sue logiche non modificabili, in tal modo puoi dar priorità a quel che è importante per te.
Nel mio caso la priorità è non dare un falso “fuori casa” (in quanto si attiverebbe antifurto, si abbasserebbero tapparelle, spegnerebbero luci e TV, si abbasserebbe la temperatura. Sai se succede a mia moglie a casa da sola…? Mi aspetta col mattarello al rientro dal lavoro… 😀 ) per questo ho tutti i sensori in or, ovvero qualunque sensore dica che sono a casa basta per essere a casa.
Inoltre ho inserito un delay_off di 5 minuti per evitare che un repentino fuori casa (esempio quando arrivo a casa, poi mi allontano per parcheggiare accanto poi esco dalla macchina e rientro non voglio faccia home -> not_home -> home…)
Ti riporto uno dei sensori per riferimento:
- binary_sensor:
- name: "Henrik a casa?"
# state: "{{ is_state('person.henrik_sozzi', 'home')}}"
state: "{{ is_state('device_tracker.hsphone', 'home') or is_state('device_tracker.tel_henrik', 'home') or is_state('device_tracker.tel_henrik_wifi', 'home') }}"
delay_off:
minutes: 5
picture: "/local/henrik{% if not(is_state('binary_sensor.henrik_at_home', 'on')) %}_off{% endif %}.jpg"
device_class: presence
unique_id: "henrik_at_home"
attributes:
name: Henrik
Secondo me il tempo per andare in not_home di Fritz et similia è importante sempre per il principio di non dare falsi fuori casa. Essendo che telefoni possono scollegarsi dal wifi temporaneamente per ottimizzare il consumo delle batterie quel tempo è fondamentale per avere un dato affidabile.
Personalmente mi sta bene avere il fuori casa qualche minuto più tardi ma averlo solo quando sono effettivamente uscito.
E posso dire che sono anni che gestisco automaticamente lo stato di qualcuno a casa / nessuno a casa e se non funzionasse alla perfezione me ne accorgerei subito.
PS: il fatto che la tua posizione si discosti, ammesso che hai dato tutti i permessi di posizione precisa, può essere normale in casa in quanto il segnale GPS al coperto è quello che è e perde di precisione. Anche per questo è fondamentale un sensore che restituisca lo stato di connessione del router. E in tutto questo anche l’SSID collegato fa brodo… (oltre che velocizzare)