Trackeo de nuestra localización en casa con Home Assistant

En este post vamos a ver algo muy interesante, y no es más que la posibilidad de seguir o trackear ciertos dispositivos bluetooth (pulseras inteligentes, teléfonos móviles…) por casa, con el objetivo de localizar la posición en todo momento para realizar automatizaciones.

Lo dicho, todos a día de hoy tenemos un teléfono móvil que nos sigue a todas partes, o llevamos una pulsera inteligente o smartband, todos estos dispositivos tienen bluetooth, y podemos usar la dirección MAC de cada dispositivo para localizarlo dentro de nuestra casa. ¿Para qué? Pues primero por estadística, podemos visualizar cuánto tiempo pasamos y donde, es muy curioso. Obviamente lo podremos hacer para meter automatizaciones, por ejemplo, si es de noche y estás en la habitación y la puerta de entrada a casa no está cerrada con llave, pues que se cierre.  Cuando llegues a la cocina a la mañana te de los buenos días, te ponga las noticias… O yo qué sé, para pintarnos directamente en el Floorplan o plano animado de nuestra casa, sentados en el sofá, comiendo, durmiendo… 😉 Ojo, que también podemos localizar a nuestros animales, si les ponemos un tracker de estos bluetooth, y que si el gato/perro entra en una habitación que no debe, que nos lo chiven los altavoces de casa.

¿Cómo hacemos esto? Tenemos que pensar que hay que colocar ciertos dispositivos en cada habitáculo de la casa, en cada habitación, baño… donde queramos localizar. Y la solución obviamente tiene que hablar entre cada dispositivo, para saber de cuál estamos más cerca.

La mejor solución personalmente si no tienes estos dispositivos es basarte en ESP32-mqtt-room, que mediante unas placas basadas en el chip ESP32 y sobre todo muy baratas podrás repartir y esconder fácilmente por casa. He de deciros que yo utilicé esta solución durante un año aproximadamente, al final migré a la solución que veremos hoy en este post, ya que como tengo varias Raspberry Pi repartidas por casa, no me costaba nada añadir esta funcionalidad. Un día si me aburro hago un post para el ESP32-mqtt-room, que también está muy chulo.

Lo dicho, hoy veremos room-assistant, una solución buenísima también, y que podremos instalar y correr en nuestras queridas Raspberry Pi, y por supuesto como la anterior opción, totalmente integrable en nuestro Home Assistant ¡así que atentos!

Instalación en Raspbery Pi,

Empezamos! Seguiremos estos pasos en cada Raspberry Pi que tengamos y queramos instalarle room-assistant, lo primero, instalar NodeJS:

curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs

 

Instalamos todas las dependencias que necesitaremos:

sudo apt-get update && sudo apt-get install -y build-essential libavahi-compat-libdnssd-dev bluetooth libbluetooth-dev libudev-dev libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev

Instalamos room-assistant, class-transformer y class-validator:

sudo npm i --global --unsafe-perm room-assistant
sudo npm install i --global class-transformer
sudo npm install i --global class-validator

 

Añadimos los siguientes permisos:

sudo setcap cap_net_raw+eip $(eval readlink -f `which node`)
sudo setcap cap_net_raw+eip $(eval readlink -f `which hcitool`)
sudo setcap cap_net_admin+eip $(eval readlink -f `which hciconfig`)

 

Sinceramente no recuerdo muy bien porqué hice lo siguiente, pero lo tengo documentado 🙂

sudo nano /etc/avahi/avahi-daemon.conf
enable-dbus=yes

 

Creamos el directorio y el fichero de configuración para room-assistant (ojo que luego rellenamos el fichero de configuración, sólo para que sepas donde queda):

mkdir -p ~/room-assistant/config
touch ~/room-assistant/config/local.yml

 

Antes de empezar con el fichero de configuración, vamos a crear el servicio para arrancar room-assistant:

sudo nano /etc/systemd/system/room-assistant.service

 

E introducimos la siguiente configuración al servicio:

[Unit]
Description=room-assistant service

[Service]
ExecStart=/usr/bin/room-assistant
WorkingDirectory=/home/pi/room-assistant
Restart=always
RestartSec=10
User=pi

[Install]
WantedBy=multi-user.target

 

Habilitamos el servicio, lo iniciamos (bueno antes de iniciarlo deberás tener el fichero de configuración para tu room-assistant que veremos a continuación) y verificamos que está arrancado:

sudo systemctl enable room-assistant.service
sudo systemctl start room-assistant.service
sudo systemctl status room-assistant

 

