In Home Assistant kan room-detectie gebruikt worden door Bluetooth devices te laten communiceren met een zogenaamd Bluetooth Base Station. Bluetooth devices (Beacons) kunnen smart-phones zijn, maar ook smart-watches zoals iPhones en Apple watches of de Android varianten daarvan. Als BT Base Station kan een ‘NodeMCU ESP32 dev board‘ gebruikt worden en door daarop de juiste firmware plaatsen. Dit kan eenvoudig via de ESPresense Home Page.
De eerste stap is dus om de firmware op de ESP te schrijven en dat gaat via ‘Base Stations’ -> ‘Install Firmware’. Hiervoor dient de ESP module via een USB kabeltje aan de computer aangesloten te worden en deze wordt dan als seriële poort gebruikt.
Via de ‘CONNECT’ button is dan die seriële poort te kiezen en ‘INSTALL ESPRESENSE’. Selecteer ‘Erase device‘ gevolgd door ‘INSTALL’. Wellicht is het nodig om de Boot-button in te houden en dan de EN-button kort in te drukken.
Zodra het gereed is wordt gevraagd om de WiFi hotspot in te stellen, sla deze stap over met ‘SKIP‘.
De volgende stap is om met je computer een WiFi verbinding te maken met de ESP, deze gedraagt zich nu als hotspot met de naam ‘espresense-xxxx‘. Eenmaal een connectie hiermee, wordt de configuratie-pagina getoond en kan deze aangepast worden. Vul je lokale WiFi SSID en password in, Vul hier ook de Room naam in waar deze ESP uiteindelijk komt te liggen:
Scroll iets lager en vul de naam en poort van je MQTT broker in. Indien dat als Mosquitto op Home Assistant staat kun je deze gebruiken, anders het IP adres van je MQTT broker, port, username en password.
Kies voor ‘Save‘ en linksboven voor ‘Restart device‘.
De ESP is nu gereed en kan op zijn uiteindelijke bestemming geplaatst worden. Binnen de MQTT pagina in Home Assistant zal deze nu zichtbaar zijn.
Op deze manier kunnen meerdere ESP’s ingesteld worden voor de ruimtes in het huis en deze zullen dan verschijnen in het MQQ entiteiten overzicht:
BLE Beacons (iPhone) toevoegen
- Navigeer naar de ESPresense pagina met een browser: http://<ip>/ui/#/devices
- Kies voor Enroll en geef een naam op, gevolgd door Enroll
- Pair nu op de iPhone naar de ESPresense via Algemeen -> Instellingen -> Bluetooth.
- Kies voor ESPresense en koppel deze aan de iPhone
- De koppeling wordt door ESPresense automatisch verbroken maar deze is nu bekend als beacon binnen ESPresense.
- De iPhone is nu tevens bekend in de MQTT topic
espresense/settings/#
.
Sensor maken binnen Home Assistant
Via de Studio Code Server add-on kan een yaml-configuratie gemaakt worden voor de sensor(s) van de beacons. Dit kan onder sensor: binnen configuration.yaml maar mooier is het om een sensors.yaml bestand te maken en te includen in configuration.yaml met
sensor: !include sensors.yaml
In het sensors.yaml bestand komt dan o.a. de configuratie voor de beacons-sensors waarmee gedetecteerd kan worden naar welke Base Station de kortste afstand is en dus in welke ruimte de iPhone zich bevindt. Een voorbeeld voor sensors.yaml:
# ESPresense monitoring - platform: mqtt_room device_id: "iphonenico" name: "iphone_nico" state_topic: "espresense/devices/iphonenico" timeout: 20 away_timeout: 120
Hierna Home Assistant herstarten om de sensors in te lezen en dan kan de sensor.iphone_nico gebruikt worden om te zien in welke ruimte deze zich bevindt.
Home detectie (device_tracker)
De sensor van de iPhone-beacon zou nu ook als device_tracker gebruikt kunnen worden en daarmee wordt dan gedetecteerd of het device Home is of niet (not_home). Om dit te kunnen doen zal een device_tracker aangemaakt moeten worden in het bestand known_devices.yaml Dat zou er dan alsvolgt uit kunnen zien:
## Known Devices (used for ESPresense) ## nico_phone: hide_if_away: false name: nico_phone mac: 12:34:56:78:90:ab track: true
Het MAC-adres moet dan overeenkomen met dat van de iPhone. Hierna dient Home Assistant herstart te worden en dan is er een device_tracker bij gekomen:
Indien de iphone binnen het bereik is van één de ESPresense devices (Base Stations) dan zal de status van de device_tracker de waarde ‘home‘ krijgen.
Indien de iphone niet binnen het bereik is van één de ESPresense devices (Base Stations) dan zal de status van de device_tracker de waarde ‘not_home‘ krijgen.
Het nadeel van smartphones is dat de fabrikanten de batterij zo lang mogelijk wil laten gebruiken zonder steeds op te moeten laden. Hierdoor zal niet altijd het bluetooth signaal doorgegeven worden als de smartphone niet in gebruik is. Het resultaat is dan een false ‘not_home’ detectie voor de device_tracker. Om dit tegen te gaan kan met een service genaamd ‘device_tracker.see‘ de status naar ‘onbekend’ gezet worden in plaats van ‘not_home’ zodat de device_tracker dit negeert. Dit kan met een automatisering die een nieuwe status vergelijkt met een vorige status van de sensor en dan de device_tracker status overschrijft.
De automatisering in yaml ziet er zo uit:
alias: Update nico phone Device Tracker description: "" trigger: - platform: state entity_id: - sensor.nico_phone condition: - condition: template value_template: "{{ trigger.from_state.state != trigger.to_state.state }}" enabled: true action: - service: device_tracker.see data: dev_id: nico_phone location_name: >- {% if trigger.to_state.state in ['kantoor','woonkamer','keuken','boven'] %} home {% else %} unknown {% endif %} mode: single
De status van de device_tracker wordt nu onbekend indien de sensor niet in één van de ruimtes is waar een Base Station ligt.