Aanwezigheid en huisstatus tracken in Home Assistant
Het kunnen zien of er iemand thuis is, vormt de basis voor vele automatiseringen in een slim huis. Zo voorkom je dat lampen onnodig aan gaan zodra het donker wordt. Of dat de thermostaat onnodig aanslaat als je afwezig bent. Maar stel je voor dat je zelfs kunt bepalen of iemand wakker is of slaapt. Hoewel de meesten een vast ritme hebben, wijk je daar ook wel eens van af. Niets is vervelender als ’s avonds om 23:00 ineens de lampen uitgaan omdat je normaal gesproken zou gaan slapen.
Huisstatus op basis van aanwezigheid
Aanwezigheid en huisstatus tracking zijn mijns inziens twee verschillende dingen. De huisstatus volgt eigenlijk uit de aanwezigheid van één of meerdere apparaten die je altijd bij je draagt. Meestal een smartphone, maar een fitness armband kan ook. Als alle apparaten weg zijn zou het huis (Home Assistant dus) moeten weten dat er niemand aanwezig is. Dan kan de thermostaat lager, het alarmsysteem ingeschakeld en de verlichting uit. Dit kun je doen door wifi-signalen te pingen of door bluetooth signalen te volgen. Het tracken van slapen of wakker zijn is iets ingewikkelder. Er bestaan sensoren die je onder je matras legt, maar ik pak het anders aan. Mijn telefoon staat ’s nachts altijd aan zodat mensen mij in geval van nood kunnen bellen. Wifi zet ik echter wel uit. Omdat mijn bluetooth altijd aan staat ’s nachts kan ik het verschil zien tussen wakker zijn en slapen. Ik hanteer de volgende 3 persoon statussen:
Op basis van deze persoon statussen baseer ik vervolgens de huisstatus:
Geen van de personen is thuis en slaapt
De extra vakantie huisstatus gebruik ik als een speciale status waarbij het alarmsysteem uitschakelt zodra er bluetooth signalen van telefoons van bekenden worden opgepikt. Zo kan iemand rustig de plantjes water geven zonder zich over het alarmsysteem te hoeven bekommeren. Als de status niet op vakantie-modus staat, werkt dit principe alleen bij de bewoners zelf.
Implementeren in Home Assistant
Voorbereidingen in Home Assistant
Laten we beginnen met wat voorbereidingen. Allereerst maken we een input_select lijst aan in configuration.yaml waarin de huis statussen terug komen. Je kunt de opties zelf kiezen en aanpassen waar nodig. Voeg de volgende configuratie toe aan configuration.yaml:
input_select:
huis_status:
name: Status huis
options:
- Thuis
- Slapen
- Afwezig
- Vakantie
initial: Thuis
icon: mdi:home-variant-outline
Vervolgens doen we hetzelfde per persoon waar je de status van wilt tracken:
input_select:
naam_persoon_status:
name: Status naam persoon
options:
- Thuis
- Slapen
- Afwezig
initial: Thuis
icon: mdi:account-star
Het idee is dat we de geautomatiseerd wisselen tussen de correcte huis- en persoonstatus. Als je het automatisch wisselen van deze status uit wilt kunnen zetten, hebben we ook een input_boolean nodig:
huisstatus_automatisch:
name: Automatische huisstatus
initial: on
icon: mdi:home-variant-outline
Hiermee kun je via het lovelace dashboard dan altijd het automatische gedrag uitschakelen.
Persoonstatus tracken
Ik maak gebruik van twee zogenaamde device trackers die ik als zeer betrouwbaar ervaar. Een wifi tracker die standaard al in Home Assistant aanwezig is en een bluetooth tracker waar extra hardware voor nodig is in de vorm van een Raspberry Pi (Zero). Een tip voordat je met onderstaande trackers bezig gaat: veel smartphones hebben de neiging het MAC-adres van het apparaat te wijzigen. Dat is niet handig als je op basis van een MAC-adres een IP adres toewijst. Dit gedrag valt uit te zetten. Ook belangrijk is om te beseffen dat het wifi MAC-adres per netwerk verschilt en dat ook het bluetooth MAC-adres uniek is.
Wi-Fi device tracker
Met de wifi device tracker van Home Assistant kun je de aanwezigheid van elk apparaat dat op wifi werkt checken. Het meest voor de hand liggend is een smartphone. Het is belangrijk dat elk apparaat dat je wilt volgen een vast IP adres toegewezen heeft gekregen in de router. Doe je dat niet, dan heb je kans dat het IP adres wijzigt en dat de tracking ineens niet meer werkt. Voeg de volgende configuratie toe aan configuration.yaml
device_tracker:
- platform: ping
hosts:
persoon1_ping: 192.168.x.x
persoon2_ping: 192.168.x.x
interval_seconds: 5
consider_home: 180
Onder hosts kun je de IP adressen van alle apparaten kwijt die je wilt tracken. Elk van deze apparaten krijgt na een herstart van Home Assistant zijn eigen sensor.
Bluetooth device tracker
Voor de bluetooth device tracker is wat meer arbeid nodig, maar van de vele bluetooth trackers die ik heb uitgeprobeerd is dit veruit de beste. Een Raspberry Pi Zero is voldoende om deze tracker te kunnen laten werken, maar een “normale” Raspberry (bijvoorbeeld een 3B) werkt ook prima. Volg de instructies op https://github.com/andrewjfreyer/monitor om de Raspberry te installeren.
Zorg ook dat je een Mosquitto (MQTT) server hebt draaien. De makkelijkste manier is om via de Supervisor van Home Assistant de addon Mosquitto broker te installeren.
In Home Assistant neem je vervolgens de volgende configuratie op in configuration.yaml:
sensor:
- platform: mqtt
state_topic: 'monitor/beneden/persoonx'
value_template: '{{ value_json.confidence }}'
unit_of_measurement: '%'
name: 'Bluetooth confidence persoon x'
Zorg dat de Mosquitto configuratie in de sensor achter “state_topic” en in de configuratie van de Raspberry overeenkomen. De Raspberry publiceert periodiek een zekerheids-percentage per te tracken apparaat. Ik ga ervan uit dat een apparaat aanwezig is als dit percentage boven de 80% is en afwezig is als dit percentage onder de 80% is. Je kunt deze percentages ook anders gebruiken. Door meerdere Raspberries door het huis te plaatsen, zou je zelfs room-tracking kunnen implementeren. Daarmee weet je in welke ruimte van het huis iemand is. Dit vergt echter veel finetuning.
Visueel programmeren met Node Red
Bovenstaande flow bestaat uit 6 stappen die uiteindelijk de juiste persoon-status toekent. Allereerst heb je de triggers, bestaande uit de sensoren die je hiervoor hebt aangemaakt. Zodra er een waarde van deze sensoren wijzigt, worden alle waarden uitgelezen. Vervolgens wordt er per persoon per sensor een “on” (aanwezig) of “off” (afwezig) aan toegekend. De combinatie van deze “on” en “off” waarden vormen de uiteindelijke persoon-status. Bovenstaande flow is voor 2 personen met ieder 2 sensoren, maar je kunt het principe makkelijk uitbreiden naar meer personen en/of meer sensoren.
Als je de input_boolean wilt gebruiken om het automatische gedrag uit te zetten, kun je de volgende (iets aangepaste) flow gebruiken:
Huisstatus tracken
<wordt binnenkort aangevuld>