Fichero de configuración de room-assistant, de ejemplo individual, o sea, una Raspberry Pi funcionando de manera individual, sin hablar con el resto de Raspberrys, al que le indicaremos un nombre en ‘instanceName’, añadiremos las direcciones MAC de los dispositivos bluetooth a trackear o perseguir en ‘addresses’, e importante, indicaremos nuestro servidor broker MQTT, para enviarle los datos:

global:
  instanceName: Garaje
  integrations:
    - homeAssistant
    - bluetoothClassic
homeAssistant:
  mqttUrl: mqtt://DIRECCIÓN_IP_BROKER_MQTT:1883
  mqttOptions:
    username: USUARIO
    password: CONTRASEÑA
bluetoothClassic:
  minRssi: -20
  addresses:
    - 'FD:72:03:6B:BC:XX'
    - 'EA:4B:B2:2A:56:XX'
    - '7C:2F:80:EC:61:XX'
    - 'B4:C4:FC:64:19:XX'

 

Y a continuación os paso un ejemplo en modo clúster del fichero de configuración de room-assistant, que será el que utilicemos cuándo tengamos más de una Raspberry Pi con room-assistant. A diferencia del anterior, en este tendremos que añadir la dirección IP de cada Raspberry Pi en peerAddresses:

global:
   cluster:
     autoDiscovery: false
     port: 6425
     peerAddresses:
       - DIRECCION_RASPBERRY_PI_1:6425
       - DIRECCION_RASPBERRY_PI_2:6425
       - DIRECCION_RASPBERRY_PI_3:6425
       - DIRECCION_RASPBERRY_PI_4:6425
       - DIRECCION_RASPBERRY_PI_5:6425
   instanceName: Cocina
   integrations:
     - homeAssistant
     - bluetoothClassic
homeAssistant:
   mqttUrl: mqtt://DIRECCIÓN_IP_BROKER_MQTT:1883
   mqttOptions:
     username: USUARIO
     password: CONTRASEÑA
bluetoothClassic:
   minRssi: -20
   hciDeviceId: 0
   addresses:
    - 'FD:72:03:6B:BC:XX'
    - 'EA:4B:B2:2A:56:XX'
    - '7C:2F:80:EC:61:XX'
    - 'B4:C4:FC:64:19:XX'

 

Bueno, ahora sí, tras grabar y tener tu fichero de configuración, acuérdate de reiniciar el servicio (o demonio) de room-assistant.

 

Configuración en Home Assistant,

¡Bueno, que ya lo tenemos! Ahora sólo queda añadir en nuestro querido. amado y deseado Home Assistant los dispositivos que queremos visualizar, esto es, los teléfonos móviles, pulseras… así que vamos al fichero de configuración de Home Assistant, configuration.yaml y en la sección de ‘sensor’ añadimos el siguiente bloque, indicando la MAC y la descripción del dispositivo:

sensor:
...
  - platform: mqtt_room
    device_id: "b4c4fc6419XX"
    name: 'Teléfono móvil de Héctor'
    state_topic: 'room_presence'
    timeout: 5
    away_timeout: 0
...

 

 

Y como siempre, grabamos el fichero y reiniciamos Home Assistant para que cargue la configuración. Podremos añadir cada Entidad que hayamos dado de alta fácilmente con el ratón filtrando por dispositivos de tipo ‘room_presence’.

 

Y nada, dejemos que la magia corra, veremos cómo dependiendo de donde estemos, iremos viendo en este historial el estado de la Entidad y su posicionamiento.

 

Si se os va mucho la pinza y tenéis un Grafana por ahí, podréis visualiza por ejemplo con una vista de quesito de una manera muy sencilla los tiempos, y claro, esto tiene un histórico… A los cotillas, he quitado el tiempo que paso en el baño, jeje, y con este tipo de query lo tendríamos:

SELECT state as metric, TIMESTAMPDIFF(SECOND, min(last_updated), max(last_updated)) as value, last_changed as time_sec FROM states WHERE $__timeFilter(created) and state = 'Cocina' and entity_id = 'sensor.maixu_dordoka_room_presence' GROUP BY last_changed ORDER BY created DESC ;

 

Y bueno, es hora de ver un ejemplo de automatización, en las imágenes lo veréis facilón, en este caso es, a la noche, cuando mi txabala o yo estemos en la cama, si no se ha cerrado con llave la puerta, pues que la cierre, a parte lo notifique por los altavoces de casa, mande un Telegram, bla, bla…

Como siempre un placer, espero que lo disfrutéis, un abrazo y muchas gracias por esos likes en las redes sociales que no cuesta nada!! 🙂