Als je een Raspberry Pi hebt, kun je met Home Assistant & ESPHome een smarthome opzetten. Met behulp van ESPHome kun je geprogrammeerde smarthome-apparaten en andere smarthome-apparaten eenvoudig aansturen. In dit artikel laten we zien hoe je dit voor elkaar krijgt.
Ontvang gratis informatie en tips voor smarthome en Raspberry Pi, schrijf je in voor de nieuwsbrief:
Wat heb je nodig voor Home Assistant?
Om gebruik te kunnen maken van Home Assistant zul je dus zoals gezegd al een Raspberry Pi nodig hebben, de Home Assistant software & de ESPHome software. 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.
Hoe starten met Home Assistant?
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. Home Assistant is een mooi voorbeeld van nuttige Raspberry Pi projects.
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 lokale 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.
Home Assistant account aanmaken voor je Raspberry Pi
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.
Je kunt de integratieset-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.

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 Assistant 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.

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 documentatie.
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.
Stap 1: YAML-bestand uitbreiden
Breid eerst het YAML-bestand van de ESPHome-module uit met het activeren van I2C, zodat de module de bus scant op apparaten:
i2c:
sda: D1
scl: D2
Stap 2: aansluiten op ESP-module
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” );
Stap 3: definieer de gegevens
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 weergegeven 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.
Stap 4: huidige tijd weergeven
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 ESPHome zichzelf met HA en zet de tijd op het display.
Stap 5: het accuniveau opvragen
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
Stap 6: tekstbericht instellen
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());
Stap 7: test de functies
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 weergegeven. 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.
Ontvang informatie en tips voor je smarthome, schrijf je in voor de nieuwsbrief:
Vergeet niet om je Raspberry Pi Home Assistant back-up te maken
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 Supervisor-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 actuele 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 op je Raspberry Pi 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 een artikel van Thomas Romeyke en Noud van Kruysbergen)