Integrointi ESP8266 / DSRM-loggerin tiedot Home-Assistantin kanssa
Asetettu päälleAlusta: 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:
Jos haluat käynnistää mosquitto-palvelimen automaattisesti, kun käynnistät RPi:n, kirjoita:
pi@raspberry:~ $ sudo apt päivitys
pi@raspberry:~ $ sudo apt install -y mosquitto mosquitto-clients
pi@raspberry:~ $ sudo systemctl mahdollistaa mosquitto.serviceSen verran teoriasta.
Liittäminen
Integrointi ESP8266:n ja Home-Assistantin välillä MQTT:n kautta näyttää kaavamaisesti tältä: 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.
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
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ä:
Rivejä 31, 32 ja 33 on muutettava asennusta varten.
Rivin 36 jälkeen on lisättävä seuraava koodi:
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ä:
Rivin 27 jälkeen on lisättävä seuraavat kaksi riviä:
#includeTietenkin sinun on ensin ladattava kirjasto "Adafruit_BMP085" (https://github.com/adafruit/Adafruit-BMP085-Library) ja asenna se Arduino IDE:hen!
#include
Rivejä 31, 32 ja 33 on muutettava asennusta varten.
31 const char* ssid = "........";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).
32 const char* salasana = "........";
33 const char* mqtt_server = "broker.mqtt-dashboard.com";
Rivin 36 jälkeen on lisättävä seuraava koodi:
// Liitä BMP085-anturin VCC 3,3 V:iin (EI 5,0 V!)ja setup()-kenttään rivin 113 jälkeen lisää tämä:
//Yhdistä GND maahan
// Yhdistä SCL i2c-kelloon - GPIO05:ssä
// Yhdistä SDA i2c-tietoihin - GPIO04:ssä
Adafruit_BMP085 bmp;
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:
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 nimiRivi 92 sanoo:
char* mqttPasswd = "..."; // .. ja hänen salasanansa
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ö
Kirjaudu nyt sisään HA-palvelimellesi ja kirjoita:
Sen jälkeen näet seuraavat tiedot:
mosquitto_sub -hRaspberry 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/”.-u -P mqttPasswd> -v -t ESP8266/#
Sen jälkeen näet seuraavat tiedot:
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:
HA:n on tiedettävä, keneen MQTT-välittäjä ottaa yhteyttä. Siksi otamme sen configuration.yaml tallenna nämä tiedot osoitteeseen:
mqtt: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:
välittäjä:
Postikulut: 1883
client_id: HassIO
pysyä hengissä: 60
käyttäjätunnus:
salasana:
ryhmä: !include_dir_merge_named groups/kartalla ~/.homeassistant/sensors/ luodaan uusi tiedosto nimeltä esp8266.yaml jossa on tämä sisältö:
anturi: !include_dir_merge_list sensors/
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ä:
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
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
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.DSMR_Actual.py-ohjelmassa on seuraava sisältö:
#
@reboot /home/homeassistant/.homeassistant/scripts/DSMR_Actual.py
#
# m h dom mon dow -komento
# joka minuutti
* * * * * /home/homeassistant/.homeassistant/scripts/DSMR_Actual.py
#
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ä:
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:
jäsennetty ja sisällytetty.
Yksi anturin määritystiedostoista on DSMT_Actueel.yaml. Tällä on seuraava sisältö:
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/Nämä säännöt varmistavat, että kaikki kansiossa olevat .yaml-tiedostot ryhmät/ tai anturit/ tallennetaan HA-asennuksen asetustiedostona
anturi: !include_dir_merge_list sensors/
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
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