Zo automatiseer je je kamers

Netwerk

Geplaatst: 21 januari 2022 - 05:44

Aangepast: 25 november 2022 - 11:24

Koen Vervloesem

Lampen alleen inschakelen wanneer er iemand zich in de kamer bevindt, is een vorm van aanwezigheidsdetectie. Je kunt zelfs specifieke lichtscenario’s kiezen afhankelijk van wie er zich in de ruimte bevindt. Met room-assistant op enkele Raspberry Pi’s in huis kun je Home Assistant acties laten uitvoeren op basis van de kamers waarin personen zich bevinden.

Room-assistant is een programma waarmee je de aanwezigheid van personen in kamers kan detecteren. Dat kan door je telefoon of smartwatch via bluetooth te volgen, of met een PIR-sensor die beweging detecteert of met een warmtesensor die warmtebronnen zoals mensen detecteert.

Welke vormen van aanwezigheidsdetectie je ook kiest (en je kunt ze ook combineren), room-assistant integreert ze eenvoudig met Home Assistant. In dit domoticaplatform kun je dan naar believen zaken automatiseren op basis van de kamer waarin je je bevindt.

Lees hier meer over Home Assistant.

01 Installatie

In elke kamer waarin je je aanwezigheid wilt detecteren, installeer je een Raspberry Pi. Het leuke aan room-assistant is dat het in veel gevallen ook te installeren is op Raspberry Pi’s (of andere computers) waar al andere software op draait. Zo kun je een bestaande Raspberry Pi een dubbel doel geven.

Draai je al Home Assistant OS, klik dan in Supervisor / Add-on Store op het menu (met de drie streepjes) rechtsboven en kies Repositories. Typ dan de url https://github.com/mKeRix/hassio-repo in, klik op Toevoegen en Sluiten. Daarna vind je in de zogenoemde add-on store een onderdeel Hass.io Addons by mKeRix met de add-ons room-assistant en room-assistant (beta). Klik op die eerste voor de stabiele versie of op die tweede voor de bètaversie, en klik dan op Install. Na de installatie klik je op Start.

02 Extra add-ons

Voor de communicatie met Home Assistant maakt room-assistant gebruik van MQTT. Je gebruikt óf een bestaande MQTT-broker die buiten Home Assistant draait óf je installeert de MQTT-broker Mosquitto als add-on in Home Assistant OS.

Installeer ook de add-on File editor, want daarmee kun je het configuratiebestand van room-assistant vanuit de webinterface van Home Assistant aanpassen. Start de add-on en schakel Weergeven in zijbalk in. Klik dan links in de zijbalk op File editor, klik boven op het icoontje van de map en navigeer dan naar het standaard configuratiebestand config/room_assistant/local.yml.

03 Basisconfiguratie

Het configuratiebestand is een yaml-bestand met een configuratiesleutel global. Daarin geef je achter de sleutel instanceName een naam aan de locatie waar room-assistant draait. Bij integrations staat er standaard homeAssistant. Als je de Mosquitto-add-on in Home Assistant OS hebt geïnstalleerd, volstaat dit als configuratie. Maak je gebruik van een externe MQTT-broker, dan ziet de configuratie er als volgt uit:

global:
instanceName: woonkamer
integrations:
- homeAssistant
homeAssistant:
mqttUrl: mqtt://SERVER:1883
mqttOptions:
username: GEBRUIKER
password: WACHTWOORD
discoveryPrefix: homeassistant

Hierin vul je de juiste verbindingsgegevens voor je MQTT-broker in. Sla je wijzigingen op en herstart dan room-assistant in Supervisor / room-assistant.

Als alles goed is, kan room-assistant nu communiceren met Home Assistant. Om je daarvan te verzekeren, klik je op het tabblad Logboek bij de add-on en klik je onderaan op Vernieuwen. Je zou nu een bericht moeten zien als Successfully connected to MQTT broker at, met het ip-adres van de broker.

04 Bluetooth-apparaten

