Integratie ESP8266 / DSRM logger data met Home-Assistant

Geplaatst op

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:

pi@raspberry:~ $ sudo apt update
pi@raspberry:~ $ sudo apt install -y mosquitto mosquitto-clients
Om vervolgens de mosquitto server automatisch te starten bij het opstarten van je RPi toets je in:

pi@raspberry:~ $ sudo systemctl enable mosquitto.service
Tot zover de theorie.

Integratie

De integratie tussen de ESP8266 en Home-Assistant via MQTT ziet er schematisch zo uit:
ESP / MQTT / HAESP / MQTT / HA
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.
1of!-ESP12 Proto GY681of!-ESP12 Proto GY68
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:
#include 
#include
Uiteraard moet je eerst de bibliotheek “Adafruit_BMP085” downloaden (https://github.com/adafruit/Adafruit-BMP085-Library) en in de Arduino IDE installeren!

De regels 31, 32 en 33 moeten worden aangepast voor jouw installatie.
31 const char* ssid = "........";
32 const char* password = "........";
33 const char* mqtt_server = "broker.mqtt-dashboard.com";
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).

Na regel 36 moet de volgende code worden toegevoegd:
// Connect VCC of the BMP085 sensor to 3.3V (NOT 5.0V!)
// Connect GND to Ground
// Connect SCL to i2c clock - on GPIO05
// Connect SDA to i2c data - on GPIO04
Adafruit_BMP085 bmp;
en in setup() moet, na regel 113 dit worden toegevoegd:
 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:
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 login
char* mqttPasswd = "..."; // .. and his password
In regel 92 staat:
92 if (client.connect(clientId.c_str())) {
deze moet je dan als volgt aanpassen:
92 if (client.connect(clientId.c_str(), mqttName, mqttPasswd)) r_Delivered_l1 - sensor.Power_Delivered_l2 - sensor.Power_Delivered_l3 - sensor.Gas_DeliveredEnergie_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:
Home Assistant EnergieActualHome Assistant EnergieActual
Niet meer leverbaar
ESP8266 ESP-01S WIFI ModuleDe ESP8266 WiFi module werd bij zijn introductie gepresenteerd als een TTL "Serieel naar internet" module. Handig om Arduino bordjes met het internet te verbinden.Direct leverbaar € 4,95
Geschreven door Website Willem Aandewiel (1955) heeft als achtergrond een opleiding in elektronica en digitale technieken. Het grootste deel van zijn werkbare leven heeft hij echter in de automatisering gewerkt waar hij zo'n beetje in alle disciplines van programmeur tot projectleider en projectmanager heeft gewerkt. Willem was één van de eerste Nederlanders met een micro-computer (KIM-1, 1976) in een tijd dat de PC nog moest worden uitgevonden. Tegenwoordig houdt hij zich vooral bezig met het ontwerpen en maken van kleine elektronische schakelingen met microprocessoren. Zijn ‘mission in life’ is om mensen enthousiast te maken voor het zelf maken van elektronische schakelingen, microcomputers en programmeren.

Reacties

Webwinkelkeur Kiyoh Trustpilot Opencircuit