Integration ESP8266 / DSRM-loggerdata med Home-Assistant

Placerad på

Plattform: MQTT

Det enklaste sättet att dela data på en ESP8266 med Home-Assistant (HA) är genom en MQTT-mäklare. En MQTT-mäklare är en tjänst som körs på HA:s HassIO-installation som standard. MQTT står för Message Queuing Telemetri Transport systemet och det består av klienter som kommunicerar med en server ('mäklaren'). En klient kan vara både en prenumerant (någon som begär data) och en utgivare (någon som tillhandahåller data). Informationen är grupperad i "ämnen". Om en utgivare har ny information skickar han den till mäklaren. Mäklaren ser sedan till att varje kund som har en prenumeration på detta specifika ämne får denna nya information.

Ämnena är organiserade hierarkiskt, vilket innebär att ett ämne, till exempel "ESP8266/Abc/Temperature", består av "ESP8266, under vilket är "Abc" och under vilket är "Temperature". Till exempel kan "ESP8266/Abc/"-hierarkin också innehålla "Air pressure" (ESP8266/Abc/Air pressure). Om en klient har en prenumeration på endast "ESP8266" kommer han också att få alla meddelanden som faller under det!

Om en ny kund registrerar sig med intresse för ett visst ämne kommer denna kund omedelbart att få den senaste informationen om detta ämne. Prenumeranten behöver därför inte vänta på en uppdatering för detta ämne. Han får alltid, omedelbart, den senaste kända informationen.

Om MQTT-mäklaren (myggan) inte är installerad på din Raspberry Pi , kan du fortfarande göra det:

pi@raspberry:~ $ sudo apt uppdatering
pi@raspberry:~ $ sudo apt install -y mosquitto mygga-klienter
För att sedan automatiskt starta myggservern när du startar din RPi, skriv in:

pi@raspberry:~ $ sudo systemctl aktivera mosquitto.service
Så mycket för teorin.

Integration