Het echte werk kan nu beginnen: je aanwezigheid detecteren. Room-assistant kan dat via bluetooth low-energy (dat we in dit artikel gebruiken) of via bluetooth ‘classic’ (bekijk daarvoor de documentatie van room-assistant). Elk bluetooth-apparaat stuurt immers periodiek bluetooth-pakketjes uit die iedereen in de buurt kan oppikken. Op basis daarvan detecteert room-assistant dat het apparaat in de buurt is. Als je zo’n apparaat bij je draagt, kun je zo je aanwezigheid detecteren.

Dat kun je bijvoorbeeld door een bluetooth-beacon bij je te dragen, dat stuurt iBeacon-pakketjes uit met een uniek ID. Ook een smartwatch kan hiervoor dienen, maar dit werkt alleen als het apparaat een constant bluetooth-adres heeft. Je telefoon kun je hiervoor dus niet gebruiken, want Android- en iOS-apparaten veranderen hun bluetooth-adres elke vijftien minuten om te voorkomen dat mensen in de buurt je aan de hand daarvan kunnen volgen. Voor iOS is er wel een oplossing als je een extra app draait. 

Room-assistant op iOS

Room-assistant heeft een bijbehorende app voor iOS-apparaten waarmee je iPhone of iPad een unieke bluetooth-ID uitzendt. Op die manier kan room-assistant je iPhone wel identificeren. Maar anderen kunnen dat dan natuurlijk ook. De app heeft daarom een kleine extra beveiliging ingebouwd. Als je de functie auto-toggling inschakelt in de app, stuurt-ie alleen de ID uit als de app een room-assistant-installatie in de buurt detecteert.

Dit gebeurt ook via bluetooth low-energy: elke room-assistant-installatie stuurt iBeacon-pakketten uit, die de bijbehorende app kan detecteren. Overigens voer je bij het gebruik van de app het best de optie timeout: 60 toe aan de integratie bluetoothLowEnergy in het configuratiebestand van room-assistant.

05 Bluetooth low-energy integreren

Voeg nu in het configuratiebestand aan de lijst met integraties deze regel toe:

- bluetoothLowEnergy

Sla het bestand op en herstart de add-on van room-assistant. Bekijk vervolgens het logboek van de add-on. Je krijgt nu de ID’s te zien van alle nieuwe apparaten die room-assistant ontdekt.

Voor een bluetooth-beacon heeft die ID de vorm fda50693a4e24fb1afcfc6eb07647825-10011-10011, waarbij het eerste deel een 128bit-UUID is, het tweede deel heet ‘major’ en het derde deel ‘minor’. Voor andere apparaten is de ID gelijk aan het bluetooth-MAC-adres, maar dan met alle hexadecimale cijfers aan elkaar geplakt, bijvoorbeeld 7c2f80e3a1a7 voor bluetooth-MAC-adres 7c:2f:80:e3:a1:a7.

06 Apparaten toevoegen

Noteer de ID’s van apparaten waarmee je je eigen aanwezigheid of de aanwezigheid van je huisgenoten wilt detecteren. Bij sommige ID’s vind je in het logboek ook een naam, als het apparaat die naam via bluetooth-pakketjes adverteert. Zo niet, probeer het apparaat dan op een andere manier te identificeren.

Je kunt bijvoorbeeld naar de RSSI (Received Signal Strength Indicator) in het logboek kijken: dat is een negatief getal dat de signaalsterkte van het bluetooth-signaal weergeeft. Hoe lager dit getal, hoe verder het apparaat zich van je room-assistant-installatie bevindt. Zo weet je dus dat een apparaat met RSSI -97 zich verder bevindt dan een apparaat met RSSI -44. 

Een andere manier om te achterhalen welk apparaat bij welke ID hoort, is met de mobiele app nRF Connect for Mobile, die zowel op Android als iOS meer informatie toont over bluetooth-apparaten.

Zodra je de ID van een of meer apparaten die je wilt detecteren weet, open je weer het configuratiebestand van room-assistant. Voeg dan een sleutel bluetoothLowEnergy toe met daarin een sleutel allowlist waarin je een lijst van ID’s plaatst die je wilt detecteren. Bijvoorbeeld als volgt:

bluetoothLowEnergy:
allowlist:
- 7c2f80e3a1a7
- fda50693a4e24fb1afcfc6eb07647825-10011-10011

Detecteert room-assistant bij een van je apparaten geen naam, dan kun je die het best zelf een naam geven, zodat je ze gemakkelijker in Home Assistant herkent. Dat gaat met de volgende configuratie:

bluetoothLowEnergy:
allowlist:
- 7c2f80e3a1a7
- fda50693a4e24fb1afcfc6eb07647825-10011-10011
tagOverrides:
fda50693a4e24fb1afcfc6eb07647825-10011-10011:
name: Holy-IOT


Sla het bestand op en herstart de add-on van room-assistant.

07 Aanwezigheid in Home Assistant bekijken

Voor elke ID dat je in de allowlist van room-assistant hebt toegevoegd, maakt Home Assistant nu twee entiteiten aan. De eerste is een device tracker. Als room-assistant het apparaat via bluetooth detecteert, in welke kamer ook, beschouwt het je apparaat als thuis. De device tracker kun je dus gebruiken als je gewoon wilt weten of iemand die een bluetooth-beacon draagt thuis is of niet.

De andere entiteit is een room presence sensor. Deze heeft als status de naam van de kamer waarin room-assistant ze detecteert. Als extra attribuut houdt deze entiteit ook de afstand bij. Die afstand (in meter) wordt geschat op basis van de ontvangen RSSI.

Als je deze informatie in het dashboard van Home Assistant wilt tonen, klik je op de pagina Overzicht in het menu rechtsboven, kies je Configureer UI en dan onderaan rechts Kaart toevoegen. Kies bijvoorbeeld de kaart Entiteiten en voeg de room presence sensors toe. Geef de kaart eventueel een titel en klik op het potlood naast een entiteit om ze bijvoorbeeld onder een andere naam weer te geven. Klik tot slot op Opslaan. Klik op het kruisje bovenaan links om de bewerkingsmodus te verlaten. Je dashboard toont nu op elk moment de locatie van al je apparaten.

08 Een extra room-assistant

Je hebt nu room-assistant op één plaats draaien. Maar het programma komt pas volledig tot zijn recht als je het in meerdere kamers draait. We gaan ervan uit dat je niet in elke kamer een Home Assistant-installatie hebt, dus we bekijken nu hoe je het op een andere manier installeert, namelijk op Raspberry Pi OS.

We gaan ervan uit dat je al Raspberry Pi OS op je Raspberry Pi hebt draaien. Zo niet, download dan de Lite-versie op de downloadpagina en schrijf het met een programma zoals Raspberry Pi Imager naar een microSD-kaartje waarvan je je Raspberry Pi opstart. Je kunt die Lite-versie ook direct uit de interface van Raspberry Pi Imager selecteren via Selecteer OS / Raspberry Pi OS (other) / Raspberry Pi OS Lite (32-bit).

Je hebt nu twee opties. De eerste optie is om room-assistant te installeren als Node.js-pakket met de pakketbeheerder npm en dan een service te maken die room-assistant automatisch opstart. Dit kan wel voor conflicten zorgen met andere software die je op je Raspberry Pi draait, als die andere versies van Node.js nodig hebben.

De tweede en nettere optie is daarom room-assistant als Docker-container draaien, waardoor het geïsoleerd blijft van andere software op je Raspberry Pi. Deze manier bespreken we in de volgende paragrafen.

09 Room-assistant in Docker

Log in op je Raspberry Pi en installeer Docker met de opdracht:

curl -sSL https://get.docker.com | sh

Geef daarna de gebruiker pi waarmee je ingelogd bent toegang tot Docker, zodat je niet alle Docker-opdrachten met sudo hoeft uitvoeren:

sudo usermod pi -aG docker

Log uit met de opdracht exit en log daarna weer in.

Installeer daarna Pythons pakketbeheerder pip en daarna Docker Compose, dat een Python-programma is:

sudo apt install python3-pip
sudo pip3 install docker-compose

Maak nu een bestand docker-compose.yml met de volgende inhoud:

version: '3'
services:
room-assistant:
image: mkerix/room-assistant
container_name: room-assistant
restart: always
network_mode: host
volumes:
- /var/run/dbus:/var/run/dbus
- ./containers/room-assistant/config:/room-assistant/config

10 Configuratiebestand

Maak de configuratiedirectory voor room-assistant aan met de opdracht:

mkdir -p ./containers/room-assistant/config

