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.

Jammer genoeg heeft iemand de stroom uitgetrokken.

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:

Rara, wanneer is de chauffage uitgevallen terwijl we weg waren?

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 HomeAssistant, 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.

Nog vragen? Contacteer me gerust!