Hoofdstuk 1 van 3

Introductie — Van ESP32-sensor naar Home Assistant

Ontdek hoe een ESP32-sensor via wifi en MQTT gegevens aan Home Assistant doorgeeft en hoe je iedere stap in die route kunt controleren.

Een temperatuurwaarde op de Seriële monitor is een mooi moment. De sensor reageert, de bedrading klopt en de ESP32 voert je programma uit. Je hebt iets gebouwd dat de omgeving werkelijk kan meten.

Maar zodra je de USB-kabel losmaakt en de ESP32 in De Werkplaats ophangt, verdwijnt die Seriële monitor uit beeld. De meting wordt nog steeds uitgevoerd, maar je kunt haar niet meer gemakkelijk bekijken. Je weet niet wat de temperatuur vannacht was, hoe hoog de luchtvochtigheid tijdens het klussen opliep of wanneer de sensor voor het laatst een geldige waarde doorgaf.

In deze gids maken we daarom de stap van een werkende losse sensor naar bruikbare informatie in Home Assistant.

De ESP32 blijft dicht bij de sensor en leest de metingen uit. Home Assistant wordt de plaats waar je actuele waarden bekijkt, geschiedenis opbouwt en later automatiseringen maakt. MQTT verzorgt het berichtenverkeer tussen beide systemen.

Dat zijn meerdere onderdelen, maar samen vormen ze één begrijpelijke keten:

BME280 → ESP32 → wifi → MQTT-broker → Home Assistant

We bouwen die keten stap voor stap op. Na iedere uitbreiding controleren we eerst wat er werkt. Daardoor leer je niet alleen welke instellingen en code je nodig hebt, maar vooral ook hoe je kunt vaststellen waar een meting blijft wanneer zij niet in Home Assistant verschijnt.

Wat we in deze gids bouwen

Ons voorbeeldproject is een klimaatsensor voor De Werkplaats. Een BME280 meet:

  • temperatuur;

  • relatieve luchtvochtigheid;

  • luchtdruk.

Een ESP32 leest deze waarden uit en verstuurt ze via het lokale wifinetwerk. Een MQTT-broker ontvangt de berichten en verdeelt ze. Home Assistant haalt de juiste waarden uit dat berichtenverkeer en toont ze als afzonderlijke entiteiten.

Een entiteit is in Home Assistant de digitale weergave van één meetwaarde, toestand of bedienbare functie. De temperatuur uit De Werkplaats kan bijvoorbeeld zichtbaar worden als:

sensor.werkplaats_temperatuur

Naast de drie klimaatmetingen voegen we later ook informatie toe over de werking van het apparaat zelf, zoals:

  • de wifi-signaalsterkte;

  • de beschikbaarheidsstatus van de ESP32;

  • het moment waarop voor het laatst een meting is ontvangen.

Die gegevens lijken misschien minder interessant dan de temperatuur. Toch bepalen ze of je de weergegeven waarde kunt vertrouwen. Een dashboard waarop 19,6 °C staat, vertelt niet vanzelf of die waarde tien seconden of tien uur oud is.

Waarom Home Assistant?

Home Assistant brengt apparaten en gegevens uit je woning of werkplaats op één plaats samen. Het kan volledig op eigen hardware en binnen je eigen netwerk draaien. De metingen van onze ESP32 hoeven daardoor niet eerst naar een externe clouddienst te worden gestuurd.

Dat heeft praktische voordelen:

  • de basiswerking is niet afhankelijk van een internetverbinding;

  • je bepaalt zelf waar je meetgegevens worden opgeslagen;

  • communicatie binnen het lokale netwerk is snel;

  • je bent minder afhankelijk van wijzigingen bij een fabrikant;

  • je kunt het systeem aanpassen en uitbreiden wanneer jij dat wilt.

Lokale werking betekent niet automatisch dat alles veilig en betrouwbaar is. Een zwak wachtwoord blijft een zwak wachtwoord. Een instabiele voeding kan nog steeds onverwachte herstarts veroorzaken. Lokaal werken geeft je vooral meer controle — en deze gids helpt je begrijpen wat je met die controle doet.

We gaan uit van Home Assistant OS. Dit is voor de meeste gebruikers de praktischste installatievorm en biedt ondersteuning voor aanvullende apps, waaronder een MQTT-broker. Gebruik je Home Assistant Container, dan blijven de principes uit deze gids hetzelfde, maar moet je bepaalde onderdelen buiten Home Assistant installeren en beheren.

Waarom MQTT?

