Een smarthome opzetten met ESPHome en Home Assistant

Noud van Kruysbergen
0

Je kunt een smarthome opzetten met Home Assistant en daarmee met ESPHome geprogram­meerde smarthome-apparaten en andere smarthome-apparaten eenvoudig aansturen. We geven een idee van de automatiseringsmogelijk­heden en hoe je Home Assistant samen met ESPHome gebruikt.

Het gratis Home Assistant heeft als voordeel dat je niet vastzit aan een bepaalde fabrikant en diens eigen systemen. Bovendien kun je met Home Assistant een smarthome opzetten met daarin apparaten en sensors op ­basis van de opensource firmware ESPHome. Die firmware kun je flashen op zelfbouw-onderdelen en op allerlei kant-en-klare (goedkope) smarthome-apparatuur. Apparaten met ESPEasy kun je migreren naar ESPHome.

smarthome opzetten met Home Assistant en ESPHome illustratie

Stap 1: Home Assistant installeren

Home Assistant kun je op allerlei platformen installeren. De makkelijkste manier om aan de slag te gaan is met het Home Assistant Operating System. Als voorbeeld installeren we dat op een Raspberry Pi 3 .

Download de image voor de Raspberry Pi 3 en zet die op een geheugenkaart (bijvoorbeeld met Balena-­Etcher). Na het flashen stop je de sd-kaart in de Raspberry Pi, sluit je die met een kabel aan op je lo­kale netwerk en schakel je de stroom in. Een monitor en toetsenbord zijn niet nodig. Het installeren duurt ongeveer 20 minuten.

Je kunt zien dat de installatie voltooid is wanneer de webinterface van Home Assistant (HA) bereikbaar is op het adres http://homeassistant.local:8123. Als dat niet werkt, heb je het ip-adres van je Raspberry Pi nodig – dat adres kun je vinden in de ­webinterface van je router of via een ip-scanner-app zoals Fing. Meer details over het installeren vind je ook op de HA-site.

Gegevens en updates

In de browser begint de ‘onboarding’, de eerste installatie. Bij de eerste stap geef je een gebruikersnaam en wachtwoord op. Daarna kun je je locatie bepalen aan de hand van je openbare ip-adres, die dan wordt opgenomen in de configuratie. Uit je locatie leidt Home Assistant informatie af voor je smarthome opzetten, zoals de tijdzone en de stand van de zon.

Home Assistant start

Je kunt de integratie­set-up overslaan. Die kun je later gebruiken bij je smarthome opzetten om eindapparaten zoals slimme stekkers en tv-toestellen aan Home Assistant te ­koppelen.

In het Overzicht verschijnt dan het actuele weer voor jouw locatie. De basisinstallatie is daarmee voltooid. Wanneer Home Assistant al een update aanbiedt in het menu-item Supervisor op de menubalk aan de linkerkant, installeer die dan meteen. Die update neemt enkele minuten in beslag.

Home Assistant dashboard

Kleurrijke dashboards maken een smarthome opzetten met Home Assistant zo aantrekkelijk. Je kunt apparaten van verschillende fabrikanten toevoegen en met elkaar verbinden.

ESPHome en Home Assistant verbinden

