Automazioni in base alla geolocalizzazione dei propri device – Home Assistant

Automazioni in base alla geolocalizzazione dei propri device Home Assistant

Un aspetto molto importante da prendere in considerazione quando si parla di sicurezza della propria Casa Domotica e sapere se c’è qualcuno in casa oppure se sono usciti tutti. In quest’articolo vediamo come rilevare la presenza di una persona in casa oppure fuori casa con Home Assistant installato su Raspberry Pi 3 sfruttando CloudMQTT e OwnTracks per la geolocalizzazione di uno smartphone.

Come rilevare la presenza di una persona in casa oppure fuori casa

Come ho già scritto in altri articoli, come installare Home Assistant su Raspberry Pi 3 e come accedere a Home Assistant da remoto, il mio progetto finale è quello di poter utilizzare i prodotti Xiaomi Mi Smart Home per creare un sistema di sicurezza economico per la Casa Domotica, questo sfruttando le funzioni all’interno dell’applicazione Xiaomi Mi Home ma anche sfruttando Home Assistant installato su Raspberry Pi 3.

In quest’articolo vedremo come tracciare la posizione degli abitanti della casa e creare automazioni in base alla loro posizione, oppure in base alla condizione “qualcuno in casa” o “tutti fuori casa”. È possibile monitorare la posizione di un individuo in modi molti, io cercherò di illustrare quello più semplice.

Monitoraggio posizione di uno smartphone – Device Tracker – Home Assistant

Quale è l’unico oggetto che portiamo sempre con noi? Risposta esatta, il nostro tanto amato smartphone, se non ce l’hai ti consiglio di leggere l’articolo sui migliori smartphone del 2018, a parte gli scherzi vediamo con Home Assistant è in grado di capire dove siamo in un determinato momento e, in base alla nostra posizione, eseguire determinati automatismi.

Ci sono almeno due modi per rilevare la presenza di una persona in casa o fuori casa.

Il primo, molto banale, è quello di considerare un individuo in casa quando il suo smartphone è connesso alla rete WiFi di casa, ma questa modalità, da sola, non è sufficiente per un “tracker” efficacie, dato che potremmo avere il WiFi spento.

La seconda modalità invece è quella di affidarsi a servizi di tracciamento (geolocalizzazione) di terze parti, tipo OwnTracks , GPSLogger e Locative. Io prenderò in esame OwnTracks.

OwnTracks è una applicazione che va installata sul proprio smartphone Android o iOS, questa app trasmette la posizione del nostro smartphone ad un broker MQTT sfruttando il GPS.

MQTT (MQ Telemetry Transport) è un protocollo di comunicazione standard per l’internet delle cose (Internet of Things), viene utilizzato in quest’ambito perché è molto leggero e richiede pochissima banda, per maggiori informazioni vi rimando a Wikipedia

Un broker MQTT è un programma in grado di gestire i “messaggi” provenienti dai client remoti connessi alla rete.

La prima fase sarà quella di scegliere un Broker MQTT.

Quale Broker MQTT scegliere per OwnTracks?

La via più semplice dovrebbe essere quella di utilizzare il broker MQTT integrato all’interno di Home Assistant, io l’ho fatto per un po’, ma poi ho dovuto abbandonare per problemi di connessione con il miei smartphone.

Quindi mi sono affidato al servizio gratuito CloudMQTT, questo è un Broker MQTT online che permette di tracciare gratuitamente fino a 10 device, smartphone o altri prodotti per l’internet delle cose.

Registrazione a CloudMQTT e configurazione

Raggiungere il sito CloudMQTT e selezionare il piano gratuito, quindi creare un nuovo account.
registrazione a cloudmqtt

Inserire l’indirizzo email, cliccare su Sign up, riceverete una mail, cliccare su Confirm email, quindi inserire una password a scelta.

Terminata la fase di registrazione, cliccare sul pulsante verde in alto a destra, Create New Istance.

Dare un nome a piacere alla nuova istanza e quindi selezionare come Plan Cute Cat(free), come Data center io ho messo EU-West-1 (Ireland), quindi cliccare su Create New Instance.

Creata la nuova istanza la troveremo nella pagina principale di CloudMQTT ogni volta che effettueremo l’accesso.

Cliccare sul nome dell’istanza appena creata, si apre una nuova pagina dove troviamo alcuni dati (details) importanti che ci serviranno in seguito per configurare Home Assistant.

Cliccare su “USERS” e creare un nuovo “utente”, inserire un nome che identifica il device da tracciare e una password, io l’ho chiamato semplicemente S8 (perché utilizzo un Samsung Galaxy S8 come smartphone principale), quindi cliccare su Create.

Inserire un altro “USERS” per il Raspberry Pi 3 dove è installato Home Assistant, io l’ho chiamato homeassistant, quindi cliccare su Create.

Scorrere la pagina, in ACLs sotto Type selezionare Topic, in Pattern selezionare il device appena aggiunto (nel mio caso S8) nella campo a fianco inserire il simbolo “#” (cancelletto senza virgolette), mettere il segno di spunta su “Read Access?” e “Write Access?”, in ultimo cliccare su Add.
CloudMQTT creo un nuovo user ACL Rules Topic Pattern

