Integration ESP8266 / DSRM logger data med Home-Assistant
Placeret påPlatform: MQTT
Den nemmeste måde at dele data på en ESP8266 med Home-Assistant (HA) er gennem en MQTT-mægler. En MQTT-mægler er en service, der som standard kører på HA's HassIO-installation. MQTT står for Message Queuing Telemetri Transport system, og det består af klienter, der kommunikerer med en server ('mægleren'). En klient kan både være en abonnent (en der anmoder om data) og en udgiver (en der leverer data). Information er grupperet i 'emner'. Hvis en udgiver har nye oplysninger, sender han dem til mægleren. Mægleren sikrer derefter, at hver klient, der har et abonnement på dette specifikke emne, modtager denne nye information.Emnerne er organiseret hierarkisk, hvilket betyder, at et emne, for eksempel "ESP8266/Abc/Temperature", består af "ESP8266, hvorunder er "Abc" og under hvilket er "Temperature". For eksempel kan "ESP8266/Abc/"-hierarkiet også indeholde "Air pressure" (ESP8266/Abc/Air pressure). Hvis en klient kun har et abonnement på "ESP8266", vil han også modtage alle beskeder, der falder ind under det!
Hvis en ny klient tilmelder sig med interesse for et bestemt emne, vil denne klient straks modtage den seneste information om dette emne. Abonnenten skal derfor ikke vente på en opdatering til dette emne. Han får altid den seneste kendte information med det samme.
Hvis MQTT-mægleren (mosquitto) ikke er installeret på din Raspberry Pi , kan du stadig gøre det:
For derefter automatisk at starte mosquitto-serveren, når du starter din RPi, skal du indtaste:
pi@raspberry:~ $ sudo apt opdatering
pi@raspberry:~ $ sudo apt install -y mosquitto mosquitto-klienter
pi@raspberry:~ $ sudo systemctl aktivere mosquitto.serviceSå meget for teorien.
Integration
Integrationen mellem ESP8266 og Home-Assistant via MQTT ser skematisk sådan ud: ESP/MQTT/HA
For at kunne oprette forbindelse til en MQTT-mægler med ESP8266, biblioteket pubsubklient ved Nick O'Leary
installeres i Arduino IDE (https://github.com/knolleary/pubsubclient).
Som et eksempel bruger vi et projekt, hvor ESP8266 læser en BMP085 (GY-68) sensor og sender data til MQTT-mægleren.Jeg har kredsløbet som vist på billedet nedenfor 1 af! prototype plade (venstre) loddet og Skitsen på 1eller!-ESP12 skilt (højre) blinkede.
installeres i Arduino IDE (https://github.com/knolleary/pubsubclient).
Som et eksempel bruger vi et projekt, hvor ESP8266 læser en BMP085 (GY-68) sensor og sender data til MQTT-mægleren.Jeg har kredsløbet som vist på billedet nedenfor 1 af! prototype plade (venstre) loddet og Skitsen på 1eller!-ESP12 skilt (højre) blinkede.
1 af!-ESP12 Proto GY68
Efter installation af det førnævnte bibliotek er der under "Fil->Eksempler” / ”Fil->Eksempler” placerede en række eksempelprogrammer på ”PubSubClient”. Til denne introduktion antager vi programmet "mqtt-esp8266” og alle linjenumre henviser til positionerne i den originale Sketch!
Efter linje 27 skal følgende to linjer tilføjes:
Linje 31, 32 og 33 skal modificeres til din installation.
Efter linje 36 skal følgende kode tilføjes:
Hvis der kommer en besked om emnet "inTopic", bliver funktionen ring tilbage()kaldet hvor, i eksempelprogrammet, i linje 73 til 80, afhængigt af indholdet af meddelelsen, er BUILTIN_LED tændt eller slukket. Jeg vil ikke bruge denne funktionalitet og disse emner i dette indlæg.
Fordi vi primært ønsker at sende data fra ESP8266 til HA for dette indlæg, vil vi oprette en ekstra funktion, der ser sådan ud:
Efter linje 27 skal følgende to linjer tilføjes:
#includeSelvfølgelig skal du først downloade biblioteket "Adafruit_BMP085" (https://github.com/adafruit/Adafruit-BMP085-Library) og installer det i Arduino IDE!
#include
Linje 31, 32 og 33 skal modificeres til din installation.
31 const char* ssid = "........";Bi ssid du skal indtaste navnet på dit WiFi-netværk og kl adgangskode adgangskoden til dit WiFi-netværk. Bi mqtt_server du skal indtaste IP-adressen på din HA-server (som ved HA ofte er den samme IP-adresse som din HA-server).
32 const char* password = "........";
33 const char* mqtt_server = "mægler.mqtt-dashboard.com";
Efter linje 36 skal følgende kode tilføjes:
// Tilslut VCC på BMP085-sensoren til 3,3V (IKKE 5,0V!)og i setup() efter linje 113 tilføj dette:
//Forbind GND til jord
// Tilslut SCL til i2c ur - på GPIO05
// Tilslut SDA til i2c-data - på GPIO04
Adafruit_BMP085 bmp;
if (!bmp.begin()) >Sketchen har en abonnement på emnet "inTopic" og udgiver om emnet "udeTemne”.
Hvis der kommer en besked om emnet "inTopic", bliver funktionen ring tilbage()kaldet hvor, i eksempelprogrammet, i linje 73 til 80, afhængigt af indholdet af meddelelsen, er BUILTIN_LED tændt eller slukket. Jeg vil ikke bruge denne funktionalitet og disse emner i dette indlæg.
Fordi vi primært ønsker at sende data fra ESP8266 til HA for dette indlæg, vil vi oprette en ekstra funktion, der ser sådan ud:
Denne funktion læser BMP085 og udskriver de fundne værdier på den serielle monitor og udgiver disse data. Hovedemnet er "ESP8266”. Underemnet "dette DevID” skal modificeres i et produktionsmiljø i “noget”, der entydigt kan identificere dette 'sensormodul' (i tilfælde af at du har mere end et) og derunder en indikation, der angiver typen af data (temperatur, barometrisk tryk og højde). De faktiske værdier sendes som en json-streng.
Dernæst ændrer vi loop()-funktionen som følger:
Dernæst ændrer vi loop()-funktionen som følger:
void loop() > // loop()Hvis du har en brugernavn og adgangskode har oprettet, skal du bruge disse oplysninger, når du opretter forbindelse til mægleren. Efter linje 33 skal du tilføje følgende to linjer:
char* mqttName = "..."; // navn for MQTT loginLinje 92 siger:
char* mqttPasswd = "..."; // .. og hans kodeord
92 if (client.connect(clientId.c_str())) {du skal justere det som følger:
92 if (client.connect(clientId.c_str(), mqttName, mqttPasswd)) {Hvis du nu uploader programmet til ESP8266, vil du se i Serial Monitor:
ESP8266 MQTT udgang
Log nu ind på din HA-server og indtast:
Du vil derefter se følgende oplysninger vises:
mosquitto_sub -hMQTT-installationen på Raspberry Pi kaldes 'mosquitto'. Med ovenstående kommando starter vi en klient, der opretter forbindelse til MQTT-serveren på den angivne IP-adresse (som i mange tilfælde vil være den samme IP-adresse som IP-adressen på HA-serveren) med det brugernavn og adgangskode, du har indtastet, er sat op. MQTT-serveren. "-t"-indstillingen angiver, at vi kun er interesserede i emner, der begynder med "ESP8266/”.-u -P mqttPasswd> -v -t ESP8266/#
Du vil derefter se følgende oplysninger vises:
mosquitto_sub
Nu hvor vi med sikkerhed ved, at beskederne fra ESP8266 ender hos MQTT-mægleren, kan vi prøve at få HA til at udtrække disse værdier fra MQTT og præsentere dem på dens frontend.
HA skal vide, hvem MQTT-mægleren skal kontakte. Det er derfor, vi tager det konfiguration.yaml indsend disse data på:
HA skal vide, hvem MQTT-mægleren skal kontakte. Det er derfor, vi tager det konfiguration.yaml indsend disse data på:
mqtt:Jeg har alle mine gruppekonfigurationer i mappen ./grupper og alle mine sensorkonfigurations-yaml-filer i undermappen ./sensorer. Jeg har det til det konfiguration.yaml omfattede også disse regler:
mægler:
Porto: 1883
client_id: HassIO
holde sig i live: 60
brugernavn:
adgangskode:
gruppe: !include_dir_merge_named groups/På kortet ~/.homeassistant/sensors/ lad os oprette en ny fil kaldet esp8266.yaml som har dette indhold:
sensor: !include_dir_merge_list sensors/
Heri siger vi, at vi vil bruge platformen mqtt, at inden for konfigurationerne punkterne "ESP8266_Temperatur”, “ESP8266_Lufttryk"og"ESP8266_Højde” opstår og dataene fra publikationen ”ESP8266/thisDevID/xxx” skal udtrækkes fra json-strengen.
Så tilføjer vi i mappen ~/.hjemmeassistent/grupper filen esp8266.yaml med følgende indhold:
Så tilføjer vi i mappen ~/.hjemmeassistent/grupper filen esp8266.yaml med følgende indhold:
Efter genstart af Home-Assistant kan vi beundre dataene i frontenden.
HA Front-end
Platform: restAPI
Home-Assistant kan også hente data fra andre systemer (f.eks. fra DSMR-loggeren) via en restAPI.På kortet ~/.hjemmeassistent/sensorer For eksempel skal du indtaste følgende data:
Men hvis restAPI'en returnerer flere data med én anmodning, har denne tilgang den ulempe, at hvis du kalder restAPI'en for hvert felt, er der en masse data."går over stregen” og at det eksterne system også er ret tungt belastet Jeg valgte en anden tilgang til at udlæse Smart Meter-læseren (DSMR-logger).
Platform: Fil
For at læse DSMR-loggeren op, valgte jeg at få Home-Assistent til at udtrække data fra en fil. Den fil er på den samme computer, som Home-Assistant kører på, hvilket minimerer overhead.Det fungerer sådan her:
DSMR - Hjemmeassistent
Cron er Unix/Linux-dæmonen, der starter job baseret på tid. I vores tilfælde skal han starte python-scriptet "DSMR_Actual.py" hvert minut. Med kommandoen 'crontab -e' (som brugerrod!!) kan du tilføje følgende linje i crontab:
# For mere information se manualsiderne til crontab(5) og cron(8)DSMR_Actual.py-programmet har følgende indhold:
#
@reboot /home/homeassistant/.homeassistant/scripts/DSMR_Actual.py
#
# m h dom mon dow kommando
# hvert minut
* * * * * /home/homeassistant/.homeassistant/scripts/DSMR_Actual.py
#
I linje 5 får 'url' værdien af resten API af DSMR-loggeren, der bruges til at anmode om de aktuelle data. Linje 6 konverterer dette til en anmodning til DSMR-loggeren og linje 9 stopper svaret fra
DSMR-loggeren ind i variablen 'r', som derefter afkodes i linje 10 og lægges ind i variablen 'respons'. Til sidst skriver json.dump() indholdet af svaret til filen '/tmp/DSMR-Actual.json'.
Indholdet af filen '/tmp/DSMR-Actual.json' ser sådan ud:
DSMR-loggeren ind i variablen 'r', som derefter afkodes i linje 10 og lægges ind i variablen 'respons'. Til sidst skriver json.dump() indholdet af svaret til filen '/tmp/DSMR-Actual.json'.
Indholdet af filen '/tmp/DSMR-Actual.json' ser sådan ud:
For at holde tingene lidt overskueligt har jeg lagt alle programmer og scripts, som jeg bruger til Home-Assistant (HA) i mappen ~/.homeassistant/scripts/ holdt op.
Nu skal vi bare gøre det klart for HA, at de vil udtrække data fra DSMR-loggeren fra filen /tmp/DSMR-Actual.json må få.
Jeg har alle sensorerne på kortet ~/hjemmeassistent/sensorer holdt op. I den konfiguration.yaml fil jeg har følgende reference:
analyseret og inkluderet.
En af sensorkonfigurationsfilerne er DSMT_Actueel.yaml. Dette har følgende indhold:
Nu skal vi bare gøre det klart for HA, at de vil udtrække data fra DSMR-loggeren fra filen /tmp/DSMR-Actual.json må få.
Jeg har alle sensorerne på kortet ~/hjemmeassistent/sensorer holdt op. I den konfiguration.yaml fil jeg har følgende reference:
gruppe: !include_dir_merge_named groups/Disse regler sikrer, at alle .yaml-filer, der er i mappen grupper/ eller sensorer/ gemmes som en konfigurationsfil for HA-installationen
sensor: !include_dir_merge_list sensors/
analyseret og inkluderet.
En af sensorkonfigurationsfilerne er DSMT_Actueel.yaml. Dette har følgende indhold:
For faktisk at få disse data på HA-frontenden, mappen ~/.homeassistant/groups/ en fil DSMR logger.yaml er lavet med følgende indhold:
Med genstart af Home-Assistant kan vi beundre dataene fra Smart Meter-læseren:
Hjemmeassistent energi faktisk
ESP8266 ESP-01S WIFI-modulESP8266 WiFi-modulet blev præsenteret som et TTL "Serial to Internet"-modul ved introduktionen. Nyttigt til at forbinde Arduino kort til internettet. På lager € 4,70