Integrointi ESP8266 / DSRM-loggerin tiedot Home-Assistantin kanssa

Asetettu päälle

Alusta: MQTT

Helpoin tapa jakaa tietoja ESP8266:sta Home-Assistantin (HA) kanssa on MQTT-välittäjä. MQTT-välittäjä on palvelu, joka toimii oletusarvoisesti HA:n HassIO-asennuksessa. MQTT tarkoittaa Viestijono Telemetrian siirto järjestelmä ja se koostuu asiakkaista, jotka kommunikoivat palvelimen ("välittäjä") kanssa. Asiakas voi olla sekä tilaaja (joku, joka pyytää tietoja) että julkaisija (joku, joka toimittaa tietoja). Tiedot on ryhmitelty "aiheisiin". Jos julkaisijalla on uutta tietoa, hän lähettää sen välittäjälle. Välittäjä varmistaa sitten, että jokainen asiakas, joka on tilannut tämän tietyn aiheen, saa nämä uudet tiedot.

Aiheet on järjestetty hierarkkisesti, mikä tarkoittaa, että aihe, esimerkiksi "ESP8266/Abc/Lämpötila", koostuu "ESP8266:sta, jonka alla on "Abc" ja jonka alapuolella "Lämpötila". Esimerkiksi "ESP8266/Abc/"-hierarkia voi sisältää myös "Ilmanpaineen" (ESP8266/Abc/Ilmanpaine). Jos asiakkaalla on vain "ESP8266"-tilaus, hän saa myös kaikki sen alle kuuluvat viestit!

Jos uusi asiakas rekisteröityy kiinnostuneena tietystä aiheesta, tämä asiakas saa välittömästi viimeisimmät tiedot tästä aiheesta. Tilaajan ei siis tarvitse odottaa tämän aiheen päivitystä. Hän saa aina välittömästi uusimman tunnetun tiedon.

Jos MQTT-välittäjä (mosquitto) ei ole asennettu Raspberry Pi -laitteeseen, voit silti tehdä niin:

pi@raspberry:~ $ sudo apt päivitys
pi@raspberry:~ $ sudo apt install -y mosquitto mosquitto-clients
Jos haluat käynnistää mosquitto-palvelimen automaattisesti, kun käynnistät RPi:n, kirjoita:

pi@raspberry:~ $ sudo systemctl mahdollistaa mosquitto.service
Sen verran teoriasta.

Liittäminen