En maak daarna het configuratiebestand ./containers/room-assistant/config/local.yml, waarin je dezelfde inhoud plaatst als in het configuratiebestand dat je eerder in de add-on in Home Assistant hebt ingesteld. Verander alleen de waarde van instanceName naar een unieke naam van de kamer waarin de Raspberry Pi zich bevindt.

Voeg daarna in het configuratiebestand nog de volgende regels toe om deze room-assistant-installatie onderdeel te laten uitmaken van een cluster:

cluster:
autoDiscovery: false
port: 6425
peerAddresses:
- IP:6425

Hierbij vervang je IP door het ip-adres van de Raspberry Pi waar je andere room-assistant-installatie op draait.

Start daarna de Docker-container via Docker Compose met:

docker-compose up -d

Docker Compose downloadt nu het Docker-image van room-assistant en start de container met het programma. Daarna kun je de logs van room-assistant bekijken met:

docker-compose logs -f

Voeg nu ook de regels voor het cluster toe in het configuratiebestand van de add-on van room-assistant in je Home Assistant-installatie, maar vul daar het ip-adres van je andere Raspberry Pi in. Herstart deze add-on ook. Als alles goed gaat, vinden de twee room-assistant-installaties elkaar nu.

Als je nu met een van je bluetooth-apparaten naar de andere kamer wandelt, zul je in het dashboard van Home Assistant de status zien veranderen naar de juiste kamer. Beide room-assistant-installaties werken immers samen en kennen dan het bluetooth-apparaat toe aan de kamer waar de RSSI het hoogst is.

11 Automatiseren op basis van je locatie

Nu al dit voorbereidingswerk klaar is, kun je zaken gaan automatiseren op basis van de locatie van de verschillende personen. Open in Instellingen het menu Automatiseringen en klik op Automatisering toevoegen. Kies daar Begin met een lege automatisering. We gaan nu een automatisering aanmaken die het licht in de woonkamer inschakelt als een van de personen zich in de kamer bevindt.

Geef je automatisering een naam en kies bij de triggers als trigger-type Staat en als entiteit de room-presence-entiteit van een van je bluetooth-beacons. Vul in het veld Naar de naam van de kamer in. Klik daarna op Trigger toevoegen en doe hetzelfde voor het andere bluetooth-beacon. De voorwaarden kun je leeg laten. Bij de acties kies je bij de optie Type actie de waarde Service aanroepen, en bij de optie Service de waarde Licht: Turn on. Klik op Kies entiteit en kies de lamp die je wilt inschakelen. Stel dan de kleuren of helderheid van de lamp in. Klik op Opslaan om de automatisering op te slaan.

12 Licht uit

Om het licht uit te schakelen nadat iedereen de woonkamer heeft verlaten, maak je een vergelijkbare automatisering. Alleen moet je daardoor bij de triggers voor elk bluetooth-beacon de naam van de kamer bij Van invullen. Bovendien moet je hier twee voorwaarden toevoegen, die elk niet waar zijn: de waarde van beide room presence sensors mag niet gelijk aan de woonkamer zijn.

Kies dus als type voorwaarde Niet, vul daar voor type voorwaarde Staat in en als entiteit de ene room presence sensor en als staat de naam van de kamer, en doe dan hetzelfde voor de andere sensor. Zo wordt de automatisering getriggerd als een van de bluetooth-beacons de woonkamer verlaat, maar wordt de actie alleen uitgevoerd als daarna geen enkele van de beacons zich meer in de woonkamer bevindt.

Waarom geen bewegingsdetectie?

Deel dit artikel
Reageer op dit artikel
Wat vond je van dit artikel?

Aanbevolen voor jou

ID.nl logo

ID.nl, onderdeel van Reshift BV, is in 2022 gestart en uitgegroeid tot de meest toonaangevende en complete consumentensite van Nederland. Het doel van ID.nl is om de consument te helpen met alle technologie die hoort bij het dagelijks leven: van smart-health-meters tot e-bikes, van warmtepompen tot zonnepanelen - en alles daar tussenin!

Duidelijk, betrouwbaar en onafhankelijk: ID.nl maakt moeilijke dingen makkelijk.

Contact

ID.nl

Nijverheidsweg 18

2031 CP Haarlem

info@id.nl

Telefoon: 023-5430000