Maak je eigen controller voor Home Assistant

© PXimport

Maak je eigen controller voor Home Assistant

Keukenapparatuur

Geplaatst: 8 december 2022 - 09:33

Aangepast: 12 december 2022 - 13:56

Gertjan Groen

Je maakt je huis veel slimmer met slimme schakelaars en Home Assistant. Maar huisgenoten stellen het niet altijd op prijs als er complexe handelingen nodig zijn om bijvoorbeeld een automatisering te starten of alleen maar een lamp aan te zetten. Daarom gaan we in deze basiscursus een controller maken die nauw samenwerkt met Home Assistant. Met de controller kun je eenvoudig apparaten omschakelen, een automatisering starten of de status van apparaten weergeven. Voor weinig geld is je huis niet alleen slim, maar óók nog makkelijk te bedienen.

Code downloaden

In deze basiscursus worden wat voorbeelden van stukken code gegeven. Omdat overtikken van code erg foutgevoelig is, kun je die code ook downloaden en daarna bekijken of kopiëren. Zie het bestand code-hacontrol.txt, beschikbaar via https://kwikr.nl/codehacontrol.

Het is erg leuk om te automatiseren met Home Assistant. Alleen is het niet zo praktisch als je vervolgens de browser of een app moet starten om bijvoorbeeld een lamp te bedienen, een automatisering te starten of een bepaalde temperatuursensor uit te lezen. Er gaat weinig boven een simpele knop of een duidelijk schermpje. Daarom gaan we in deze basiscursus een controller maken die nauw samenwerkt met Home Assistant. Hiermee bedoelen we een klein kastje waarin je bijvoorbeeld drukknoppen, lampjes, een klein schermpje of sensoren voor beweging en temperatuur inbouwt. Het technische hart is een ESP32-microcontroller met ESPHome erop geïnstalleerd. Omdat de controller samenwerkt met Home Assistant kun je nu flexibel bijvoorbeeld een bepaald (slim) apparaat in je huis omschakelen, een automatisering activeren, de status van apparaten aangeven via leds of informatie weergeven op het display.

 

De ESPHome-software