Als voorbeeld voegen we een trapverlichting met ESPHome-firmware toe. Daarvoor moet je eerst bij de firmware van je ESPHome de applicatie-­interface activeren. In het yaml-bestand van ESPHome moet de api-regel actief zijn (zonder # ervoor) en elke sensor en elke actuator moet een name hebben. Met esphome run xyz.yaml zet je het configuratiebestand xyz.yaml (pas de naam aan jouw bestand aan) over naar je ESP-module.

Na het starten het apparaat detecteert Home Assistant dan de ESPHome-­module. Met een paar klikken kun je hem toevoegen: linksonder op de HA-interface, onder Notificaties, verschijnt een notitie dat er een nieuw apparaat is gevonden. Met ‘Check it out’ controleert Home Assis­tant de module op bruikbare sensors of actuatoren. Met Configureer voeg je hem toe.

Elk apparaat kan worden toegewezen aan groepen voor je smarthome opzetten, die Gebieden worden genoemd. Voordat je het venster met de succesmelding weg klikt, kun je die toewijzing zo nodig aanpassen. Voor testdoeleinden volstaat de groep Test, die je aan het einde van de lijst via ‘Nieuw gebied toevoegen’ aanmaakt. De verschillende groeperingen zullen je later helpen om zelfs een groot aantal apparaten overzichtelijk te beheren. Klik op Voltooien om het apparaat toe te voegen.

led en sensor op Home Assistant dashboard

De interface werkt op de achtergrond automatisch status-­elementen bij – hier bijvoorbeeld de led-status op een ESPHome-module en het accuniveau van een smartphone.

Door de HA-app op je smartphone te installeren, kun je bijvoorbeeld sensors zoals de batterijstatus van je telefoon toevoegen. We gebruiken die verderop in het voorbeeld. Geef de app de nodige toestemmingen. In het HA-systeem vind je dan een notificatie dat er een nieuw apparaat gevonden is. Stel het in op dezelfde manier als de ESPHome-­module en wijs het toe aan een gebied.

Schermuitvoer met ESPHome

ESPHome kan ook kleine displays aansturen die je vervolgens via Home Assistant van gegevens kunt voorzien. Wij gebruiken bijvoorbeeld een klein OLED-display om de tijd, de status van de led, het accuniveau van een smartphone en een tekstbericht weer te geven dat in Home Assistant kan worden ­ingesteld. De volledige lijst van displays die ESPHome ondersteunt, is te vinden bij de documen­tatie.

We hebben gekozen voor het model SSD1306, dat als merkloos product verkrijgbaar is voor zo’n 6 euro. Dat kleine grafische display (0,9 inch) heeft een resolutie van 128×64 pixels. In tegenstelling tot andere displays, die 10 pinnen nodig hebben, wordt dat display met SSD1306-chip via het I2C-protocol aangestuurd met maar twee signaallijnen, data en klok (SDA en SCL), die zich op pin D1 en D2 van de NodeMCU bevinden. Daarnaast zijn er nog aansluitingen voor de voedingsspanning (3V) en de massa (GND). Je kunt de display aansluiten op een ESPHome-module zoals de NodeMCU.

ESPHome module met display gekoppeld

Uitgebreide instructies voor ESPHome flashen met voorbeelden zoals de genoemde led-trapverlichting vind je in c’t magazine 11/2021. Daar lees je ook meer over bijvoorbeeld het instellen van dashboards in Home Assistant. Het voorbeeld hieronder geeft je een goed idee van wat er bij komt kijken.

Breid eerst het YAML-bestand van de ESPHome-module uit met het acti­veren van I2C, zodat de module de bus scant op appa­raten:

i2c:
sda: D1
scl: D2

Sluit de vier aansluitingen van het display aan op de (van de voeding losgekoppelde) ESP-module. Sluit hem dan opnieuw aan op de usb-poort en upload de nieuwe software, zodat je het opstartproces met I2C-scan kunt volgen in de automatisch geopende log. Als het display correct is aangesloten, wordt het adres ervan gevonden en in de log weergegeven:

[C][i2c:028]: I2C Bus:
[C][i2c:029]: SDA Pin: GPIO4
[C][i2c:030]: SCL Pin: GPIO5
[C][i2c:031]: Frequency: 50000 Hz
[I][i2c:033]: Scanning i2c bus for »active devices…
[I][i2c:040]: Found i2c device at »address 0x27

Dat adres (0x3C in ons voorbeeld) heb je nodig voor de displaydefinitie, die je aan het eind van het YAML-bestand zet::

display:
– platform: lcd_pcf8574
dimensions: 20×4
address: 0x27
lambda: |-
it.print(4, 0, “Hello World!”);
it.printf(0, 1, “LED ist %s”, »id(ledblue).state ? “an” : “aus” );

Definieer de gegevens volgens de datasheet van je display (zie de voorbeeldcode in de documentatie van ondersteunde displays) – in ons geval een SSD1306 met 128 kolommen en 64 regels – en het address zoals weer­gegeven door de I2C-scan. Met lambda wordt een sectie voor instructies in C++ geopend. Het wordt bij het interpreteren van de YAML-code in het resulterende C++ programma ingevoegd. ESPHome heeft die optie omdat sommige instructies de grenzen overschrijden van de programmalogica die in YAML kan worden weergegeven. Gebruik lambda echter alleen als het niet anders kan, zodat het YAML-­bestand overzichtelijk blijft.

In ons voorbeeld wordt lambda gebruikt vanwege de meer individuele ontwerpmogelijkheden (o.a. fonts) van de print-instructies in C++ die ­nodig zijn voor de uitvoer naar het display. De eerste twee ­argumenten specificeren de eerste kolom en de eerste regel (tellen begint met 0) van de uitvoer. Daarna volgt (in ons geval) de font-ID en de weer te geven string. De font-ID moet bovenin de code gedefinieerd zijn (zie de voorbeeldcode van het display). Moet de waarde van een variabele in de string verschijnen, dan gebruik je printf. In het bovenstaande voorbeeld wordt de logische toestand van de schakelaar met de ID ledblue geëvalueerd en afhankelijk van het resultaat (true of false) wordt de juiste string geselecteerd. Om in plaats van ‘Hello World’ de huidige tijd weer te geven, kun je het voorbeeld uitbreiden met de tijd-query van Home Assistant. Pas daarvoor in de time-configuratie in het YAML-bestand de specificatie van het platform aan en wijs een variabelenaam (ID) toe:

time:
– platform: homeassistant
id: time

De variabele time bevat dan de actuele datum en tijd (als Unix-timestamp). De tijd in het gebruikelijke formaat wordt via een C++ instructie naar het display geschreven. Vervang de ‘Hello World’-regel van het display van hierboven door deze regel:

it.strftime(0, 0, “Tijd: %H:%M:%S”»,
id(time).now());

Na het flashen van de firmware synchroniseert ESP­Home zichzelf met HA en zet de tijd op het display.

De twee volgende regels vullen we met informatie van Home Assistant: het accuniveau en een instelbaar tekstbericht. Om het accuniveau op te vragen, heb je zijn entiteits-ID nodig: via ‘Instellingen / Entiteiten’ in de webinterface, typ in het zoekveld ‘accu’ in om de ID van het oplaadniveau te vinden – in ons voorbeeld sensor.gt_i9505_batterijniveau. Sommige besturingssystemen gebruiken intern Engelse benamingen – als je niets vindt met accu of batterij, probeer dan battery. Hiermee kun je op de ESPHome-module een geschikte sensor aanmaken die de waarde van de HA-server overneemt en die onder de lokale variabele accu beschikbaar stelt:

display:
– platform: lcd_pcf8574
dimensions: 20×4
address: 0x27
lambda: |-
it.strftime(0, 0, “Time: %H:»%M:%S”, id(time).now());
it.printf(0, 1, “LED is %s”, »id(ledblue).state ? “aan” : “uit” );
it.printf(0, 2, “Accu: %.1f %%”», id(accu).state );

sensor:
– platform: homeassistant
id: accu
entity_id: sensor.»sm_a520f_batterijniveau

Voor de berichttekst in de laatste regel kunnen alle apparaten of sensors van je Home Assistant-­instantie als bron dienen. In ons voorbeeld gebruiken we een keuzelijst in de HA-interface met verschillende voorbereide teksten. Je hebt een tekstveld nodig om dat te laten werken. Via ‘Instellingen / Helpers / Helper toevoegen’ krijg je een lijst met verschillende opties. Met Tekst kun je een vrij tekstveld maken, maar voor ons voorbeeld is de optie Keuzelijst geschikter. Geef de helper een naam, bijvoorbeeld ‘OLED-bericht’.

Daaronder kun je onder Opties teksten toevoegen, bijvoorbeeld ‘Bericht 1’, ‘Bericht 2’ en ‘Geen bericht’. Nadat je die helper met Aanmaken hebt opgeslagen, kom je in een lijst terecht waarin je de net aangemaakte helper kunt selecteren. Daarna voeg je de sectie text_sensor toe aan het YAML-bestand, zodat die data van Home Assistant kan aannemen. Een tekstsensor kan alfanumerieke tekens leveren, terwijl een normale sensor alleen cijfers levert:

text_sensor:
– platform: homeassistant
id: oled1
entity_id: input_select.oled_bericht

Je kunt de ID vrij kiezen – de entity_id is de ID van de Home Assistant-helper die je zojuist hebt gemaakt. Je vindt die in je HA-systeem op de lijst Helpers onder Entiteits-ID of rechtstreeks in de helper wanneer je die opent met een dubbelklik. Om ervoor te zorgen dat ESPHome de tekst naar het display overbrengt, voeg je een extra regel in het ­lambda-gebied van display in:

it.printf(0, 1, “%s”, »id(oled1).
state.c_str());

ESPHome leest de sensor oled1 en zet de tekst om in een C-string. Wanneer het bijgewerkte YAML-­bestand geüpload is en er weer verbinding is met Home Assistant, wordt het bericht dat momenteel in de helper is geselecteerd op het display weer­gegeven. Test de functie door een ander bericht te selecteren uit de keuzelijst. Daarna kun je het tekstveld eventueel toevoegen aan een (nieuw) dashboard. Een geschikt kaarttype is Entiteiten, die je bijvoorbeeld de titel Tekstselectie kunt geven.

ESPHome module via Home Assistant aansturen bij smarthome opzetten

Het tekstveld is slechts een eenvoudig voorbeeld van het gebruik van een display bij Home Assistant.


Ontvang informatie en tips voor je smarthome, schrijf je in voor de nieuwsbrief:


Smarthome opzetten – back-up Home Assistant!

Een smarthome opzetten kan een hoop werk zijn. Vergeet daarom niet om een back-up van Home Assistant te maken. Je kunt een handmatige back-up van de hele systeemconfiguratie starten in het Super­visor-menu onder Snapshots. De functie creëert een tar-archief dat wordt opgeslagen op de sd-kaart. Dat beschermt tegen misconfiguraties en systeemfouten. Het tar-bestand kan later via onboarding worden teruggezet naar een nieuwe Home-Assistant-installatie.

Om er zeker van te zijn dat je altijd een ac­tuele versie hebt, maak je de back-up via de automatiseringsinstellingen: selecteer Tijd als triggertype en voer bijvoorbeeld 03:30:00 in. Onder Acties kies je als type actie ‘Service aanroepen’. De naam van de dienst die moet worden aangeroepen is hassio.snapshot_full. De service kan niet volledig via de webinterface geconfigureerd worden. Klik daarom op de drie puntjes in het veld Acties, selecteer ‘Bewerken als YAML’ en maak de volgende configuratie aan:

service: hassio.snapshot_full
data_template:
name: |
Backup_{{ now().strftime»(‚%Y-%m-%d‘) }}

De code maakt een back-up met de naam ‘Backup_<datum>‘ wanneer die wordt uitgevoerd. Om ervoor te zorgen dat je gegevens, zelfs als de sd-kaart kapot gaat, veilig zijn, moet je de back-up opslaan op een externe gegevensdrager of in de cloud.

Tot slot

Vrijwel geen enkele andere opensource smarthomecentrale is zo veelzijdig en toch zo eenvoudig te gebruiken als Home Assistant. Het systeem laat liefhebbers van kleurrijke webinterfaces niet in de steek, maar biedt toch veel opties voor wie zelf de puntjes op de i wil zetten.

De enorme community zorgt ervoor dat Home Assistant up-to-date blijft en dat de selectie add-ons voortdurend groeit. Als je ESPHome-modules gebruikt, zul je de uiterst eenvoudige en stabiele integratie in het centrale systeem snel leren waarderen en plezier beleven aan het bouwen van componenten voor je eigen smarthome opzetten.

(Deze informatie is afkomstig uit het artikel van Thomas Romeyke en Noud van Kruysbergen uit c’t magazine 11/2021, p. 112)

Lees uitgebreide workshops en informatie voor je smarthome op je gemak in c't magazine jan-feb/2022

Deel dit artikel

Lees ook

Windows 11 installeren van usb-stick – upgrade van Windows 10

Met deze stappen kun je Windows 11 installeren vanaf een usb-stick, met behoud van je programma's en bestanden van Windows 10.

Automatische pakket-updates voor Debian, Ubuntu, Raspberry Pi OS

De automatische pakket-updates van op Debian gebaseerde Linux-distributies houden met de juiste configuratie ook Ubuntu en Raspberry Pi bij de tijd.

Interessant voor jou

0 Praat mee
avatar
  Abonneer  
Laat het mij weten wanneer er