Integrationen mellan ESP8266 och Home-Assistant via MQTT ser schematiskt ut så här:
ESP/MQTT/HA ESP/MQTT/HA
För att kunna ansluta till en MQTT-mäklare med ESP8266, biblioteket pubsubklient förbi Nick O'Leary
installeras i Arduino IDE (https://github.com/knolleary/pubsubclient).

Som ett exempel använder vi ett projekt där ESP8266 läser en BMP085 (GY-68) sensor och skickar data till MQTT-mäklaren.

Jag har kretsen som visas på bilden nedan 1 av! prototyp plattan (vänster) lödd och Sketchen på 1eller!-ESP12 skylt (höger) blinkade.
1av!-ESP12 Proto GY68 1av!-ESP12 Proto GY68
Efter installation av ovannämnda bibliotek finns det under "Arkiv->Exempel” / ”Arkiv->Exempel” placerade ett antal exempelprogram på ”PubSubClient”. För denna introduktion antar vi programmet "mqtt-esp8266” och alla radnummer hänvisar till positionerna i originalskissen!

Efter rad 27 måste följande två rader läggas till:
#include 
#include
Naturligtvis måste du först ladda ner biblioteket "Adafruit_BMP085" (https://github.com/adafruit/Adafruit-BMP085-Library) och installera den i Arduino IDE!

Raderna 31, 32 och 33 måste modifieras för din installation.
31 const char* ssid = "........";
32 const char* lösenord = "........";
33 const char* mqtt_server = "broker.mqtt-dashboard.com";
Bi ssid du måste ange namnet på ditt WiFi-nätverk och kl Lösenord lösenordet för ditt WiFi-nätverk. Bi mqtt_server du måste ange IP-adressen till din HA-server (som vid HA ofta är samma IP-adress som din HA-server).

Efter rad 36 ska följande kod läggas till:
// Anslut VCC för BMP085-sensorn till 3,3V (INTE 5,0V!)
//Anslut GND till jord
// Anslut SCL till i2c-klocka - på GPIO05
// Anslut SDA till i2c-data - på GPIO04
Adafruit_BMP085 bmp;
och i setup() efter rad 113 lägg till detta:
if (!bmp.begin()) >
Sketchen har en prenumeration i ämnet"inTopic” och publicerar på ämnet ”outTopic”.

Om ett meddelande kommer om ämnet "inTopic" blir funktionen ring tillbaka()anropas där, i exempelprogrammet, på raderna 73 till 80, beroende på innehållet i meddelandet, BUILTIN_LED slås på eller av. Jag kommer inte att använda den här funktionen och dessa ämnen i det här inlägget.

Eftersom vi främst vill skicka data från ESP8266 till HA för det här inlägget kommer vi att skapa en extra funktion som ser ut så här:
Denna funktion läser BMP085 och skriver ut de hittade värdena på den seriella monitorn och publicerar dessa data. Huvudämnet är "ESP8266”. Underämnet "dettaDevID” måste modifieras i en produktionsmiljö i ”något” som unikt kan identifiera denna 'sensormodul' (om du har mer än en) och därunder en indikation som indikerar typen av data (temperatur, barometertryck och höjd). De faktiska värdena skickas som en json-sträng.

Därefter ändrar vi loop()-funktionen enligt följande:
void loop() > // loop()
Om du har en Användarnamn och Lösenord har ställt in, måste du använda denna information när du ansluter till mäklaren. Lägg till följande två rader efter rad 33:
char* mqttName = "..."; // namn för MQTT-inloggning
char* mqttPasswd = "..."; // .. och hans lösenord
Rad 92 säger:
92 if (client.connect(clientId.c_str())) {
du måste justera det enligt följande:
 92 if (client.connect(clientId.c_str(), mqttName, mqttPasswd)) {
Om du nu laddar upp programmet till ESP8266 kommer du att se i Seriell Monitor:
ESP8266 MQTT-utgång ESP8266 MQTT-utgång
Logga nu in på din HA-server och skriv in:
mosquitto_sub -h  -u  -P mqttPasswd> -v -t ESP8266/#
MQTT-installationen på Raspberry Pi kallas 'mygga'. Med kommandot ovan startar vi en klient som ansluter till MQTT-servern på den angivna IP-adressen (vilket i många fall kommer att vara samma IP-adress som IP-adressen för HA-servern) med det användarnamn och lösenord du angett för har ställts in MQTT-servern. Alternativet "-t" indikerar att vi bara är intresserade av ämnen som börjar med "ESP8266/”.

Du kommer då att se följande information visas:
mosquitto_sub mosquitto_sub
Nu när vi med säkerhet vet att meddelandena från ESP8266 hamnar hos MQTT-mäklaren, kan vi försöka få HA att extrahera dessa värden från MQTT och presentera dem på dess front-end.

HA behöver veta vem MQTT-mäklaren är att kontakta. Det är därför vi tar det configuration.yaml arkivera dessa uppgifter på:
mqtt:
mäklare:
Porto: 1883
client_id: HassIO
hålla vid liv: 60
användarnamn:
lösenord:
Jag har alla mina gruppinställningar i mappen ./grupper och alla mina yaml-filer för sensorkonfiguration i undermappen ./sensorer. Jag har det för det configuration.yaml inkluderade även dessa regler:
grupp: !include_dir_merge_named groups/
sensor: !include_dir_merge_list sensors/
På kartan ~/.homeassistant/sensors/ låt oss skapa en ny fil som heter esp8266.yaml som har detta innehåll:
I detta säger vi att vi vill använda plattformen mqtt, att inom konfigurationerna objekten "ESP8266_Temperatur”, “ESP8266_Lufttryck"och"ESP8266_Höjd" inträffar och uppgifterna från publikationen "ESP8266/thisDevID/xxx” bör extraheras från json-strängen.

Sedan lägger vi till i mappen ~/.hemassistent/grupper filen esp8266.yaml med följande innehåll:
Efter att ha startat om Home-Assistant kan vi beundra data i front-end.
HA Front-end HA Front-end

Plattform: restAPI

Home-Assistant kan även hämta data från andra system (till exempel från DSMR-loggern) via en restAPI.

På kartan ~/.hemassistent/sensorer Du måste till exempel ange följande information:
Men om restAPI returnerar flera data med en begäran har detta tillvägagångssätt nackdelen att om du anropar restAPI för varje fält så finns det mycket data."går över gränsen” och att det externa systemet också är ganska hårt belastat.Jag valde ett annat tillvägagångssätt för att läsa ut Smart Meter-läsaren (DSMR-logger).

Plattform: Fil

För att läsa upp DSMR-loggern valde jag att låta Home-Assistant extrahera data från en fil. Den filen finns på samma dator som Home-Assistant körs på, vilket minimerar omkostnader.

Det fungerar så här:
DSMR - Hemassistent DSMR - Hemassistent
Cron är Unix/Linux-demonen som startar jobb baserat på tid. I vårt fall måste han starta pythonskriptet "DSMR_Actual.py" varje minut. Med kommandot 'crontab -e' (som användarrot!!) kan du lägga till följande rad i crontab:
# För mer information se manualsidorna för crontab(5) och cron(8)
#
@reboot /home/homeassistant/.homeassistant/scripts/DSMR_Actual.py
#
# m h dom mon dow kommando
# varje minut
* * * * * /home/homeassistant/.homeassistant/scripts/DSMR_Actual.py
#
Programmet DSMR_Actual.py har följande innehåll:
I rad 5 ges 'url' värdet på resten av API:et för DSMR-loggern som används för att begära aktuell data. Linje 6 omvandlar detta till en begäran till DSMR-loggern och rad 9 stoppar svaret från
DSMR-loggern till variabeln 'r' som sedan avkodas på rad 10 och sätts in i variabeln 'respons'. Slutligen skriver json.dump() innehållet i svaret till filen '/tmp/DSMR-Actual.json'.

Innehållet i filen '/tmp/DSMR-Actual.json' ser ut så här:
För att hålla det lite tydligt har jag lagt alla program och skript som jag använder för Home-Assistant (HA) i mappen ~/.homeassistant/scripts/ stannade.

Nu måste vi bara göra klart för HA att de vill extrahera data från DSMR-loggern från filen /tmp/DSMR-Actual.json måste få tag på.

Jag har alla sensorer på kartan ~/hemassistent/sensorer stannade. I den configuration.yaml fil jag har följande referens:
grupp: !include_dir_merge_named groups/
sensor: !include_dir_merge_list sensors/
Dessa regler säkerställer att alla .yaml-filer som finns i mappen grupper/ eller sensorer/ sparas som en konfigurationsfil för HA-installationen
analyserad och inkluderad.

En av sensorkonfigurationsfilerna är DSMT_Actueel.yaml. Detta har följande innehåll:
För att faktiskt få dessa data på front-end av HA, mappen ~/.homeassistant/groups/ en fil DSMR logger.yaml skapas med följande innehåll:
Med omstarten av Home-Assistant kan vi beundra data från Smart Meter-läsaren:
Hemassistent energi faktiskt Hemassistent energi faktiskt
Inte längre tillgänglig
ESP8266 ESP-01S WIFI-modulESP8266 WiFi-modulen presenterades som en TTL "Serial to Internet"-modul vid introduktionen. Praktiskt för att ansluta Arduino kort till internet. I lager € 4,70
Postat av Hemsida Willem Aandewiel (1955) har en bakgrund inom elektronik och digital teknik. Men större delen av sitt yrkesverksamma liv har han arbetat inom automation där han har arbetat inom i stort sett alla discipliner från programmerare till projektledare och projektledare. Willem var en av de första holländarna med en mikrodator (KIM-1, 1976) vid en tidpunkt då datorn ännu inte hade uppfunnits. Numera sysslar han främst med design och produktion av små elektroniska kretsar med mikroprocessorer. Hans "uppdrag i livet" är att göra människor entusiastiska över att göra sina egna elektroniska kretsar, mikrodatorer och programmering.

Kommentarer

Webwinkelkeur Kiyoh Trustpilot Opencircuit