De trouwe lezer zal eerder van ESPHome hebben gehoord. Met deze software kun je eenvoudig een microcontroller zoals de ESP8266 of ESP32 programmeren zonder dat je écht hoeft te programmeren. Via configuratiebestanden geef je aan wat voor componenten je hebt aangesloten en hoe er verbinding met je netwerk en met Home Assistant moet worden gemaakt. ESPHome schrijft deze configuratie dan naar de microcontroller. Wijzigingen kun je daarna zelfs op afstand ofwel ‘over-the-air’ maken. De microcontroller kun je eenvoudig toevoegen aan Home Assistant en zal hier daarna ook nauw mee samenwerken. We maakten in Computer!Totaal al eens een luchtkwaliteitsmonitor op basis van ESPHome. Die brengt voornamelijk sensorgegevens over naar Home Assistant, zodat je een goed beeld hebt van de luchtkwaliteit in een bepaalde ruimte. Raadpleeg dit uitgebreide artikel als je meer details nodig hebt (https://kwikr.nl/luchtmon), want in deze basiscursus geven we alleen beknopte aanwijzingen voor de installatie en het gebruik van ESPHome.

ESPHome vormt de basis van onze controller voor Home Assistant.

 

01 Microcontroller en voeding

In deze basiscursus kiezen we de ESP32 als microcontroller, verkrijgbaar vanaf ongeveer 5 euro. Die is wat krachtiger en heeft meer interfaces dan de ESP8266. Ook de extra GPIO-pinnen zijn prettig. Die kun je als ingang gebruiken voor bijvoorbeeld een drukknop of bewegingssensor, maar ook als uitgang voor het aanzetten van een led. Als voeding gebruiken we een aparte 5V-netadapter. Die hoeft niet veel stroom te leveren. Zo’n 250 mA voor de ESP32 en tot 20 mA voor elke led is voldoende. Een netadapter die 9 of 12 volt levert is meestal ook geschikt, maar controleer de vereisten voor de specifieke ESP32-controller die jij gekocht hebt. Intern brengt de ESP32 de aangeboden spanning overigens terug naar 3,3 volt, dat is waar de microcontroller zelf op werkt. Die spanning wordt ook aan de uitgangen aangeboden. De bewegingssensor die we gebruiken vraagt zo’n 5 tot 20 volt en zullen we daarom vanaf de ingangsspanning voeden. Heb je meer aansluitingen nodig dan de microcontroller je geeft? We laten zien hoe je dat met een I/O-expander kunt oplossen.

Voor het project gebruiken we de ESP32-microcontroller met ESPHome.

02 Opzet maken

Het is handig om eerst een opzet voor de controller te maken met de gewenste functies. Zelf plaatsen we bovenaan een rij met acht drukknoppen met led. Met deze drukknoppen schakelen we specifieke apparaten in of uit, waarbij de led de status van dat apparaat aangeeft. We noemen deze A1 t/m A8. Daaronder plaatsen we acht simpele drukknoppen die we B1 t/m B8 noemen. We gebruiken ze om bepaalde automatiseringen in Home Assistant te starten. Denk aan het instellen van de airco op een bepaalde temperatuur of het aan- of uitzetten van een hele reeks apparaten in één keer. Deze automatiseringen stellen we in Home Assistant zelf in. Jouw controller kan natuurlijk andere afmetingen hebben. Uiteraard kun je ook altijd meerdere kleinere controllers maken voor verschillende ruimtes. Je kunt ook sensoren inbouwen, bijvoorbeeld voor temperatuur of beweging, of een klein schermpje.

Bedenk een lay-out waarbij je rekening houdt met ruimte voor componenten.

03 Behuizing

Als je een idee hebt van de functies van je controller en de vereiste ruimte kun je een behuizing zoeken. Dat is in dit project ook de voornaamste kostenpost. Een aanrader is de lijn van de Duitse fabrikant Bopla die je bij Conrad kunt bestellen. Als je op ‘bopla bop’ zoekt, vind je meerdere opties. Bij het project hebben we de Bopla Bop 7.0 PQ-9016 consolebehuizing gebruikt (ongeveer 28 euro) die is 215 × 150 × 53 mm groot, in de kleur wit. Er is ook een zwarte uitvoering, de PQ-9005. Ook zijn er smallere uitvoeringen of juist grotere exemplaren. Let erop dat de behuizing diep en hoog genoeg is voor de componenten die je wilt inbouwen. De behuizing heeft een handig deksel dat je er af kunt schroeven zodat je de vereiste gaten kunt boren.

Als behuizing gebruiken we een model van de fabrikant Bopla.

04 Gereedschap

Veel gereedschap heb je niet nodig voor dit project. Een boormachine met een setje boren is genoeg, bijvoorbeeld metaalboren. Heel praktisch is een stapboor of trapboor. Dat is een boor waarmee je meerdere diameters kunt boren, zolang het niet te dik materiaal is. Je kunt daar ook meteen een beetje de bramen mee af frezen. Bovendien kun je grotere diameters boren dan de standaard boren die in je boormachine passen. Een schuifmaat is erg handig om de diameter van je componenten te meten als je die niet kent. Ook een multimeter is praktisch om spanning na te meten, zeker als iets niet werkt. Een soldeerbout met wat soldeertin is nodig om verbindingen te maken (zie ook het artikel over solderen op onze website: https://kwikr.nl/sold). Voor de verbindingen gaan we eenvoudige jumperdraden gebruiken met in ieder geval één vrouwelijke connector voor in de ESP32. Je zou ook een vrouwelijke voedingsaansluiting kunnen maken aan de achterkant van de behuizing waar je de connector van de netadapter in kunt steken.

Met een stappenboor kun je eenvoudig meerdere diameters boren.

05 Simpele drukknoppen

We gebruiken in het project componenten met ronde doorgang, zodat we alleen gaten in de juiste diameter hoeven te boren. Merk op dat we specifiek drukknoppen kiezen en geen schakelaars (zie het kader ‘Geen schakelaars, maar drukknoppen!’). We gebruiken eenvoudige kleurrijke drukknoppen met een doorgang van 16 mm. Je kunt deze op AliExpress voor weinig geld bestellen (ongeveer 0,25 euro per stuk), maar door de toegenomen verzendkosten via dergelijke routes kun je ook overwegen ze gewoon te bestellen via een Nederlandse (online) knutselwinkel. Let erop dat de drukknoppen wel minimaal 2 cm ruimte nodig hebben op je voorpaneel. Er zijn ook kleinere drukknoppen die uiteraard minder ruimte nodig hebben, maar de bediening wordt wat krampachtiger.

Deze eenvoudige drukknoppen gebruiken we om automatiseringen te starten.

We gebruiken in het project bewust drukknoppen en geen schakelaars.

© PXimport

06 Drukknoppen met led

De drukknoppen met ingebouwde led hebben ook een diameter van 16 mm. Bij beperkte ruimte kan 12 mm ook, maar die zijn minder prettig te bedienen voor grotere vingers. Bij de bestelling van de drukknoppen moet je opletten dat de led voor 3,3 volt geschikt is. Dat is immers de spanning aan de uitgang van de microcontroller. Vaak kun je de spanning en kleur kiezen bij het bestellen. De led mag tot z’n 20 mA aan stroom verbruiken. Als echt meer nodig is, kun je dat met een transistor oplossen. Die kan met een lage stroom uit de microcontroller een grotere stroom schakelen. Vooral voor bijvoorbeeld een relais zal dit nodig zijn. Overigens zou je in plaats van een verlichte drukknop ook een losse signaal-led kunnen gebruiken (ook weer voor de juiste spanning) of een led waar je zelf een passende weerstand bij uitrekent, in dit geval veelal zo’n 220 tot 500 ohm.

Deze drukknoppen hebben een led die we als status gaan gebruiken.

07 Verbindingen maken

Voor elke drukknop heb je één GPIO-pin nodig die we straks als ingang instellen. Voor de drukknoppen met led heb je aanvullend nog een GPIO-pin als uitgang nodig voor de led. Je kunt de GPIO-pinnen van de ESP32 gebruiken, maar ook van een I/O-expander (zie het kader ‘Een I/O-expander gebruiken’). Omdat deze I/O-expander iets minder stroom kan leveren dan de ESP32 gebruiken we deze bij voorkeur voor drukknoppen en niet voor de leds. Een jumperdraad is zoals gezegd erg praktisch om verbindingen te maken. Soldeer deze aan één kant aan de drukknop en steek de vrouwelijke kant in de GPIO-pin op de ESP32 of de I/O-expander.

De andere aansluiting op de drukknop verbind je met ground (GND). Omdat we een hele reeks drukknoppen hebben, kun je deze allemaal met elkaar doorverbinden. Het aansluiten is dus eenvoudig, maar bereid je voor op spaghetti van verbindingen bij veel componenten!

Met jumperdraden maken we de verbindingen naar de microncontroller.

De SX1509 is een handige I/O-expander voor extra GPIO-pinnen.

08 ESPHome installeren

We hebben ESPHome onder Windows geïnstalleerd. Via https://kwikr.nl/espinstall vind je de instructies. Het komt erop neer dat je Python installeert en aan de path-variabele toevoegt, zodat je de pakketbeheerder in elke map op je pc kan aanroepen via de Opdrachtprompt met de opdracht pip3. Installeer dan ESPHome met:

pip3 install wheel
pip3 install esphome

Het is handig om een mapje te maken voor je project. Navigeer met de Opdrachtprompt naar die map. Controleer met de opdracht esphome version of ESPHome aanroepbaar is. Daarna kun je via de wizard een script maken dat als basis kan dienen.

Python is de voornaamste vereiste om ESPHome te kunnen installeren.

09 Script maken

In de hiervoor gemaakte map gaan we het script maken met de opdracht:

esphome wizard controller.yaml

Je kunt ook een andere naam gebruiken. In de wizard voer je de gewenste naam in, het type microcontroller (ESP32) en de naam van je ontwikkelbordje, in ons voorbeeld is dat esp32doit-devkit-v1. Verder geef je de wifi-naam van je netwerk op en het wachtwoord. Optioneel kun je een wachtwoord opgeven voor het verbinden met de ESP32. Dit laten we achterwege. Er wordt nu een configuratiebestand controller.yaml gemaakt waar we verder aan gaan werken. Dit bestand is in het YAML-formaat. Als je met Home Assistant hebt gewerkt, zul je er wellicht vertrouwd mee zijn. In dit bestand gaan we aangeven welke componenten zijn aangesloten en inhaken op gebeurtenissen in Home Assistant.

Via de wizard geef je details voor de ESP32 microcontroller op.

 

10 SX1509 toevoegen

We gaan het zojuist gemaakte script verder aanvullen. Als eerste zullen we de I/O-expander toevoegen, de SX1509. Hiervoor voeg je eerst de I2C-component toe aan ESPHome en definieer je vervolgens de SX1509 zelf met een ID (waar we straks naar verwijzen) en het gebruikte adres. We gebruiken de GPIO-pinnen van de SX1509 individueel, maar je zou ook voor een 8x8-matrix kunnen kiezen, voor tot 64 drukknoppen! Bij ESPHome kun je daar meer over lezen.

De toevoeging in het bestand controller.yaml wordt:

# i2c voor connectie met SX1509
i2c:
  sda: 21
  scl: 22
 
# sx1509 op default adres (aan te passen via jumpers)
sx1509:
  - id: sx1509_hub1
    address: 0x3E

Voor de SX1509 zijn ook andere toepassingen zoals een keypad.

11 Leds toevoegen

We gaan nu eerst de acht leds toevoegen die in de eerste acht drukknoppen in de controller zitten. We noemen deze A1 t/m A8. Je begint hiervoor in je configuratiebestand met een regel switch: waar je vervolgens alle schakelaars onder zet. Hier zie je alleen de eerste led die op GPIO-pin 16 is aangesloten. Voor de andere leds gebruiken we GPIO 17, 18, 19, 23, 25, 26 en 27.

switch:
  - platform: gpio
    pin: 16
    id: led_a1
    name: "LED A1"

We voegen de leds toe die op de GPIO-pinnen van de ESP32 zijn aangesloten.

 

12 Drukknoppen toevoegen

We gaan nu de drukknoppen toevoegen. Hiervoor gaan we een GPIO-pin als ingang configureren en de interne pull-up-weerstand gebruiken. In ESPHome noemen we het een binary-sensor. In je script begin je met een regel binary_sensor:. Daaronder voeg je dan de drukknoppen toe. In onderstaande voorbeeld zijn twee drukknoppen aangesloten. De eerste is verbonden met GPIO 12 op de ESP32 en de tweede met pin 0 op de SX1509. Zelf hebben we gekozen om de eerste zestien drukknoppen aan te sluiten op pinnen 0 t/m 15 op de SX1509.

binary_sensor:
  - platform: gpio
    pin:
      number: 12
      mode:
        input: true
        pullup: true
      inverted: true
    name: "Pin A1"
 
  - platform: gpio
    name: "SX1509 Pin A1"
    pin:
      sx1509: sx1509_hub1
      # Gebruik pin 0 op de SX1509
      number: 0
      mode:
        input: true
        pullup: true
      inverted: true

De drukknoppen kun je verbinden met de ESP32, maar ook met de SX1509.

 

13 Status van Home Assistant

We willen de status van bepaalde apparaten weergeven via leds. Daarom voegen we die apparaten die al in Home Assistant bekend zijn ook toe aan de configuratie van ESPHome. Doet dit ook weer onder het kopje binary_sensor:, maar nu met Home Assistant als platform. Het onderstaande voorbeeld dient voor de status van een versterker die in dit geval is voorzien van een Sonoff Basic met de Tasmota-firmware. Maar ook andere slimme stekkers zoals de Shelly Plug en TP-Link HS110 werken prima, of verlichting met WLED. Cruciaal is dat je de entity_id overneemt van Home Assistant. Voor de versterker is dat switch.kantoorversterker. Bij name en id vul je een herkenbare naam voor gebruik binnen ESPHome in. Met on_state: kunnen we vervolgens reageren op statusveranderingen in Home Assistant. Hier stellen we in dat de schakelaar met de ID led_a1, die we bij de bewuste led hebben ingevuld (zie paragraaf 11), de status van de versterker moet volgen (aan of uit). Voor de andere apparaten ziet het er vergelijkbaar uit.

  - platform: homeassistant
    name: "kantoorversterker"
    id: kantoorversterker
    entity_id: switch.kantoorversterker
    on_state:
      then:
        # kantoorversterker aan, dan led A1 aan
        - if:       
            condition:
              and:
                - binary_sensor.is_on: "kantoorversterker"
            then:
              - switch.turn_on: led_a1
        - if:
        # kantoorversterker uit, dan led A1 uit
            condition:
              and:
                - binary_sensor.is_off: "kantoorversterker"
            then:
              - switch.turn_off: led_a1

We zorgen dat de leds worden geschakeld naar gelang de status in Home Assistant.

14 Initialisatie na het starten

Als je de controller aanzet, zul je merken dat de leds uitstaan. Er gebeurt pas iets als de status van een apparaat in Home Assistant verandert. Daarom voegen we enkele regels toe als initialisatie bij het starten van de controller. Dit doe je onder het kopje esphome: dat je bovenaan in het script vindt, onder on_boot:. We beginnen met een vertraging van 20 seconden, zodat de microcontroller de tijd krijgt om verbinding met Home Assistant te maken. In dit voorbeeld controleren we de status van de kantoorversterker en schakelen de led led_a1 naar gelang de status. Voor de andere apparaten ziet het er vergelijkbaar uit.

esphome:
  name: controller
  on_boot:
    then:
      - delay: 20s
      # A1 - Kantoorversterker aan, dan LED A1 aan
      - if:
          condition:
            and:
              - binary_sensor.is_on: "kantoorversterker"
          then:
            - switch.turn_on: led_a1
      # A1 off - Kantoorversterker uit, dan LED A1 uit
      - if:
          condition:
            and:
              - binary_sensor.is_off: "kantoorversterker"
          then:
            - switch.turn_off: led_a1

15 Toevoegen aan Home Assistant

Als je klaar bent met de configuratie kun je deze compileren en uploaden met:

esphome controller.yaml run

Je kunt de controller als alles goed is gegaan toevoegen aan Home Assistant. Hiervoor ga je via de instellingen naar Apparaten en Diensten en kies je Integratie toevoegen. Zoek naar ESPHome, vul de hostnaam of het ip-adres in, en kies Opslaan. Na het toevoegen van de controller zijn alle componenten als entiteit binnen Home Assistant beschikbaar en kun je bijvoorbeeld reageren op het indrukken van een knop, zoals we zullen laten zien.

Na het toevoegen zijn alle componenten als entiteit beschikbaar.

 

16 Automatiseringen maken

Via automatiseringsregels kan Home Assistant reageren op het indrukken van knoppen. Als voorbeeld maken we een automatisering voor de eerste knop die de versterker omschakelt. Ga naar Instellingen / Automatiseringen & Scènes, kies Automatisering toevoegen en dan Begin met een lege automatisering. Geef de automatisering een naam. Onder Triggers zoek je de entiteit op. In ons voorbeeld is dat binary_sensor.sx1509_pin_a1. Bij Van voer je off in en bij Naar vul je on in. De automatisering wordt dan uitgevoerd als de drukknop wordt ingedrukt. Onder Acties kiezen we bij Type actie voor Apparaat. Selecteer het apparaat (in dit voorbeeld kantoorversterker) en kies bij Actie voor Omschakelen kantoorversterker.

Voor alle andere drukknoppen kun je hetzelfde doen. Uiteraard kun je meerdere acties toevoegen. Zo gebruiken we enkele van de simpele drukknoppen (B1 t/m B8) als een ‘master’ om een hele reeks apparaten aan of juist uit te zetten. Je kunt natuurlijk alle mogelijkheden van Home Assistant en de aangesloten apparaten benutten bij het maken van automatiseringen.

We maken automatiseringsregels om te reageren op drukknoppen.

Uitbreiden met bewegingssensor

Een bewegingssensor is een handige toevoeging in elke controller. Je kunt hiermee detecteren of iemand aanwezig is en op basis daarvan bepaalde apparaten aan- of uitzetten. Als bewegingssensor is de HC-SR501 heel geschikt. Die gedraagt zich overigens als schakelaar en voeg je toe onder het kopje binary_sensor:, zoals:

  - platform: gpio
    pin: 5
    name: "${node_name} pir"
    device_class: motion

Op het printplaatje van deze bewegingssensor vind je twee potmeters. Met de eerste kun je de gevoeligheid instellen. Met de tweede stel je in hoelang de schakelaar ‘aan’ moet blijven na het detecteren van beweging. Let op dat de genoemde HC-SR501 5 tot 20 volt nodig heeft. Sluit deze daarom op de ingangsspanning aan.

Met een bewegingssensor kun je reageren op de aanwezigheid van personen.

0

Powered by

logo
Deel dit artikel
Reageer op dit artikel
Voeg toe aan favorieten
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