De ESP32 en Home Assistant moeten afspraken maken over het versturen en ontvangen van gegevens. Daarvoor gebruiken we MQTT.

MQTT is een licht protocol voor berichtenverkeer. Een protocol is een verzameling afspraken waarmee apparaten en programma's elkaar kunnen begrijpen.

Bij MQTT stuurt de ESP32 een meetwaarde niet rechtstreeks naar een dashboardkaart. Hij publiceert een bericht onder een herkenbare naam. Die naam noemen we een topic.

Voor de temperatuur in De Werkplaats gebruiken we bijvoorbeeld:

werkplaats/sensor/temperatuur

De inhoud van het bericht heet de payload. Die kan in dit geval heel eenvoudig zijn:

19.6

Home Assistant kan zich op het topic abonneren. Zodra de ESP32 een nieuwe waarde publiceert, ontvangt Home Assistant het bericht en kan de bijbehorende entiteit worden bijgewerkt.

De broker als verdeelpunt

Tussen de ESP32 en Home Assistant staat een MQTT-broker. De broker ontvangt berichten en geeft ze door aan alle aangesloten programma's en apparaten die in het betreffende topic geïnteresseerd zijn.

Je kunt de broker vergelijken met de verdeelbalie van een magazijn:

  1. de ESP32 levert een bericht af;

  2. de broker kijkt bij welk topic het hoort;

  3. de broker geeft het door aan de juiste ontvangers.

Ieder apparaat of programma dat met de broker verbinding maakt, noemen we een MQTT-client. De ESP32 is een client omdat hij meetwaarden publiceert. Home Assistant is ook een client omdat het berichten ontvangt en zelf eveneens berichten kan versturen.

Deze tussenstap maakt de opbouw overzichtelijk. De ESP32 hoeft niet te weten hoe Home Assistant een dashboard tekent. Home Assistant hoeft niet te weten op welke pinnen de BME280 is aangesloten. Beide hoeven alleen de afspraken over broker, topics en payloads te kennen.

Van meting naar informatie

Onderweg verandert dezelfde temperatuurwaarde meerdere keren van vorm.

Bij de BME280 begint zij als een fysische meting. De ESP32 leest de digitale meetgegevens uit en bewaart de temperatuur bijvoorbeeld als getal in het programma:

float temperatuur = 19.6;

Vervolgens wordt dat getal een MQTT-bericht:

topic: werkplaats/sensor/temperatuur
payload: 19.6

In Home Assistant wordt het de toestand van een entiteit:

entiteit: sensor.werkplaats_temperatuur
toestand: 19.6
eenheid: °C

De betekenis blijft gelijk, maar de vorm verandert. Op iedere overgang zijn goede afspraken nodig. De ESP32 moet de sensor correct uitlezen. Wifi moet een netwerkverbinding leveren. De MQTT-client moet het juiste brokeradres en topic gebruiken. Home Assistant moet weten welke entiteit bij het bericht hoort.

Juist op die overgangen ontstaan veel fouten. Daarom behandelen we het systeem niet als één zwarte doos.

Eerst de kortste keten

Voordat we wifi of MQTT toevoegen, moet de sensor lokaal betrouwbaar werken:

BME280 → ESP32 → Seriële monitor

Zie je daar logische waarden die op veranderingen reageren, dan weet je dat de sensor, bedrading, bibliotheek en basiscode waarschijnlijk in orde zijn. Dat zegt nog niets over wifi of Home Assistant — en dat is precies de bedoeling. Een goede test controleert een klein, duidelijk deel van het systeem.

Wanneer de lokale meting nog niet stabiel is, voegen wifi, MQTT en Home Assistant alleen nieuwe mogelijke foutbronnen toe. We verlengen de keten daarom pas wanneer het voorgaande deel aantoonbaar werkt.

Voorspellen, waarnemen en controleren

In deze gids gebruiken we steeds dezelfde werkwijze:

  1. voorspel wat er zou moeten gebeuren;

  2. wijzig één onderdeel;

  3. neem waar wat er werkelijk gebeurt;

  4. vergelijk de uitkomst met je voorspelling;

  5. ga pas daarna verder.

Stel dat de ESP32 iedere dertig seconden een temperatuur publiceert. Dan kun je vooraf verwachten dat:

  • ongeveer iedere dertig seconden een nieuw bericht verschijnt;

  • opeenvolgende waarden meestal dicht bij elkaar liggen;

  • de temperatuur geleidelijk stijgt wanneer je de sensor voorzichtig verwarmt;

  • er geen nieuw bericht komt wanneer de ESP32 spanningsloos is.