Fare la stessa cosa per l’user che rappresenta il nostro Raspberry Pi 3 con installato Home Assistant, nel mio caso l’avevo chiamato homeassistant.

Tornare nella home page di CloudMQTT, in “Details” della nostra istanza.

Come configurare OwnTracks sul proprio smartphone per la geolocalizzazione all’interno di Home Assistant

Scaricare sul proprio smartphone Android o Apple iPhone con iOS l’applicazione gratuita OwnTracks e procedere con la configurazione generale.

In Mode selezionare Private MQTT, in Permission fare tap su FIX e consentire a OwnTracks di accedere alla posizione del dispositivo.

In Preference fare tap su “Connection“, tap su Host e inserire questi dati:

  • Host, inserire l’indirizzo indicato nella pagina Details di CloudMQTT alla voce Server
  • Port, inserire il valore indicato nella pagina Details di CloudMQTT alla voce Port o SSL Port (se si vuole usare una connessione sicura)

Lasciare disattivato Use WebSockets e cliccare su “ACCEPT

Tap su Identification, in username inserire il nome dato al dispositivo su CloudMQTT, in password quella associata al dispositivo, NON quella di accesso al servizio CloudMQTT, in Device ID assegnare un nome al device, in Traker ID inserire l’identificativo del device max 2 caratteri, quest’ultimo è quello che viene mostrato sulla mappa, tap su ACCEPT.

Tap su Security, se come porta abbiamo usato il valore indicato in SSL Port attivare TSL, in caso contrario lasciarlo disattivato, tap su ACCEPT.

In Parameters lasciare tutto com’è.

Per verificare se il cellulare è stato configurato in modo corretto raggiungere CloudMQTT quindi cliccare sul nome dell’istanza che abbiamo creato e andare in “WEBSOCKET UI“, tenere d’occhio dove c’è scritto “Received messages“.

Aprire l’applicazione OwnTracks sul proprio smartphone e fare tap sul simbolo in alto a destra con una freccia verso l’alto.

Se tutto va bene sotto a Received messages  dovrebbe comparire una scritta tipo quella mostrata in questa figura.

CloudMQTT Websocket UI

Come configurare Home Assistant con OwnTracks e CloudMQTT per Geolocalizzare i nostri Smartphone

L’ultima fase prevedere la configurazione di Home Assistant.

Aprire il file configuration.yaml, inserire questo codice:

mqtt:
  broker: nome_server #tipo m20.cloudmqtt.com
  port: 24322
  username: !secret mqtt_username
  password: !secret mqtt_password

In broker va inserito il valore indicato in Server su CloudMQTT nella sezione Detail della vostra istanza, sempre qui trovate anche il valore da inserire in port, è possibile utilizzare anche il valore indicato in SSL Port.

Username e Password sono quelli assegnati allo user creato per identificare Raspberry Pi 3 con installato Home Assistant e NON quelli d’accesso al servizio CloudMQTT.

Sempre all’interno del file configuration.yaml inserire questo codice:

device_tracker:
  - platform: owntracks
    max_gps_accuracy: 100

Salvare il file configuration.yaml e riavviare Home Assistant.

Raggiungere la cartella Rete/HASSIO/config con esplora risorse di Windows, abbiamo già visto come fare nell’articolo Come installare Home Assistant su Raspberry Pi 3 sezione SAMBA.

Se tutto funziona correttamente sarà creato un nuovo file, chiamato known_devices.yaml, con al suo interno del testo simile a questo:

s8_s8:
  hide_if_away: false
  icon:
  mac:
  name: s8
  picture: 
  track: true
  vendor:

Nel file known_devices.yaml vengono inseriti tutti i device che stiamo tracciando, qui è possibile assegnare un nome al device da tracciare e associare un’immagine al device, inserendo i collegamento alla foto in “picture”.

Andando su Home Assistant, in Mappa verrà visualizzata l’immagine associata al nostro smartphone nel luogo dove si trova il nostro device.

Sempre su Home Assistant, in Strumenti per gli sviluppatori -> Stati (<>) viene visualizzata la nuova “Entity” come device_tracker.nome_nome_device.

Home Assistant Raspberry Pi 3 OwnTracks Cloud MQTT nuova istanza device_tracker

Come sfruttare la geolocalizzazione di un device per creare automatismi all’interno della Casa Domotica

Ora che Home Assistant è in grado di geolocalizzare il nostro device possiamo creare degli automatismi in base alla posizione del nostro smartphone.

La prima cosa che consiglio di fare è creare delle Zone, per esempio Home, Work, School ecc. La procedura è molto semplice e ben descritta sul sito di Home Assistant.

A chi NON vive solo consiglio di creare un gruppo che include tutti i device tracciati in modo da sapere se c’è qualcuno in casa, la procedura è molto semplice, nel vostro file .yaml dove avete configurato tutti i gruppi, il l’ho chiamato groups.yaml e l’ho incluso all’interno del file configuration.yaml con il codice “group: !include includes/groups.yaml“, inserire questo codice:

  all_devices:
      - device_tracker.s8_s8
      - device_tracker.s7_s7

