Al momento stai visualizzando Posizione delle persone con Home Assistant

Posizione delle persone con Home Assistant

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.

Ogni casa, conformazione, abitudini, esigenze sono differenti dalle altre. Questo non vuole essere una guida “fai così per” bensì spiegare i metodi che uso personalmente capendone il funzionamento così da poterlo adattare alle tue specifiche esigenze.

Se è un argomento che può interessarti allaccia la cintura e partiamo, sono certo che troverai diversi spunti interessanti!

Consiglio caldamente la lettura anche di questo articolo per sapere come configurare al meglio l’app su smartphone e le relative impostazioni del sistema operativo per ottenere una posizione affidabile, sicura e che non consumi la batteria.

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:

Card di ausilio alla posizione delle persone con Home Assistant

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.

Configurazione delle zone per individuare la posizione delle persone con Home Assistant
Interfaccia di modifica di una zona. Consiglio di non usare un raggio troppo stretto, quando il GPS è al chiuso la precisione cala notevolmente e rischiate che l’app creda di essere uscita dalla zona ripetutamente durante la permanenza.

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:

Home Assistant Mobile AppAVM FRITZ!BoxNmap TrackerPing (ICMP)Life360Tado
L’app ufficiale di Home Assistant è per me il mezzo migliore di rilevare la posizione delle persone, permette l’uso del GPS e imposta automaticamente il geofencing in background delle zone configurate in Home Assistant. Permette la configurazione della frequenza e precisione richieste così che ognuno possa fare fine tuning di tali parametri, se desiderato (io mi trovo bene a default).
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
Chi possiede un router Fritz! come me non può non utilizzare questa ottima integrazione! Essa sfrutta infatti la tabella di presenza in rete dei dispositivi che il router Fritz gestisce già internamente per ogni device connesso in wifi o via cavo alla nostra rete. In tal modo facciamo totale offload di questo carico sul router, senza inondare la rete di pacchetti ICMP per sapere chi è presente. Ottima per sapere velocemente quale smartphone è collegato alla rete wifi di casa in modo stabile ed efficiente. Esistono altre integrazioni di router di altre marche ma non avendoli mai testati non posso consigliarli.
Leggi la documentazione ufficiale
Questa integrazione utilizza NMAP, un potente tool esistente per Linux e Windows che effettua una scansione dei dispositivi presenti in rete con possibilità di utilizzare diverse tecniche di rilevazione. Fa il suo dovere ma per come vedo le cose io preferisco usare i dati, se possibile, che il router già mantiene al suo interno. Se non hai un router integrabile, comunque, questa può essere una utile opzione.
Leggi la documentazione ufficiale
Una semplice integrazione che permette di interrogare degli IP noti (sarà quindi necessario avere un IP statico o prenotato con IP fisso tramite DHCP per i dispositivi da tracciare). L’integrazione è leggera e versatile ma per tracciare gli smartphone, in particolare gli iPhone, rischia di non essere adeguata in quanto i telefoni tendono a disattivare temporaneamente il wifi per risparmiare batteria. Resta una strada da provare, comunque.
Leggi la documentazione ufficiale
Questa è l’integrazione che si interfaccia con l’app Life360 presente per Android e iOS che permette di tracciare i componenti della famiglia. Alcuni utenti si trovano meglio con questa app riportandone la precisione.
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
Se utilizzi Tado come sistema di riscaldamento (qui un articolo se ti interessa capire come funziona) hai installato sugli smartphone dei componenti familiari l’app Tado, che effettua la loro geolocalizzazione e lo fa bene. Con questa integrazione puoi quindi utilizzare l’informazione che i server Tado già acquisiscono ma tieni conto dei seguenti limiti: il polling sul cloud di Tado avviene ogni 30 secondi al massimo, puoi rilevare solo l’informazione home / not-home in quanto per ragioni di privacy Tado non condivide la posizione GPS. Può comunque essere una strada percorribile per aumentare la sicurezza della presenza.
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.

Impostare i device_tracker nell'entità person per acquisire la posizione delle persone con Home Assistant

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.

Se hai anche un solo device_tracker usa lo stesso l’oggetto Person e crea le tue automazioni su di esso, non direttamente sul device_tracker!
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.

Attenzione! Per rispettare la privacy è necessario avere un esplicito consenso delle persone tracciate indicando loro lo scopo del tracciamento, le esatte modalità, dove risiedono i dati tracciati e chi è il responsabile della privacy. Bisogna anche essere pronti a rimuovere un tracciamento qualora la persona lo richieda.

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:

Struttura dei packages di questo articolo per acquisire la posizione delle persone con Home Assistant
Struttura dei packages di questo articolo per acquisire la posizione delle persone con Home Assistant

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.

