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!! 🙂
Posts recomendados:
- Gestión de calendarios con Radicale - 23 de mayo de 2024
- Monitorizando las reglas UTM web de nuestro firewall gracias a Centreon - 21 de mayo de 2024
- Backup automatizado de la configuración de Fortigate - 16 de mayo de 2024