Indoor Localization con Google Home
Dalla versione 0.98 Home Assistant non supporta più il componente googlehome
Dopo l’articolo sul gateway Bluetooth-MQTT a cui rimando per tutti i dettagli relativi a Bluetooth, BLE, RSSI, beacon, etc., presento una soluzione molto interessante per conoscere all’interno della propria abitazione in quale stanza (“room”) si trova un determinato dispositivo Bluetooth o BLE come lo smartphone o la smartband oppure un beacon NUT.
La soluzione si basa su una API non ufficiale di Google che permette di sfruttare gli assistenti Google Home (GH) o GH Mini per tracciare i dispositivi BT e BLE. Home Assisstant permette di sfruttare questa funzionalità dalla versione 0.83 con il componente googlehome, una volta quindi configurato il componente e configurata la parte di device tracking sarà possibile con un “template sensor” ad hoc conoscere la posizione del dispositivo bluetooth all’interno della casa.
Ovviamente questo è possibile in maniera esatta se abbiamo un GH per ogni stanza della casa, se non siamo in questa condizione il sensore indicherà la stanza nella quale si trova il dispositivo bluetooth scegliendo tra i GH disponibili: se ad esempio ho un GH in cucina e uno in camera da letto e mi trovo nello studio il sensore riporterà come posizione quella con il miglior parametro RSSI tra cucina e camera da letto. Affinchè il risultato sia parlante occorre dare al diposistivo GH il nome della stanza in cui è posizionato.
Per verificare quali dispositivi BT o BLE sta rilevando il GH si può interrogarlo direttamente inserendo in qualsiasi browser web:
http://indirizzo_IP_GH:8008/setup/bluetooth/scan_results
Configurazione
Nel file configuration.yaml
o in un package apposito occorre aggiungere il componente googlehome, di seguito per esempio ne sono stati configurati due, ovviamente occorre inserire gli indirizzi IP dei vostri dispositivi GH:
1 2 3 4 5 6 7 8 9 10 |
googlehome: devices: #Google Home Mini Kitchen - host: 192.168.1.X rssi_threshold: -100 track_alarms: true #Google Home Mini Bedroom - host: 192.168.1.Y rssi_threshold: -100 track_alarms: true |
Successivamente occorre configurare la parte di device tracking sempre in configuration.yaml
o apposito package:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
- platform: googlehome host: 192.168.1.X rssi_threshold: -100 interval_seconds: 20 consider_home: 60 new_device_defaults: track_new_devices: true - platform: googlehome host: 192.168.1.Y rssi_threshold: -100 interval_seconds: 20 consider_home: 60 new_device_defaults: track_new_devices: true |
Dopo queste operazioni il file known_devices.yaml
inizierà a riempirsi di dispositivi tutti con il formato device_tracker.<home hub ip>_<device mac address>
, al momento non c’è un modo per evitare questo, conviene quindi mettere track_new_devices: false
, in modo che effettivamente siano tracciati solo i dispositivi che effettivamente ci interessano.
Configurazioni template sensor
Sempre nel file configuration.yaml o apposito package va inserito il seguente sensore (ripreso e personalizzato dal forum ufficiale di Home Assistant), ovviamente occorre inserire il BT mac-address del dispositivo che volete monitorare.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
sensor: - platform: template sensors: phone_room_location: friendly_name: "Phone Room" entity_id: sensor.time icon_template: mdi:bluetooth value_template: > {% set ns = namespace() %} {% set ns.maxsignal = -100 %} {% set ns.trackername = "" %} {% for item in states.device_tracker %} {% if item.state == 'home' and item.attributes.btle_mac_address == 'bb:ee:55:aa:55:55' %} {% if (item.attributes.rssi | int) > ns.maxsignal %} {% set ns.maxsignal = (item.attributes.rssi | int) %} {% set ns.trackername = item.attributes.ghname %} {% endif %} {% endif %} {% endfor %} {% if ns.trackername == "" %} {% set ns.trackername = 'Fuori' %} {% endif %} {{ ns.trackername }} |
Il sensore restituirà come valore la posizione del dispositivo bluetooth scegliendo con il criterio descritto in precedenza oppure se il dispositivo non si trova in casa restituirà come valore “Fuori”.
Utilizzi della indoor localization in Home Assistant
Gli utilizzi della indoor localization sono molteplici: si possono creare automazioni basate sulla posizione come attivazione/disattivazioni di:
- allarmi,
- riscaldamento/condizionamento,
- luci o prese comandate
Se avete altre idee condividetele qui e sul forum!
Aggiornamento del 13/4/2019
Di seguito aggiungo un “workaround” per limitare la crescita del file known_devices.yaml
, le istruzioni da seguire sono:
- inserire nel fle
known_devices.yaml
la riga#end-of-my-devices#
oltre la quale saranno cancellate tutte le entity presenti - inserire in
/config
lo scriptclean_knowndevices.sh
e dargli i permessi di esecuzione conchmod +x /config/clean_knowndevices.sh
- creare in Home Assistant script e automazioni per eseguire una o più volte al giorno la “pulizia” 🙂
——————————————–
clean_knowndevices.sh
1 2 |
#!/bin/sh /bin/sed -i '/#end-of-my-devices#/q' /config/known_devices.yaml |
in configuration.yaml o in package apposito:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
shell_command: clean_knowndevices: "/bin/bash /config/clean_knowndevices.sh" script: clean_knowndevices: sequence: - service: shell_command.clean_knowndevices automation: - alias: "Pulizia file known devices" initial_state: true hide_entity: true trigger: platform: time at: '07:07:00' action: - service: script.clean_knowndevices |
4 risposte
Per tutti quelli che avevano problemi a visualizzare i dispositivi BT e BLE visibili ad un Google Home ed ottenevano [], prima di visitare dal browser
http://indirizzo_IP_GH:8008/setup/bluetooth/scan_results
eseguite questo comando da terminale (unix):
curl -d ‘{“enable”: true}’ -H “Content-Type: application/json” -X POST http://indirizzo_IP_GH:8008/setup/bluetooth/scan
Soluzione postata su gruppo Telgram da Mirko B.
Salve , bellissima guida , c’è un modo per fare lo stesso con Amazon Echo ?
Non funziona più giusto?
eh no, da tempo