Smarthome opzetten met Raspberry Pi, Home Assistant & ESPHome

Noud van Kruysbergen
0

Met een Raspberry Pi kun je een smarthome opzetten door gebruik te maken van Home Assistant en ESPHome. ESPHome maakt het mogelijk om geprogrammeerde smarthome-apparaten en andere slimme apparaten gemakkelijk te bedienen. In dit artikel tonen we je hoe je dit kunt bereiken.

smarthome opzetten met Home Assistant en ESPHome illustratie


Gratis informatie en tips voor smarthome en Raspberry Pi ontvangen?

Schrijf je in voor onze gratis nieuwsbrief:

Ontvang elke week het laatste IT-nieuws, de handigste tips en speciale aanbiedingen.

Wat heb je nodig voor Home Assistant?

Om Home Assistant te gebruiken, heb je een Raspberry Pi nodig, evenals de Home Assistant en ESPHome software. Het voordeel van de gratis Home Assistant is dat je niet gebonden bent aan een specifieke fabrikant met zijn eigen systemen. Daarnaast kun je met Home Assistant een smarthome opzetten met apparaten en sensoren die gebruikmaken van de opensource firmware ESPHome. Deze firmware is te installeren op zelfgemaakte onderdelen en diverse betaalbare slimme apparaten. Apparaten met ESPEasy kunnen ook overgezet worden naar ESPHome.


https://www.ct.nl/shop/chatgpt/


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

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.

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.

Detectie en toevoeging aan Home Assistant

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.

Toewijzen aan gebieden voor Smarthome-opzet

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.

Home assistant app op je smartphone

Door de HA-app (beschikbaar voor iOS of Android) 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

Stap 1: YAML-bestand uitbreiden

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

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

 


https://www.ct.nl/shop/chatgpt/


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 ESP­Home 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 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


Meer van dit soort Raspberry Pi Projects?

,Schrijf je in voor de gratis nieuwsbrief:

Ontvang elke week het laatste IT-nieuws, de handigste tips en speciale aanbiedingen.

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

Home Assistant steekt met zijn ongeëvenaarde veelzijdigheid en gebruiksgemak ver boven andere opensource smarthomecentrales uit als het gaat om het opzetten van een smarthome. Of je nu de voorkeur geeft aan levendige webinterfaces of graag de volledige controle wilt behouden, dit platform zal je nooit teleurstellen.

Dankzij een actieve en betrokken gemeenschap blijft Home Assistant altijd actueel en bruikbaar op je Raspberry Pi, terwijl het aanbod van beschikbare add-ons voortdurend groeit. Als je gebruikmaakt van ESPHome-modules, zul je snel de naadloze en stabiele integratie met het centrale systeem waarderen, wat je veel voldoening zal geven bij het ontwikkelen van componenten voor het opzetten van je eigen smarthome.


https://www.ct.nl/shop/chatgpt/


Meer van dit soort Raspberry Pi Projects?

,Schrijf je in voor de gratis nieuwsbrief:

Ontvang elke week het laatste IT-nieuws, de handigste tips en speciale aanbiedingen.

Deel dit artikel

Noud van Kruysbergen
Noud van KruysbergenNoud heeft de 'American Dream' doorlopen van jongste bediende tot hoofdredacteur van c't, waar hij zo veel mogelijk de diepgang, betrouwbaarheid en diversiteit wil bewaken.

Lees ook

Google Gemini gebruiken: dit kun je allemaal met de chatbot van Google

Eerst kon je alleen ChatGPT gebruiken, maar nu is het ook mogelijk om Gemini van Google te gebruiken. Beide chatbots die gebaseerd zijn op AI kunnen w...

Je Raspberry Pi op afstand bedienen? Zo krijg je het voor elkaar met SSH!

De Raspberry Pi op afstand bedienen is handig en kan op verschillende manieren. Via SSH is het makkelijkste op te zetten, we laten zien hoe.

0 Praat mee
avatar
  Abonneer  
Laat het mij weten wanneer er