Room Assistant

Met Room Assistant is het mogelijk om nauwkeurig te bepalen waar iemand zich bevind. Althans, waar een bluetooth device zoals smartphone of smartwatch zich bevinden. Het idee is om een aantal ‘Raspberry Pi Zero W‘ te voorzien van ‘Room Assistant‘ en de bluetooth devices daarop te laten koppelen zodat in Home Assistant gedetecteerd kan worden op welke RPi de koppeling is gemaakt. Door deze RPI’s nu in de diverse ruimtes te plaatsen kan dus gedetecteerd worden of iemand thuis is en zoja, in welk gebied zich bevindt.

Als voorwaarde geldt dat MQTT reeds geïnstalleerd dient te zijn in Home Assistant.

Een Raspberry Pi Zero W koop je al voor 2 tientjes en daar komt dan nog een power supply en een SD-Card bij.

Met behulp van dew ‘Raspberry Pi Imager‘ kun je hier eenvoudig het ‘Raspberry Pi OS (other)‘ -> ‘Raspberry Pi OS (Lite)‘ op zetten en met Cmd + Shift + X kunnen de instellingen aangepast worden voor WiFi, de hostname, SSH, etc. Configureer WiFi en zet SSH aan en kies dan voor Save.

Hierna de RPi opstarten met deze SD-Card en inloggen via SSH met user ‘pi’ en je wachtwoord (default ‘raspberry‘). Voer de volgende commando’s uit:

sudo apt update && sudo apt upgrade
wget -O - https://gist.githubusercontent.com/mKeRix/88b7b81e9bca044f74de1dc51696efb2/raw/799a20bca44cc61d8f8ae93878f2f28af8365a69/getNodeLTS.sh | bash
sudo apt install -y libavahi-compat-libdnssd-dev libsystemd-dev bluetooth libbluetooth-dev libudev-dev libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev

sudo npm i --global --unsafe-perm room-assistant

sudo setcap cap_net_raw+eip $(eval readlink -f which node)
sudo setcap cap_net_raw+eip /opt/nodejs/bin/node
sudo setcap cap_net_raw+eip $(eval readlink -f which hcitool)
sudo setcap cap_net_admin+eip $(eval readlink -f which hciconfig)

sudo reboot

Vervolgens zorgen we ervoor dat room-assistant gestart wordt, ook na een herstart van de RPi. Daarvoor maken we het volgende bestand om room-assistant als een service te gebruiken:

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

met hierin de volgende inhoud:

[Unit]
Description=room-assistant service

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

[Install]
WantedBy=multi-user.target

Het configuratie-bestand van room-assistant maken we in een nieuwe directory:

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

en zet hier de volgende inhoud in:

cluster:
  port: 6425
  peerAddresses:
    - 192.168.1.11:6425
    - 192.168.1.12:6425
global:
  instanceName: Kantoor
  integrations:
    - homeAssistant
    - bluetoothClassic
homeAssistant:
  mqttUrl: 'mqtt://192.168.1.183:1883'
  mqttOptions:
    username: mqtt_user
    password: mqtt_password
bluetoothClassic:
  minRssi: -20
  hciDeviceId: 0
  addresses:
    - 'AA:BB:CC:DD:EE:FF'

Cluster wordt gebruikt indien er meerdere Room-Assistant devices in het netwerk aanwezig zijn. Hiermee worden ze gegroepeerd tot één cluster.

Waarbij ‘InstanceName‘ de locatie van de RPi is, de ‘mqttUrl‘ de URL is van jouw MQTT Broker (met bijbehorende username en password) en onder ‘addresses‘ komt het MAC-Adres van het te volgen device, bijvoorbeeld je smartphone. Hierna kan ‘room-assistant’ gestart worden:

sudo systemctl enable room-assistant --now

In Home Assistant kunnen we nu zowel de RPI’s als de BT-devices zien die gekoppeld zijn. Hiervoor kijken we naar de ‘Apparaten‘ in de MQTT Integratie:

Momenteel zijn er twee RPI’s actief met ‘Room Assistant‘, met InstanceName ‘Kantoor’ en ‘Keuken’. Daar waar de iPhone het dichtst bij is, zal de locatie voor de iPhone worden. Klik op de iPhone zal laten zien waar dat is:

Dit kan nu gebruikt worden in een Lovelace dashboard en/of in automatiseringen.

Have fun!