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 dara 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 (32-bit)‘ op zetten en door deze te koppelen aan je WiFi netwerk kun je de RPi’s benaderen met SSH. Het eenvoudigst is dat om, direct na schrijven van de image, een leeg bestand genaamd ‘ssh‘ op de SD card te plaatsen en een bestand genaamd ‘wpa_supplicant.conf‘ met de volgende inhoud:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=NL

network={
     ssid="JOUW-SSID-NAAM"
     psk="SSID-PASSWDORD"
}

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

wget -O - https://gist.githubusercontent.com/mKeRix/88b7b81e9bca044f74de1dc51696efb2/raw/799a20bca44cc61d8f8ae93878f2f28af8365a69/getNodeLTS.sh | bash
sudo apt update
sudo apt install -y build-essential libavahi-compat-libdnssd-dev bluetooth libbluetooth-dev libudev-dev
sudo npm i --global --unsafe-perm room-assistant
sudo reboot

Nadat de RPi weer benaderbaar is dienen er nog een aantal commando’s ingevoerd te worden:

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')

en 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!