Io ho chiamato il gruppo “all_device”, ma potete chiamarlo anche con un altro nome, dopo aver inserito questo codice è riavviato Home Assistant, in Strumenti per gli sviluppatori -> Stati (<>) viene visualizzata la nuova “Entity” group.all_devices con valori (attributes) che possono essere “home” oppure “not_home“. Se anche solo uno dei device del gruppo è nello stato “home”, allora tutto il gruppo sarà nello stato “home”, quindi significa che in casa c’è qualcuno.

Facciamo un esempio pratico dal quale prendere spunto per creare nuovi automatismi, creiamo un automatismo in grado di accendere alcune luci un po’ prima del tramonto, per fare questo sfruttiamo la piattaforma Sun che è in grado di fornire l’orario del tramonto, dell’alba, l’angolazione del sole ecc.
Per default è già attiva, quindi all’interno del file configuration.yaml è presente questo codice:

# Track the sun
sun:

Per accendere le luci un po’ prima del tramonto si possono seguire più strade, si possono accendere in base all’angolazione del sole, oppure in base all’orario del tramonto indicando  quanto tempo prima accenderle.

All’interno del file automations.yaml che avremo creato e incluso all’interno del file configuration.yaml con il codice: “automation: !include automations.yaml” inseriamo questo codice:

- alias: "Light On Sunset"
  trigger:
  - platform: sun
    event: sunset
    offset: "-00:30:00"
  condition:
    condition: state
    entity_id: group.all_devices
    state: 'home'
  action:
    service: homeassistant.turn_on
    entity_id: 
      - light.star_light
    data:
      brightness: 250
      color_temp: 348

Con questo esempio si accenderà la luce “star_light” (Luce Xiaomi Yeelight JIAOYUE 650 Starry anche chiamata Yeelight Light Moon) , 30 minuti prima del tramonto con una luminosità impostata a 200 (la massima è 255) e con una temperatura colore pari a 348 (tonalità calda), ma questo solo se c’è qualcuno a casa, solo se “group.all_devices” restituisce l’attributo “home”.

Xiaomi Yeelight JIAOYUE 650 Light Moon
Lampadario da soffitto Xiaomi Yeelight Light Moon.

Se invece volessimo sfruttare l’angolazione del sole il codice da inserire potrebbe essere tipo questo:

- alias: "Light On Sunset"
  trigger:
  - platform: numeric_state
    entity_id: sun.sun
    value_template: "{{ state.attributes.elevation }}"
    below: 3.5
  condition:
    condition: state
    entity_id: group.all_devices
    state: 'home'
  action:
    service: homeassistant.turn_on
    entity_id: 
      - light.star_light
      - light.sala_1
      - light.sala_2
    data:
      brightness: 200
      color_temp: 348

In questo secondo esempio le luci star_light, sala_1 (Philips Hue) e sala_2 (Philips Hue) si accenderanno quando l’inclinazione del sole sarà sotto i 3.5 gradi, ma solo se c’è qualcuno in casa.

Per rilevare nel modo migliore la presenza di una persona in casa o fuori casa consiglio di utilizzare OwnTracks abbinato a Nmap, un sistema di tracking molto semplice da implementare e basato sulla connessione di un device al router wireless di casa. Il codice da inserire all’interno del file configuration.yaml è questo:

device_tracker:
  - platform: owntracks
    max_gps_accuracy: 100
  - platform: nmap_tracker
    hosts:
      - 192.168.1.48
      - 192.168.1.54
    interval_seconds: 30

OwnTrack l’abbiamo già visto, in nmap_tracker tra gli host dovremo inserire l’indirizzo IP assegnato dal router wifi ai device che vogliamo tracciare, consiglio di configurare il modem/router in modo che assegni sempre lo stesso indirizzo ip locale allo smartphone da tracciare (Address Reservation – Prenotazione Indirizzi IP).

Salvare il file configuration.yaml e riavviare Home Assistant, all’interno del file known_devices.yaml saranno aggiunto il nuovo sistema di tracking, troveremo un testo simile a qusto:

320452d9werwe:
  hide_if_away: false
  icon:
  mac: 21:1a:3e:45:s3:2b
  name: S8 WiFi
  picture:
  track: true
  vendor: unknown

Creiamo un nuovo gruppo inserendo questo codice all’interno del file groups.yaml:

  enore_track:
      - device_tracker.s8_s8
      - device_tracker.320452d9werwe

In questo modo il gruppo “enore_track” restituirà lo stato di “home” se almeno una delle due entità del gruppo ha come stato “home”.

Purtroppo questi sistemi non sono molto adatti per eseguire automazioni del tipo “quando arrivo a casa accendi la luce della porta d’ingresso”, questo perché il cambiamento di stato non è così repentino, per automazioni di questo tipo meglio utilizzare sensori di movimento oppure configurare dei Beacons (iBeacons per dispositivi iOS), dispositivi Bluetooth che possono essere utili anche per il tracking all’interno della propria abitazione.

Maggiori informazioni si possono trovare sul sito ufficiale di Home Assistant, la documentazione online è veramente tanta, questo è il bello di Home Assistant.