Integrointi ESP8266:n ja Home-Assistantin välillä MQTT:n kautta näyttää kaavamaisesti tältä:
ESP/MQTT/HA ESP/MQTT/HA
Yhteyden muodostaminen MQTT-välittäjään ESP8266:lla, kirjasto pub-asiakas kirjoittaja Nick O'Leary
asennetaan Arduino IDE:hen (https://github.com/knolleary/pubsubclient).

Esimerkkinä käytämme projektia, jossa ESP8266 lukee BMP085 (GY-68) anturin ja lähettää tiedot MQTT-välittäjälle.

Minulla on alla olevan kuvan mukainen piiri prototyyppi 1 levy (vasemmalla) juotettu ja Sketch on 1 tai!-ESP12 merkki (oikealla) välähti.
1/!-ESP12 Proto GY68 1/!-ESP12 Proto GY68
Kun olet asentanut edellä mainitun kirjaston, alla on "Tiedosto-> Esimerkkejä” / ”Tiedosto-> Esimerkkejä" sijoitti useita esimerkkiohjelmia osoitteeseen "PubSubClient”. Tätä johdatusta varten oletamme ohjelman "mqtt-esp8266" ja kaikki rivinumerot viittaavat paikkoihin alkuperäinen Sketch!

Rivin 27 jälkeen on lisättävä seuraavat kaksi riviä:
#include 
#include
Tietenkin sinun on ensin ladattava kirjasto "Adafruit_BMP085" (https://github.com/adafruit/Adafruit-BMP085-Library) ja asenna se Arduino IDE:hen!

Rivejä 31, 32 ja 33 on muutettava asennusta varten.
31 const char* ssid = "........";
32 const char* salasana = "........";
33 const char* mqtt_server = "broker.mqtt-dashboard.com";
Mehiläinen ssid sinun on syötettävä WiFi-verkkosi nimi ja osoitteessa Salasana WiFi-verkkosi salasana. Mehiläinen mqtt_palvelin sinun on syötettävä HA-palvelimesi IP-osoite (joka HA:ssa on usein sama IP-osoite kuin HA-palvelimesi).

Rivin 36 jälkeen on lisättävä seuraava koodi:
// Liitä BMP085-anturin VCC 3,3 V:iin (EI 5,0 V!)
//Yhdistä GND maahan
// Yhdistä SCL i2c-kelloon - GPIO05:ssä
// Yhdistä SDA i2c-tietoihin - GPIO04:ssä
Adafruit_BMP085 bmp;
ja setup()-kenttään rivin 113 jälkeen lisää tämä:
jos (!bmp.begin()) >
Sketchissä on yksi tilaus aiheesta"InTopic" ja julkaisee aiheesta "OutTopic”.

Jos viesti tulee aiheeseen "inTopic", toiminto muuttuu soita takaisin()kutsutaan, jossa esimerkkiohjelman riveillä 73 - 80 viestin sisällöstä riippuen BUILTIN_LED kytkeytyy päälle tai pois päältä. En käytä tätä toimintoa ja näitä aiheita tässä viestissä.

Koska haluamme pääasiassa lähettää tietoja ESP8266:sta HA:lle tätä viestiä varten, luomme lisätoiminnon, joka näyttää tältä:
Tämä toiminto lukee BMP085:n ja tulostaa löydetyt arvot Serial Monitoriin ja julkaisee nämä tiedot. Pääaihe on "ESP8266”. Ala-aihe"thisDevID” on muokattava tuotantoympäristössä ”jossakin”, joka voi yksilöidä tämän ”anturimoduulin” (jos sinulla on useampi kuin yksi) ja sen alapuolella osoitus, joka ilmaisee tiedon tyypin (lämpötila, ilmanpaine ja korkeus). Todelliset arvot lähetetään json-merkkijonona.

Seuraavaksi muutamme loop()-funktiota seuraavasti:
void loop() > // loop()
Jos sinulla on a käyttäjätunnus ja Salasana olet määrittänyt, sinun on käytettävä näitä tietoja muodostaessasi yhteyden välittäjään. Lisää rivin 33 jälkeen seuraavat kaksi riviä:
char* mqttName = "..."; // MQTT-kirjautumisen nimi
char* mqttPasswd = "..."; // .. ja hänen salasanansa
Rivi 92 sanoo:
92 if (client.connect(clientId.c_str())) {
sinun on säädettävä se seuraavasti:
 92 if (client.connect(clientId.c_str(), mqttName, mqttPasswd)) {
Jos lataat ohjelman nyt ESP8266:een, näet Serial Monitorissa:
ESP8266 MQTT -lähtö ESP8266 MQTT -lähtö
Kirjaudu nyt sisään HA-palvelimellesi ja kirjoita:
mosquitto_sub -h  -u  -P mqttPasswd> -v -t ESP8266/#
Raspberry Pi :n MQTT-asennusta kutsutaan "mosquittoksi". Yllä olevalla komennolla käynnistämme asiakkaan, joka muodostaa yhteyden MQTT-palvelimeen määritetyllä IP-osoitteella (joka monissa tapauksissa on sama IP-osoite kuin HA-palvelimen IP-osoite) antamallasi käyttäjätunnuksella ja salasanalla. MQTT-palvelin. "-t" -vaihtoehto osoittaa, että olemme kiinnostuneita vain aiheista, jotka alkavat "ESP8266/”.

Sen jälkeen näet seuraavat tiedot:
mosquitto_sub mosquitto_sub
Nyt kun tiedämme varmasti, että ESP8266:n viestit päätyvät MQTT-välittäjälle, voimme yrittää saada HA:n poimimaan nämä arvot MQTT:stä ja esittämään ne sen käyttöliittymässä.

HA:n on tiedettävä, keneen MQTT-välittäjä ottaa yhteyttä. Siksi otamme sen configuration.yaml tallenna nämä tiedot osoitteeseen:
mqtt:
välittäjä:
Postikulut: 1883
client_id: HassIO
pysyä hengissä: 60
käyttäjätunnus:
salasana:
Minulla on kaikki ryhmäni asetukset kansiossa ./ryhmät ja kaikki anturikokoonpanoni yaml-tiedostot alikansiossa ./anturit. Minulla on se sitä varten configuration.yaml sisälsi myös nämä säännöt:
ryhmä: !include_dir_merge_named groups/
anturi: !include_dir_merge_list sensors/
kartalla ~/.homeassistant/sensors/ luodaan uusi tiedosto nimeltä esp8266.yaml jossa on tämä sisältö:
Tässä sanomme, että haluamme käyttää alustaa mqtt, että kokoonpanoissa kohteet "ESP8266_Lämpötila”, “ESP8266_Ilmanpaine" ja "ESP8266_Korkeus" tapahtuvat ja tiedot julkaisusta "ESP8266/thisDevID/xxx” pitäisi purkaa json-merkkijonosta.

Sitten lisäämme kansioon ~/.kotiavustaja/ryhmät tiedosto esp8266.yaml seuraavalla sisällöllä:
Kun Home-Assistant on käynnistetty uudelleen, voimme ihailla käyttöliittymän tietoja.
HA-etuosa HA-etuosa

Alusta: restAPI

Home-Assistant voi myös hakea tietoja muista järjestelmistä (esimerkiksi DSMR-loggerista) restAPI:n kautta.

kartalla ~/.homeassistant/sensors Sinun on esimerkiksi annettava seuraavat tiedot:
Jos restAPI kuitenkin palauttaa useita tietoja yhdellä pyynnöllä, tällä lähestymistavalla on se haittapuoli, että jos kutsut restAPI:tä jokaiselle kentälle, dataa on paljon."menee linjan yli" ja että ulkoinen järjestelmä on myös melko raskaasti kuormitettu. Valitsin toisenlaisen lähestymistavan Smart Meter -lukijan (DSMR-loggerin) lukemiseen.

Alusta: Tiedosto

DSMR-loggerin lukemiseksi valitsin Home-Assistantin poimimaan tiedot tiedostosta. Tämä tiedosto on samassa tietokoneessa, jossa Home-Assistant toimii, mikä minimoi yleiskustannukset.

Se toimii näin:
DSMR - Kotiavustaja DSMR - Kotiavustaja
Cron on Unix/Linux-daemon, joka käynnistää työt ajan mukaan. Meidän tapauksessamme hänen on käynnistettävä python-skripti "DSMR_Actual.py" joka minuutti. Komennolla 'crontab -e' (käyttäjän pääkäyttäjänä!!) voit lisätä seuraavan rivin crontabiin:
# Katso lisätietoja crontab(5) ja cron(8) manuaalisivuilta.
#
@reboot /home/homeassistant/.homeassistant/scripts/DSMR_Actual.py
#
# m h dom mon dow -komento
# joka minuutti
* * * * * /home/homeassistant/.homeassistant/scripts/DSMR_Actual.py
#
DSMR_Actual.py-ohjelmassa on seuraava sisältö:
Rivillä 5 'url' annetaan DSMR-loggerin muun API:n arvo, jota käytetään nykyisten tietojen pyytämiseen. Rivi 6 muuntaa tämän pyynnöksi DSMR-loggerille ja rivi 9 pysäyttää vastauksen
DSMR-loggeri muuttujaan 'r', joka sitten dekoodataan rivillä 10 ja laitetaan muuttujaan 'response'. Lopuksi json.dump() kirjoittaa vastauksen sisällön tiedostoon '/tmp/DSMR-Actual.json'.

/tmp/DSMR-Actual.json-tiedoston sisältö näyttää tältä:
Jotta asiat olisivat hieman selkeitä, olen sijoittanut kansioon kaikki ohjelmat ja komentosarjat, joita käytän Home-Assistantissa (HA) ~/.homeassistant/scripts/ pysähtyi.

Nyt meidän on vain tehtävä selväksi HA:lle, että he voivat poimia DSMR-loggerin tiedot tiedostosta /tmp/DSMR-Actual.json täytyy saada.

Minulla on kaikki anturit kartalla ~/kotiavustaja/anturit pysähtyi. Vuonna configuration.yaml tiedosto minulla on seuraava viite:
ryhmä: !include_dir_merge_named groups/
anturi: !include_dir_merge_list sensors/
Nämä säännöt varmistavat, että kaikki kansiossa olevat .yaml-tiedostot ryhmät/ tai anturit/ tallennetaan HA-asennuksen asetustiedostona
jäsennetty ja sisällytetty.

Yksi anturin määritystiedostoista on DSMT_Actueel.yaml. Tällä on seuraava sisältö:
Saadaksesi nämä tiedot HA-käyttöliittymään, kansioon ~/.homeassistant/groups/ tiedosto DSMR logger.yaml luodaan seuraavalla sisällöllä:
Kun Home-Assistant käynnistetään uudelleen, voimme ihailla Smart Meter -lukijan tietoja:
Home Assistant Energy Actual Home Assistant Energy Actual
Ei ole enää käytettävissä
ESP8266 ESP-01S WIFI-moduuliESP8266 WiFi-moduuli esiteltiin TTL "Serial to Internet" -moduulina sen esittelyssä. Kätevä Arduino levyjen liittämiseen Internetiin. Varastossa € 4,65
lähettänyt Verkkosivusto Willem Aandewiel (1955) on tausta elektroniikasta ja digitaalitekniikasta. Suurimman osan työelämästään hän on kuitenkin työskennellyt automaation parissa, jossa hän on työskennellyt lähes kaikilla aloilla ohjelmoijasta projektijohtajaan ja projektipäälliköön. Willem oli yksi ensimmäisistä hollantilaisista, joilla oli mikrotietokone (KIM-1, 1976) aikana, jolloin PC:tä ei ollut vielä keksitty. Nykyään hän keskittyy pääasiassa pienten mikroprosessoreilla varustettujen elektronisten piirien suunnitteluun ja tuotantoon. Hänen "elämäntehtävänsä" on saada ihmiset innostumaan omien elektronisten piirien, mikrotietokoneiden ja ohjelmoinnin tekemisestä.

Kommentit

Webwinkelkeur Kiyoh Trustpilot Opencircuit