Zie je iets anders, dan is dat geen mislukking maar informatie. Iedere afwijking vertelt iets over de toestand van de keten.

Dit is ook de reden waarom we steeds één wijziging tegelijk uitvoeren. Pas je tegelijkertijd het wifinetwerk, brokeradres, wachtwoord en topic aan, dan weet je achteraf niet welke verandering effect had. Met één wijziging en één controle blijft het verband zichtbaar.

Wat deze gids je leert

Dit is geen verzameling codeblokken die je alleen maar hoeft te kopiëren. Je krijgt complete voorbeelden, maar we bouwen ze op uit delen die je kunt begrijpen en controleren.

We behandelen onder andere:

  • de taak van de sensor, ESP32, wifi, broker en Home Assistant;

  • het installeren en beveiligen van een lokale Mosquitto-broker;

  • het bekijken en zelf publiceren van MQTT-berichten;

  • het verbinden van de ESP32 met wifi en MQTT;

  • het kiezen van duidelijke topics en payloads;

  • het maken van apparaten en entiteiten in Home Assistant;

  • beschikbaarheid, retained berichten en betrouwbaar opnieuw verbinden;

  • het beschermen van wachtwoorden en andere inloggegevens;

  • systematisch foutzoeken van sensor tot dashboard.

We gebruiken niet meteen iedere mogelijkheid van MQTT. Eerst bouwen we een kleine en controleerbare basis. Daarna voegen we alleen onderdelen toe die de bruikbaarheid, betrouwbaarheid of veiligheid werkelijk verbeteren.

Onze vaste afspraken

Voor het voorbeeldproject gebruiken we consequente, leesbare topics. Een eerste deel van de structuur ziet er zo uit:

werkplaats/sensor/temperatuur
werkplaats/sensor/luchtvochtigheid
werkplaats/sensor/luchtdruk
werkplaats/sensor/wifi-rssi
werkplaats/sensor/status

MQTT-topics zijn hoofdlettergevoelig. Deze twee regels verwijzen dus naar verschillende topics:

werkplaats/sensor/temperatuur
Werkplaats/Sensor/Temperatuur

Daarom schrijven we topics in deze gids consequent met kleine letters. We houden gekozen namen tijdens het project gelijk. Een vaste structuur voorkomt typefouten die technisch geldig zijn, maar waardoor een bericht op de verkeerde plaats terechtkomt.

Wat je nu al kunt controleren

Je hoeft in dit hoofdstuk nog niets te installeren. Kijk alleen eerlijk naar je uitgangspunt:

  1. Draait Home Assistant al op je lokale netwerk?

  2. Weet je of je Home Assistant OS gebruikt?

  3. Kun je de ESP32 via USB programmeren?

  4. Zie je stabiele BME280-metingen in de Seriële monitor?

  5. Is er een 2,4GHz-wifinetwerk waarmee de ESP32 Home Assistant kan bereiken?

Weet je een antwoord nog niet, schrijf die onzekerheid dan op. Ook dat is bruikbare informatie. De volgende hoofdstukken helpen je deze punten één voor één te controleren.

Wat je uit dit hoofdstuk kunt meenemen

  • Een losse sensormeting wordt bruikbare informatie wanneer je haar kunt bekijken, bewaren en controleren.

  • De BME280 meet; de ESP32 leest uit en bereidt de gegevens voor.

  • Home Assistant toont metingen als entiteiten en kan geschiedenis opbouwen.

  • MQTT is het protocol waarmee berichten worden uitgewisseld.

  • Een topic geeft aan waar een bericht over gaat; de payload bevat de waarde.

  • De MQTT-broker ontvangt berichten en verdeelt ze onder aangesloten clients.

  • De hele route van sensor tot dashboard is één keten met afzonderlijk controleerbare stappen.

  • Lokale werking geeft meer controle over beschikbaarheid, gegevens en afhankelijkheden.

  • Een fout of afwijking is informatie waarmee je het zoekgebied kleiner kunt maken.

  • Door eerst te voorspellen en daarna één wijziging te controleren, bouw je betrouwbaarder.

We weten nu wat we gaan bouwen en waarom ESP32, MQTT en Home Assistant daarin elk een eigen taak hebben. In het volgende hoofdstuk bekijken we de volledige keten van dichtbij. Dan wordt duidelijk welk onderdeel informatie meet, welk onderdeel haar vervoert en waar zij uiteindelijk wordt verwerkt en getoond.