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:
För att sedan automatiskt starta myggservern när du startar din RPi, skriv in:
pi@raspberry:~ $ sudo apt uppdatering
pi@raspberry:~ $ sudo apt install -y mosquitto mygga-klienter
pi@raspberry:~ $ sudo systemctl aktivera mosquitto.serviceSå mycket för teorin.
Integration
Integrationen mellan ESP8266 och Home-Assistant via MQTT ser schematiskt ut så här: 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.
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
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:
Raderna 31, 32 och 33 måste modifieras för din installation.
Efter rad 36 ska följande kod läggas till:
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:
Efter rad 27 måste följande två rader läggas till:
#includeNaturligtvis måste du först ladda ner biblioteket "Adafruit_BMP085" (https://github.com/adafruit/Adafruit-BMP085-Library) och installera den i Arduino IDE!
#include
Raderna 31, 32 och 33 måste modifieras för din installation.
31 const char* ssid = "........";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).
32 const char* lösenord = "........";
33 const char* mqtt_server = "broker.mqtt-dashboard.com";
Efter rad 36 ska följande kod läggas till:
// Anslut VCC för BMP085-sensorn till 3,3V (INTE 5,0V!)och i setup() efter rad 113 lägg till detta:
//Anslut GND till jord
// Anslut SCL till i2c-klocka - på GPIO05
// Anslut SDA till i2c-data - på GPIO04
Adafruit_BMP085 bmp;
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:
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-inloggningRad 92 säger:
char* mqttPasswd = "..."; // .. och hans lösenord
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
Logga nu in på din HA-server och skriv in:
Du kommer då att se följande information visas:
mosquitto_sub -hMQTT-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/”.-u -P mqttPasswd> -v -t ESP8266/#
Du kommer då att se följande information visas:
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å:
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: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:
mäklare:
Porto: 1883
client_id: HassIO
hålla vid liv: 60
användarnamn:
lösenord:
grupp: !include_dir_merge_named groups/På kartan ~/.homeassistant/sensors/ låt oss skapa en ny fil som heter esp8266.yaml som har detta innehåll:
sensor: !include_dir_merge_list sensors/
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:
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
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
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)Programmet DSMR_Actual.py har följande innehåll:
#
@reboot /home/homeassistant/.homeassistant/scripts/DSMR_Actual.py
#
# m h dom mon dow kommando
# varje minut
* * * * * /home/homeassistant/.homeassistant/scripts/DSMR_Actual.py
#
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:
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:
analyserad och inkluderad.
En av sensorkonfigurationsfilerna är DSMT_Actueel.yaml. Detta har följande innehåll:
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/Dessa regler säkerställer att alla .yaml-filer som finns i mappen grupper/ eller sensorer/ sparas som en konfigurationsfil för HA-installationen
sensor: !include_dir_merge_list sensors/
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
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