Hang je huis vol sensors met ESPHome
Tegenwoordig smijten verschillende fabrikanten je naar je hoofd met toestellen om je huis slimmer te maken. Van regenmeters tot slimme stekkers en weerstations. Je kan hier veel geld aan verspillen, of zo’n slimme toestellen gewoon zelf maken.
ESP
Zoals ik reeds zei in mijn artikel over onze traphal met 600 leds zijn de ESP-bordjes van Espressif ideaal voor wanneer je dingen wil maken die verbinden met het Internet:
Al een geluk zijn er een andere ontwikkelbordjes die daar wel heel goed in zijn. Die bordjes bevatten de ESP8266-microchip. Die chip is op dezelfde manier te programmeren als een Arduino, maar heeft standaard ingebouwde WiFi, en de nodige bibliotheken om IoT-toepassingen mogelijk te maken. Zijn grote broer de ESP32 kan naast dat alles ook Bluetooth (en is dubbel zo snel).
Go big or go home
Dit is wat ik met mijn allereerste ESP8266 gemaakt heb:
Heel veel draden, een bewegingssensor, een lichtsensor, een microfoon, een temperatuur- en vochtigheidssensor, een schermpje en een laserstraal. Dit ding hangt nog steeds op in onze vergaderruimte op de VRT en is natuurlijk totale overkill om te zien of het licht aan is.
Ik heb er destijds veel te veel tijd ingestoken, maar het leerde me wel hoe je met een ESP verbindt met het netwerk en ineens ook de beginselen van MQTT en node-red.
Alles dat de sensoren opvangen wordt elke 10 seconden naar een MQTT-server (een soort telefooncentrale voor IoT-toepassingen) doorgestuurd, die het dan op zijn beurt weer meedeelt aan een kleine applicatie die ik in node-red heb geschreven.
Het schrijven van de code en het opzetten van Mosquitto MQQT en node-red had me allemaal bespaard gebleven als ik had geweten dat er een project bestaat dat al die dingen voor jou doet: ESPHome.
ESPHome
ESPHome is a system to control your ESP8266/ESP32 by simple yet powerful configuration files and control them remotely through Home Automation systems.
Kort samengevat: ESPHome is een firmware voor ESP dat je toestaat dingen zoals hierboven te maken zonder code te schrijven, en integreert met Home Assistant en anderen.
Na installatie (pip3 install esphome
) start je eenvoudig een nieuw project via de wizard (esphome serverkast.yaml wizard
) en na het beantwoorden van enkele vragen schrijft de wizard een YAML-bestand weg met daarin de minimale configuratie:
esphome:
name: serverkast
platform: ESP8266
board: nodemcuv2
wifi:
ssid: ""
password: ""
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Sample Fallback Hotspot"
password: ""
captive_portal:
# Enable logging
logger:
# Enable Home Assistant API
api:
ota:
Wanneer je dit nu flasht op je ESP (esphome run serverkast.yaml
) dan gaat je ESP terug opstarten, verbinding maken met je WiFi-netwerk en tevoorschijn komen in Home Assistant.
Natuurlijk heb je hier nog geen bal aan. Tijd dus om wat sensors te verbinden. In mijn serverkast ligt een ESP8266 met een DHT11 temperatuur- en vochtigheidssensor verbonden met PIN D2. In het configuratiebestand geeft dat dan (onder ota:
)
sensor:
- platform: dht
pin: D2
model: DHT11
temperature:
name: "Serverkast Temperature"
filters:
- calibrate_linear:
- 0.0 -> 0.0
- 24.0 -> 23.5
humidity:
name: "Serverkast Humidity"
update_interval: 60s
(Omdat DHT11 temperatuursensors wel spotgoedkoop maar niet echt accuraat zijn vindt er een kleine calibratie plaats: 24 graden wordt bijgesteld naar 23,5.)
Na het opnieuw flashen (via USB of over WiFi) komen die sensors dan proper binnen in HomeAssistant:
In HomeAssistant kan de data van deze sensor nu gebruikt worden om automatisaties mee uit te voeren, of om mooie grafieken te maken met bijvoorbeeld InfluxDB:
Sensors, knoppen, schermen, …
Het mooie aan ESPHome is dat alles dat je maar kan bedenken out of the box werkt. Een e-paper display eraan hangen? Een camera? Of je eigen IR-afstandsbediening maken? Het kan allemaal, en het werkt allemaal via hetzelfde configuratiebestand. Een overzicht van alle ondersteunde componenten vind je hier.
Automatisaties in ESPHome
Een automatisatie die ik nog gepland heb staan voor in mijn serverkast is automatisch een ventilatiefan te laten draaien wanneer de temperatuur hoger is dan 30°. Dit kan in de interface van Hom
eAssistant, maar evengoed in het configuratiebestand zelf:
sensor:
- platform: dht
pin: D2
model: DHT11
temperature:
name: "Serverkast Temperature"
filters:
- calibrate_linear:
- 0.0 -> 0.0
- 24.0 -> 23.5
on_value_range:
- above: 30.0
then:
- fan.turn_on: fan
- below: 30.0
then:
- fan.turn_off: fan
Dit laatste heeft als voordeel dat je automatisatie ook werkt als HomeAssistant niet bereikbaar is, en is zeker voor simpele automatisaties die geen andere apparaten in je netwerk nodig hebben aan te bevelen.
Automatisaties in HomeAssistant
Tijdens de kerstperiode had ik een ESP verbonden met wat leds (toen kende ik WLED nog niet) en een knop. Als je op die knop drukte begon er op onze Google Nest Hub kerstmuziek te spelen en gingen de lampjes aan.
Hiervoor stuurt de ESPHome een event naar HomeAssistant:
binary_sensor:
- platform: gpio
pin:
number: D0
mode: INPUT_PULLDOWN_16
name: "Button"
on_press:
then:
- homeassistant.event:
event: esphome.button_pressed
data:
title: Button was pressed
In HomeAssistant wordt vervolgens het volume van de Nest op 75% gezet, een willekeurig kerstnummer gekozen, de lampjes aangezet en de scene Gezellig op de Hue ingeschakeld.
- id: '1608044655971'
alias: Play xmas
description: ''
trigger:
- platform: event
event_type: esphome.button_pressed
condition:
- condition: device
type: is_off
device_id: 3a18233816ee484b9780e3448c416fec
entity_id: light.xmas_leds
domain: light
action:
- service: media_player.volume_set
entity_id: media_player.woonkamer
data:
volume_level: '0.75'
- service: media_player.play_media
data:
media_content_type: music
entity_id: media_player.woonkamer
data_template:
media_content_id: '{{ [
"http://www.edsstuff.org/Music/Christmas/Disney/Disc%20A/14-White%20Christmas.mp3",
"http://news.bpmsupreme.com/wp-content/uploads/2015/12/Mariah-Carey-All-I-Want-For-Christmas-Is-You-Clean.mp3",
] | random }}'
- type: turn_on
device_id: 3a18233816ee484b9780e3448c416fec
entity_id: light.xmas_leds
domain: light
brightness_pct: 50
- service: hue.hue_activate_scene
data:
group_name: Living
scene_name: Gezellig
Opgelet als je zoiets maakt en kinderen hebt. Dit word je heel snel beu.
ESPHome updaten in Home Assistant
Na de eerste keer flashen via USB kan je ESPHome gewoon OTA (over-the-air – over WiFi dus) updaten. Dit is handig want zo kan je je sensors rustig laten hangen en toch configuratiewijzigingen doorvoeren.
In HomeAssistant heb je daarnaast ook een ESPHome community add-on. Die bevat de laatste versie van ESPHome en staat je toe om vanuit de Home Assistant interface updates uit te voeren.
Ik kopieer mijn configuratiebestanden altijd na het flashen via USB hierheen. Dit maakt updaten van eender waar mogelijk, en geeft makkelijk toegang tot de logs en status van mijn verschillende apparaten.
Het resultaat
Ik wil nog wat zottere dingen doen met ESPHome in de toekomst, maar voorlopig hou ik er gewoon de temperatuur en vochtigheid mee bij.
Member discussion