Tanto lavoro è stato fatto sul geofencing delle app da quando avevo steso questo articolo originalmente e devo dire che il tracker GPS dell’app companion, almeno su Android, funziona ora piuttosto bene. Molto dipende però dallo smartphone e dalle personalizzazioni del suo produttore che possono modificare piuttosto considerevolmente la velocità di aggiornamento / refresh della posizione GPS.

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 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.

Sebbene usare il wifi può velocizzare la rilevazione dei cambi zona, in particolare delle zone esterne a casa e del rientro all’abitazione, c’è anche un contro. Limitatamente a quando siamo fuori casa, se spegniamo il wifi del telefono, viene spento/riavviato l’access point della zona in cui siamo o ci spostiamo fuori portata wifi, il tracker passerà a not_home, facendo scattare le automazioni di uscita dalla zona. Valuta bene se questa soluzione può essere adatta alle tue abitudini ed eventualmente escludila dalle zone dove potrebbe non funzionare bene. Nei miei casi d’uso ne sono davvero soddisfatto.
(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.

Un grazie a Massimiliano Albani che mi ha introdotto agli array di dizionari. Metodo preziosissimo per automazioni che possono gestire dati variabili senza dover creare automazioni multiple.

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 funzione selectattr('ssid', 'eq', trigger.to_state.state) che seleziona il record avente l’attributo ssid 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 con map(attribute='zona') che estrae dai dizionari di ogni record il solo attributo zona restituendo un array di stringhe contenenti le zone dei record filtrati precedentemente.
  • tramite pipe | processiamo quindi l’array precedente con first 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 con first)
  • infine tramite ancora pipe | processiamo il risultato con default('not_home') così che se il dato in arrivo è nullo restituiamo il valore not_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.

Le entità create con 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
Rilevazione posizione delle varie entità definite nell'oggetto person di Home Assistant

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:

Posizione delle persone con Home Assistant tramite l'utilizzo di badge con i sensori creati

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.

Il comportamento di questo switch è molto bizzarro in quanto quando ci clicchiamo per cambiarne stato il suo stato torna graficamente immediatamente quello che aveva prima ma il comando è stato inviato. Quando finalmente l’app l’avrà presa in considerazione lo stato dello switch tornerà nello stato che abbiamo impostato.
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)

  • Effettuare i tuoi acquisti AliExpress usando QUESTO LINK

Henrik Sozzi

Sono un analista programmatore per lavoro e per passione. Amo la domotica, la stampa 3D e la tecnologia in generale. Mastodon: @pixel

