You are currently viewing Posizione delle persone con Home Assistant

Posizione delle persone con Home Assistant

  • Autore dell'articolo:
  • Categoria dell'articolo:Home Assistant
  • Commenti dell'articolo:44 commenti
  • Ultima modifica dell'articolo:6 Maggio 2021

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.

[su_note note_color=”#ffff80″]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.[/su_note]

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

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:

[su_tabs]
[su_tab title=”Home Assistant Mobile App” anchor=”mobileapp”]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[/su_tab]
[su_tab title=”AVM FRITZ!Box” anchor=”fritz”]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[/su_tab]
[su_tab title=”Nmap Tracker” anchor=”nmap”]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[/su_tab]
[su_tab title=”Ping (ICMP)” anchor=”ping”]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[/su_tab]
[su_tab title=”Life360″ anchor=”life360″]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[/su_tab]
[su_tab title=”Tado” anchor=”tado”]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[/su_tab]
[/su_tabs]

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.

[su_note note_color=”#ffff80″]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.[/su_note]

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.

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.

[su_note note_color=”#ffff80″]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.[/su_note]

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

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)
  • person.antonella (mia moglie, tracciata dall’app e da Fritz)
  • 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 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 la lettura dell’articolo che spiega come crearlo e come funziona nel dettaglio.

Per impostare lo stato dei device_tracker utilizzo lo script python set_state. Se non ce l’hai ti rimando alla lettura dell’articolo dove scaricarlo e comprenderne il funzionamento.

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 in ritardo di un tempo variabile ma sempre troppo elevato rispetto alle aspettative. Questo perchè l’app non interroga la posizione GPS di continuo per risparmiare batteria e dovrà quindi avere il tempo di “accorgersi” che si è entrati o usciti da una determinata zona.

Possiamo però usare un trucchetto per velocizzare parecchio questi passaggi: sfruttare il collegamento a un SSID specifico di quella zona. L’app invia infatti in modo quasi immediato le connessioni o disconnessioni dalle reti Wifi.

Per attivare questo sensore andare dal’app in Configurazione app -> 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.

Come funziona l’impostazione del device_tracker in base all’SSID

Analizzando il package wifi.yaml scaricato precedentemente ci accorgiamo che è formato da blocchi di due automazioni, ripetibili per ogni SSID / zona da velocizzare. Prendiamo il blocco delle due automazioni che velocizzano l’entrata/uscita della mia persona dalla zona Ufficio:

automation:
  - id: 46ff3d01-3f76-4f8b-a128-558a4c26a6ff
    alias: Tracker - Wifi - Tel Henrik Wifi Ufficio ON
    description: "Imposta lo stato Ufficio quando il telefono di Henrik si collega al wifi dell'ufficio"
    trigger:
      - entity_id: sensor.tel_henrik_connessione_wifi
        platform: state
        to: !secret wifi_ufficio_henrik
    action:
      - service: python_script.set_state
        data:
          entity_id: device_tracker.tel_henrik
          state: Ufficio
          source_type: wifi

  - id: 61347117-5e93-400a-a20b-64171a655c00
    alias: Tracker - Wifi - Tel Henrik Wifi Ufficio OFF
    description: "Imposta lo stato not_home quando il telefono di Henrik si scollega dal wifi dell'ufficio"
    trigger:
      - entity_id: sensor.tel_henrik_connessione_wifi
        from: !secret wifi_ufficio_henrik
        platform: state
    action:
      - service: python_script.set_state
        data:
          entity_id: device_tracker.tel_henrik
          state: not_home
          source_type: wifi

Queste due automazioni usano lo script set_state che permette di impostare lo stato e gli attributi di una entità a piacimento.

Come funzionano? La prima verrà eseguita quando la rete wifi a cui è collegato il telefono passa all’SSID impostato alla voce secret wifi_ufficio_henrik (se non sai come funziona secrets.yaml leggi la pagina Storing secrets della documentazione ufficiale). Imposterà quindi lo stato del device_tracker al valore Ufficio aggiornando anche l’attributo source_type a wifi (ci può aiutare a fare eventuale debug).

La seconda verrà eseguita quando la rete wifi a cui è collegato il telefono passa da wifi_ufficio_henrik a qualunque altra (normalmente sarà <not connected> ma non importa).

In questo modo lo stato del device_tracker, e quindi dell’entità person, cambierà stato quasi immediatamente all’entrata e all’uscita dalla portata del wifi.
In seguito arriverà anche il GPS, che aggiornerà a sua volta il device_tracker con medesimo stato (nome della zona) ma source_type: gps, senza scatenare alcun trigger in quando il nome della zona rimarrà la medesima.

Se hai configurato correttamente tutto sarai sorpreso di quanto bene funzioni questa soluzione! E probabilmente ti chiederai, come me, perchè non l’abbiano integrata nell’app companion. Sto sostenendo un issue su github, se ti interessa seguire o sostenerla a tua volta dalle un occhio e metti un like (il mio nome su github è energywave): link all’issue.

[su_note note_color=”#ffff80″]Può capitare che avvengano dei brevi bounce. Questo perchè la rilevazione wifi, molto veloce, imposta lo stato su un valore ma il telefono, con posizione ancora non aggiornata, capita che imposti di nuovo lo stato precedente.
Accade raramente e dura da pochi secondi a pochi minuti a seconda delle impostazioni ma va tenuto in considerazione.
Vedremo nelle notifiche in work.yaml come risolvere semplicemente questo piccolo inconveniente.[/su_note]

Package auto_detect.yaml: creiamo dei sensori affidabili per rilevare quando siamo a casa

I criteri di assegnazione dello stato all’entità person sono ottimi. Ma a noi interessa avere l’informazione se siamo o non siamo a casa nel modo più sicuro possibile.

Possiamo infatti basare su tale informazione delle azioni che non devono essere scatenate per errore come: l’inserimento/disinserimento dell’antifurto, alzare / abbassare le tapparelle, spegnere tutte le luci, ecc.

Ecco perchè non ci baseremo sull’entità person ma creeremo dei sensori binari che determinano per ogni persona importante lo stato di on (a casa) o off (non a casa).

Nel package ci sono due template per la mia persona (henrik), due per mia moglie (antonella) ed uno per mia mamma (ankie).
Analizziamo il primo dei due binary_sensor template relativi a me:

      # Stato di "a casa" dell'app di Henrik ma con delay on e off di 10 minuti per evitare i bounce e rendere l'informazione più sicura, seppur lenta
      henrik_at_home_app:
        friendly_name: "App Henrik a casa?"
        unique_id: "henrik_at_home_app"
        device_class: presence
        delay_on:
          minutes: 10
        delay_off:
          minutes: 10
        value_template: "{{ is_state('device_tracker.tel_henrik', 'home') }}"

Questo genera un sensore binary_sensor.henrik_at_home_app che riporta se lo stato del device_tracker fornito dall’app companion è home (il sensore sarà on) oppure qualunque altro valore (il sensore sarà off).

Rispetto all’informazione del tracker ho aggiunto un delay_on di 10 minuti ed un delay_off di altrettanti minuti. In questo modo avremo un sensore più lento ad aggiornare lo stato ma più sicuro in quanto molto meno prono a generare falsi stati di non a casa quando nella zona di casa.
Questo sensore non è pensato per essere usato singolarmente ma serve per alimentare il seguente binary_sensor template:

      # Stato di "a casa" di Henrik considerando il device_tracker Fritz o il sensore sopra (originato dall'app). Lo scopo è cercare di evitare
      # 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('device_tracker.tel_henrik_lan', 'home') or is_state('binary_sensor.henrik_at_home_app', 'on') }}"
        entity_picture_template: "/local/henrik{% if not(is_state('device_tracker.tel_henrik_lan', 'home') or is_state('binary_sensor.henrik_at_home_app', 'on')) %}_off{% endif %}.jpg"

Questo genera un sensore binary_sensor.henrik_at_home che rappresenta lo stato di a casa (on) o fuori casa (off) in modo molto affidabile.
Infatti combina il sensore precedente con il device_tracker di Fritz, che è parecchio veloce ed affidabile nel rilevare lo stato di “a casa”. Entrambi i sensori hanno un tempo piuttosto lungo a determinare che un dispositivo non è più a casa, di conseguenza se uno dei due avesse un breve periodo di smarrimento sarebbe compensato dall’altro (i due sensori sono infatti in or, basta che uno dei due dica di essere a casa per risultare a casa)

Su questo sensore si possono creare trigger di automazioni affidabili sulla presenza in casa (considerando che rileveranno il “fuori casa” 10 minuti dopo l’effettiva uscita).

I sensori relativi a mia moglie funzionano nello stesso identico modo mentre quello per mia mamma (ankie_at_home) utilizza il solo device_tracker Fritz.

Rendere il sensore più esteticamente gradevole

In questo sensore vediamo impostata anche la proprietà device_class: presence che ci mostrerà nell’interfaccia grafica gli stati di on e off rispettivamente come a casa e fuori casa e un’icona a forma di casa ad indicare il tipo di sensore.
Inoltre la proprietà entity_picture_template permette di impostare un’immagine differente a seconda dello stato: /local/henrik.jpg per quando a casa e /local/henrik_off.jpg per quando non a casa.
Questo rende pratico inserire questi sensori 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

Gruppo e generazione eventi

In questo package ci sono ancora due parti importanti. La prima è il gruppo anyone_at_home:

group:
  anyone_at_home:
    name: Qualcuno è a casa?
    entities:
      - binary_sensor.henrik_at_home
      - binary_sensor.antonella_at_home
      - binary_sensor.ankie_at_home

Tramite questo gruppo possiamo sempre sapere se qualcuno è a casa. Basterà che una delle entità sia ad on, infatti, per risultare anch’essa ad on. Oltre ad essere un ottimo strumento in condizioni e trigger per sapere se c’è qualcuno a casa ci viene utile per generare due eventi comodissimi:

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'
    condition: []
    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'
    condition: []
    action:
      - event: arrivo_primo_a_casa

Queste due automazioni, infatti, 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.

Se ad esempio 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.

Package work.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):

  - 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
          alexa_volume_target: media_player.pian_terreno
          notify_app: notify.ALL_DEVICES
          channel: people
          critical: true
          icon: users

Partiamo dal trigger: sull’oggetto person di mia moglie quando lo stato passa da Negozio a qualunque altra cosa.

Ci sono tre condizioni. L’ultma è 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 bounce in cui il GPS aggiorna il device_tracker (e quindi l’oggetto person) con uno stato non aggiornato e poi si “accorge” e ritorna nello stato corretto.

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.

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:

  - 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
        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
          alexa_volume_target: media_player.pian_terreno
          notify_app: notify.ALL_DEVICES
          channel: people
          critical: true
          icon: users

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.

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

[su_note note_color=”#ffff80″ id=”buymeacoffee”]

Ti è piaciuto questo contenuto?

Se ti è stato utile l’articolo che hai letto potresti pensare di darmi una mano offrendomi un caffè!
Oltre ad aiutarmi a star sveglio nelle nottate di ricerche e scrittura mi daresti una mano concreta nel sostenere le spese del server web, incentivandomi a produrre altri contenuti di qualità.
(se non vedi il tasto di seguito clicca QUI)

[/su_note]

Henrik Sozzi

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

Questo articolo ha 44 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. 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. 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. 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. 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. 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. 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. 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. 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. Lascia perdere la mia domanda. Ho preso un abbaglio. Tutto funziona alla grande!!

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

Rispondi