Integratie ESP8266 / DSRM logger data met Home-Assistant
Placeret påPlatform: MQTT
De eenvoudigste manier om data op een ESP8266 te delen met Home-Assistant (HA) is doormiddel van een MQTT-broker. Een MQTT-broker is een service die standaard op de HassIO installatie van HA draait. MQTT staat voor Message Queuing Telemetry Transport systeem en het bestaat uit clienten die communiceren met een server (de ‘broker’). Een client kan zowel een subscriber (iemand die gegevens opvraagt) alsook een publisher (iemand die gegevens levert) zijn. Informatie is gegroepeerd in ‘topics’ (onderwerpen). Als een publisher nieuwe informatie heeft dan stuurt hij deze naar de broker. De broker zorgt er vervolgens voor dat iedere client die op dit specifieke topic een subscription heeft deze nieuwe informatie ontvangt.De topics zijn hiërarchische georganiseerd wat wil zeggen dat een topic, bijvoorbeeld “ESP8266/Abc/Temperatuur”, bestaat uit “ESP8266, waaronder “Abc” staat waar weer onder “Temperatuur” staat. Binnen de “ESP8266/Abc/” hiërarchie kan bijvoorbeeld ook “Luchtdruk” staan (ESP8266/Abc/Luchtdruk). Heeft een client een subscription op alléén “ESP8266” dan ontvangt hij álle berichten die daarónder vallen óók!
Als zich een nieuwe client aanmeld met interesse in een bepaald topic dan zal deze client direct de laatste informatie over dit topicontvangen. De subscriber hoeft dus niet te wachten tot er een update voor dit topic komt. Hij krijgt altijd, direct, de laatste bekende informatie.
Mocht de MQTT-broker (mosquitto) niet op jouw Raspberry Pi geïnstalleerd zijn dan kun je dat alsnog zo doen:
Om vervolgens de mosquitto server automatisch te starten bij het opstarten van je RPi toets je in:
pi@raspberry:~ $ sudo apt update
pi@raspberry:~ $ sudo apt install -y mosquitto mosquitto-clients
pi@raspberry:~ $ sudo systemctl enable mosquitto.serviceTot zover de theorie.
Integratie
De integratie tussen de ESP8266 en Home-Assistant via MQTT ziet er schematisch zo uit:
Om met de ESP8266 een verbinding met een MQTT broker te kunnen maken moet de bibliotheek pubsubclient van Nick O'Leary
in de Arduino IDE worden geïnstalleerd (https://github.com/knolleary/pubsubclient).
Als voorbeeld gebruiken we een project waarbij de ESP8266 een BMP085 (GY-68) sensor uitlees en de gegevens naar de MQTT-broker stuurt.Ik heb de schakeling zoals in onderstaand plaatje op een 1of!-proto bordje (links) gesoldeerd en de Sketch op de 1of!-ESP12 bordje (rechts) geflashed.
in de Arduino IDE worden geïnstalleerd (https://github.com/knolleary/pubsubclient).
Als voorbeeld gebruiken we een project waarbij de ESP8266 een BMP085 (GY-68) sensor uitlees en de gegevens naar de MQTT-broker stuurt.Ik heb de schakeling zoals in onderstaand plaatje op een 1of!-proto bordje (links) gesoldeerd en de Sketch op de 1of!-ESP12 bordje (rechts) geflashed.

Na installatie van de voornoemde bibliotheek zijn er onder “Bestand->Voorbeelden” / ”File->Examples” een aantal voorbeeldprogramma’s geplaatst bij “PubSubClient”. Voor deze introductie gaan we uit van het programma “mqtt-esp8266” en alle regelnummers verwijzen naar de posities in de originele Sketch!
Achter regel 27 moeten de volgende twee regels worden gezet:
De regels 31, 32 en 33 moeten worden aangepast voor jouw installatie.
Na regel 36 moet de volgende code worden toegevoegd:
Komt er een message binnen op het topic “inTopic”, dan wordt de functie callback() aangeroepen waar, in de voorbeeldprogramma, in de regels 73 t/m 80 afhankelijk van de inhoud van het bericht de BUILTIN_LED wordt aan- of uit- gezet. Deze functionaliteit en deze topics zal ik in deze post verder niet gebruiken.
Omdat we voor deze post vooral gegevens van de ESP8266 naar HA willen sturen maken we een extra functie die er zo uit ziet:
Achter regel 27 moeten de volgende twee regels worden gezet:
#includeUiteraard moet je eerst de bibliotheek “Adafruit_BMP085” downloaden (https://github.com/adafruit/Adafruit-BMP085-Library) en in de Arduino IDE installeren!
#include
De regels 31, 32 en 33 moeten worden aangepast voor jouw installatie.
31 const char* ssid = "........";Bij ssid moet je de naam van je WiFi netwerk invullen en bij password het wachtwoord van je WiFi netwerk. Bij mqtt_server moet je het IP-adres van je HA server invullen (wat bij HA vaak hetzelfde IP-adres als van je HA server is).
32 const char* password = "........";
33 const char* mqtt_server = "broker.mqtt-dashboard.com";
Na regel 36 moet de volgende code worden toegevoegd:
// Connect VCC of the BMP085 sensor to 3.3V (NOT 5.0V!)en in setup() moet, na regel 113 dit worden toegevoegd:
// Connect GND to Ground
// Connect SCL to i2c clock - on GPIO05
// Connect SDA to i2c data - on GPIO04
Adafruit_BMP085 bmp;
if (!bmp.begin()) >De Sketch heeft een subscription op het topic “inTopic” en publiceert op het topic “outTopic”.
Komt er een message binnen op het topic “inTopic”, dan wordt de functie callback() aangeroepen waar, in de voorbeeldprogramma, in de regels 73 t/m 80 afhankelijk van de inhoud van het bericht de BUILTIN_LED wordt aan- of uit- gezet. Deze functionaliteit en deze topics zal ik in deze post verder niet gebruiken.
Omdat we voor deze post vooral gegevens van de ESP8266 naar HA willen sturen maken we een extra functie die er zo uit ziet:
Deze functie leest de BMP085 uit en druk de gevonden waarden af op de Serial Monitor én publiceert deze gegevens. Daarbij is het hoofd-topic “ESP8266”. De subtopic “thisDevID” moet in een productie omgeving aangepast worden in “iets” waar deze ‘sensor-module’ uniek door geïdentificeerd kan worden (voor het geval je er meerdere hebt) en daaronder een indicatie die de soort data aangeeft (Temperatuur, Luchtdruk en Hoogte). De daadwerkelijk waarden worden als json-string verstuurd.
Vervolgens veranderen we de loop() functie als volgt:
Vervolgens veranderen we de loop() functie als volgt:
void loop() > // loop()Mocht je voor de MQTT-broker op de HA server een username en password hebben ingesteld, dan moet je deze gegevens gebruiken bij het maken van de verbinding met de broker. Voeg, na regel 33, de volgende twee regels toe:
char* mqttName = "..."; // name for MQTT loginIn regel 92 staat:
char* mqttPasswd = "..."; // .. and his password
92 if (client.connect(clientId.c_str())) {deze moet je dan als volgt aanpassen:
92 if (client.connect(clientId.c_str(), mqttName, mqttPasswd)) Teruglevering: name: Energie Teruglevering (actueel) entities: - sensor.Energy_Returned - sensor.Power_Returned - sensor.Power_Returned_l3
Met het opnieuw opstarten van Home-Assistant kunnen we de gegevens uit de Slimme Meter uitlezer bewonderen:

ESP8266 ESP-01S WIFI-modulESP8266 WiFi-modulet blev præsenteret ved sin introduktion som et TTL "Serial to Internet"-modul. Praktisk at forbinde Arduino boards til internettet. Det viste sig hurtigt, at dette ESP-01S-modul og dets antal GPIO-ben, udadbåret, større brødre (ESP-7, ESP-12, NodeMCU osv.På lager € 5,00