Questo articolo ha 138 commenti

  1. Giovanni

    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.

    1. Henrik Sozzi

      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!

  2. Alberto

    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

    1. Henrik Sozzi

      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.

    2. Henrik Sozzi

      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!

  3. Alberto

    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

  4. Fabrizio

    Ciao nel caso la cartella package non è presente basta crearla? Per inserire i file?
    Il tutto funziona con home assistant 2021.9.6?
    Fabrizio

    1. Henrik Sozzi

      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 🙂

  5. Andrea Santinelli

    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

    1. Henrik Sozzi

      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"

  6. Andrea Santinelli

    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

    1. Henrik Sozzi

      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.

  7. Andrea Santinelli

    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

    1. Henrik Sozzi

      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…

  8. Andrea Santinelli

    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!

    1. Henrik Sozzi

      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.

  9. Andrea Santinelli

    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!!

  10. Andrea Santinelli

    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.

    1. Henrik Sozzi

      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.

  11. Andrea Santinelli

    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!!!

    1. Henrik Sozzi

      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 😉

  12. Andrea Santinelli

    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!!!

  13. Andrea Santinelli

    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?

    1. Henrik Sozzi

      Ciao, le immagini di qualunque tipo vanno messe nella /config/www

  14. Andrea Santinelli

    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?

    1. Andrea Santinelli

      Lascia perdere la mia domanda. Ho preso un abbaglio. Tutto funziona alla grande!!

  15. Andrea Santinelli

    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

    1. Henrik Sozzi

      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…

  16. Andrea Santinelli

    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!!

  17. orfmia

    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!

    1. Henrik Sozzi

      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…)

  18. sphinxchocolatecirce42891

    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.

    1. Henrik Sozzi

      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! 👍🏻

      1. Orfmia

        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!

        1. Henrik Sozzi

          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…

          1. orfmia

            “viene creata automaticamente dall’app quando la connetti ad Home Assistant la prima volta”
            scusa ma è questo che non capisco… 🙁

          2. Henrik Sozzi

            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.

          3. orfmia

            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!

          4. Henrik Sozzi

            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 il set_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… 😉

          5. orfmia

            Capito, uso il device.trecker generato dall’app…. in attesa del tuo nuovo articolo ci provo… altrimenti dove sta il divertimento 🙂

  19. Andrea Santinelli

    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

    1. Henrik Sozzi

      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 😜

  20. emanuele

    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?

    1. Henrik Sozzi

      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ù.

      1. emanuele

        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!

        1. Henrik Sozzi

          Che io sappia no, mi spiace. Prova a cercare però, Google è tuo amico 😉

          1. Emanuele Tocci

            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!😊😊

          2. Henrik Sozzi

            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

  21. Graziano Melzi

    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?

  22. Paolo

    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

    1. Henrik Sozzi

      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

  23. Davide

    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.

    1. Henrik Sozzi

      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 🙂

  24. Davide

    Ciao Henrik, secondo te com’è possibile che quando il telefono si collega al SSID non scatti l’automazione

    1. Henrik Sozzi

      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.

  25. Davide

    Attenderò! Grazie mille Henrik, complimenti per il lavoro!

  26. Francesco

    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??

    1. Henrik Sozzi

      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.

  27. Michelangelo

    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. 👍

    1. Henrik Sozzi

      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ì.

  28. Michelangelo

    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.

    1. Henrik Sozzi

      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)

  29. Michelangelo

    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!

    1. Henrik Sozzi

      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 👍🏻

  30. Giuseppe

    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 ?

    1. Henrik Sozzi

      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.

  31. Giovanni

    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

    1. Henrik Sozzi

      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

  32. Marco

    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?

    1. Henrik Sozzi

      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.

  33. gfkappa63

    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.

    1. Henrik Sozzi

      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 un to: 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.

    1. Henrik Sozzi

      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à 🙂

  34. Emanuele

    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?

    1. Henrik Sozzi

      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.

  35. Francesco

    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

  36. 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

    1. Henrik Sozzi

      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:

      • Restringere la zona di casa così che non tocchi il lavoro. Purtroppo 20mt è davvero vicino, fai qualche esperimento ma temo che difficilmente possa funzionare usando il GPS, basta un po’ di deviazione quando è al chiuso per sbagliare zona, potenzialmente…
      • Usare il wifi ok ma non da solo, o meglio puoi anche usarlo da solo per dire che è al lavoro ma non per determinare che è a casa proprio per quel che dicevi te: se spegne il wifi o si scollega per sbaglio… Specialmente se hai automazioni importanti legate alla presenza a casa (spegnere luci, abbassare tappaprelle, inserire antifurto…
      • Puoi abilitare una integrazione per la rilevazione della presenza in rete come NMAP o ping. Non so quanto bene funzionino alla lunga perchè i telefoni tendono a non essere sempre raggiungibili sul wifi per risparmiare energia. E se hai abilitata la randomizzazione del mac address disabilitala, altrimenti sarà impossibile tracciare il dispositivo quando connesso.
      • Puoi prendere un Fritz 🙂
      • Puoi pensare ad altre soluzioni di tracking, ad esempio basate su bluetooth. O del telefono o di un portachiavi come Tile o simili. E un rilevatore usando ESP32 o qualcosa del genere. Non l’ho mai fatto però, non so darti informazioni più precise ma le trovi cercando in rete.

      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… 🙁

  37. Andrea Santinelli

    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

    1. Henrik Sozzi

      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.

  38. Andrea Santinelli

    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.

    1. Henrik Sozzi

      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 🙂

  39. Andrea Santinelli

    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.

  40. ClaudioG

    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

    1. Henrik Sozzi

      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!

  41. ClaudioG

    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?

    1. Henrik Sozzi
      1. Rilevo la presenze degli ospiti di casa mia usando il device tracker che fornisce l’ottima integrazione di FritzBox (ma non è l’unica via, anche altri router lo fanno e se il tuo router non lo fa che sempre NMAP o ping). In questo caso si, rileva i MAC address dei device connessi alla tua rete wifi ed espone ognuno di essi come device_tracker che può assumere solo lo stato di home / not_home. In sostanza ti dice chi è collegato alla tua rete. E lo uso anche per i miei telefoni all’interno dell’oggetto person oltre agli altri tracker. Attualmente il device_tracker di Fritz è il tracker che mi da informazioni più affidabili sullo stato di a casa o no. Chiaramente se sei abituato a spegnere il wifi o hai problemi di copertura a casa tua il risultato può variare.
        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.
      2. Si, la zona deve necessariamente avere delle coordinate. Nel tuo caso d’uso però non vuoi rilevare una zona ma una condizione (essere in auto). Ti sconsiglio quindi di integrare questa cosa nell’elaborazione dell’oggetto person con i device_tracker, proprio per i problemi che citi te. Piuttosto farei un sensore booleano che indica se sei in auto o no basato sull’SSID che la tua auto espone. Ma non ti dice in che zona sei quindi lascerei fuori il tracker.
      3. Urka programmavi VBA? Io programmavo in VB 😀 Capisco l’esigenza. Io durante lo sviluppo uso le persistent notification come ti stai immaginando che avresti usato MSGBOX. Qui più info: https://www.home-assistant.io/integrations/persistent_notification/ Puoi anche usare multinotify con il parametro notify_ha che fa proprio quello. Poi quando funziona come vuoi lo commenti o lo elimini. Altro metodo che uso è fare una plancia di debug dove creo delle card che mi mostrano lo stato di tutti i sensori inerenti così hai una vista in tempo reale che ti mostra come si modificano i valori. Altro modo ancora è usare la potentissima funzione di debug di Home Assistant (disponibile solo se l’automazione ha un ID univoco). Con quella puoi esaminare l’esecuzione passo passo di ogni automazione nelle ultime x esecuzioni. Poi sta a te usare il metodo migliore a seconda dell’esigenza 🙂
      4. La variabile tracker l’ho creata per migliorare la leggibilità del codice, non per esigenza. Si, avresti anche potuto usare direttamente trigger.from_state.object_id nel parametro dev_id ma in questo modo diventa più leggibile che quello è il nome del tracker. Inoltre se un domani lo vuoi rinominare aggiungendo un suffisso, per esempio, avere una variabile rende il tutto più leggibile mantenendo queste elaborazioni in un blocco vicino e non sparpagliate nel codice dell’automazione. Ma sono sofismi e gusti personali.
      5. Le variabili che dichiari all’interno di una automazione sono visibili solo in quella automazione, non al di fuori. In quell’esempio l’ho dichiarata come azione ma possono anche essere dichiarate a livello di automazione (quindi a pari livello di trigger, condition e action), che forse in questo caso sarebbe stato anche meglio, ma il risultato è identico, sono sempre visibili nella sola automazione. Quando le dichiari nel codice puoi anche cambiargli valore ma occhio che la l’ambito è locale, ovvero se ad esempio una variabile a = 1 all’inizio dello script dentro ad una sequenza di una azione if modifichi la variabile a = 2, quando esci dalla sequenza dell’if e torni alla sequenza originale a varrà di nuovo 1. 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.

  42. ClaudioG

    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 🙂

    1. Henrik Sozzi

      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…

  43. ClaudioG

    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!

    1. Henrik Sozzi

      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!

  44. Carlo

    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

    1. Henrik Sozzi

      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 di home quando anche un solo componente è a casa, altrimenti not_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à da not_home ad home e il template sensor si aggiornerà. Poi arriva il secondo ospite ma il gruppo non si aggiornerà più , restando home 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!

  45. ClaudioG

    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à ….

    1. Henrik Sozzi

      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 un delay_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 nel delay_off per andare not_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 🙂

  46. ClaudioG

    Con i tuoi articoli si impara… di là si copia

  47. Carlo

    Ho risolto utilizzando sensor_binary, Grazie per la tua veloce e utile assistenza

  48. Carlo

    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

  49. Marco

    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.

    1. Henrik Sozzi

      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 🤣

  50. marco

    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à.

    1. Henrik Sozzi

      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.

  51. forziere3Filippo

    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??

    1. Henrik Sozzi

      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.

  52. Paolo Saggiomo

    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

    1. Henrik Sozzi

      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

  53. Carlo

    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

    1. Henrik Sozzi

      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)

  54. Carlo

    Grazie. Sempre utile e tempestivo

  55. Paolo Saggiomo

    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

    1. Henrik Sozzi

      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.

  56. Paolo Saggiomo

    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

  57. Paolo Saggiomo

    Henrik, forse succede solo chiamando l’automazione da interfaccia, come non detto.

    1. Henrik Sozzi

      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.

  58. SolarFlor

    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.

  59. Alex

    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

    1. Henrik Sozzi

      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.

  60. matteoopc

    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?

    1. Henrik Sozzi

      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.

  61. matteoopc

    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?

  62. sanzoghenzo

    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’) }}”

    1. Henrik Sozzi

      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! 👍🏻

    2. Henrik Sozzi

      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 😉

      1. sanzoghenzo

        Felice di essere stato d’aiuto! Come forse hai visto ho corretto il mio commento su GitHub 😉

  63. Mauriluk

    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 !

    1. Henrik Sozzi

      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.

  64. Salvatore

    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?

  65. gEnE

    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.

    1. Henrik Sozzi

      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…

      1. gEnE

        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.

  66. Walter

    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.

    1. Henrik Sozzi

      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.

      1. Walter

        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.

        1. Henrik Sozzi

          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)

Rispondi

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.