Integrazione dati logger ESP8266 / DSRM con Home-Assistant

Posto su

Piattaforma: MQTT

Il modo più semplice per condividere i dati su un ESP8266 con Home-Assistant (HA) è tramite un broker MQTT. Un broker MQTT è un servizio che viene eseguito sull'installazione HassIO di HA per impostazione predefinita. MQTT sta per Trasporto di telemetria di Accodamento messaggi sistema ed è costituito da client che comunicano con un server (il 'broker'). Un cliente può essere sia un sottoscrittore (qualcuno che richiede dati) che un editore (qualcuno che fornisce dati). Le informazioni sono raggruppate in "argomenti". Se un editore ha nuove informazioni, le invia al broker. Il broker garantisce quindi che ogni cliente che ha un abbonamento a questo specifico argomento riceva queste nuove informazioni.

Gli argomenti sono organizzati gerarchicamente, il che significa che un argomento, ad esempio “ESP8266/Abc/Temperature”, è composto da “ESP8266, sotto il quale c'è “Abc” e sotto il quale c'è “Temperature”. Ad esempio, la gerarchia "ESP8266/Abc/" può contenere anche "Air pressure" (ESP8266/Abc/Air pressure). Se un cliente ha un abbonamento solo a "ESP8266", riceverà anche tutti i messaggi che rientrano in esso!

Se un nuovo cliente si registra con un interesse per un determinato argomento, questo cliente riceverà immediatamente le ultime informazioni su questo argomento. L'abbonato quindi non deve attendere un aggiornamento per questo argomento. Riceve sempre, istantaneamente, le ultime informazioni conosciute.

Se il broker MQTT (mosquitto) non è installato sul tuo Raspberry Pi , puoi comunque farlo:

pi@raspberry:~ $ sudo apt update
pi@raspberry:~ $ sudo apt install -y mosquitto mosquitto-clients
Per avviare automaticamente il server mosquitto all'avvio del tuo RPi, inserisci:

pi@raspberry:~ $ sudo systemctl abilita mosquitto.service
Questo per quanto riguarda la teoria.

Integrazione

L'integrazione tra ESP8266 e Home-Assistant tramite MQTT si presenta schematicamente così:
ESP/MQTT/HA ESP/MQTT/HA
Per essere in grado di connettersi a un broker MQTT con ESP8266, la libreria pubsubclient di Nick O'Leary
essere installato nell'IDE Arduino (https://github.com/knolleary/pubsubclient).

Ad esempio, utilizziamo un progetto in cui ESP8266 legge un sensore BMP085 (GY-68) e invia i dati al broker MQTT.

Ho il circuito come mostrato nella foto qui sotto 1 di! prototipo piastra (a sinistra) saldata e lo schizzo sul 1o!-ESP12 segno (a destra) lampeggiava.
1 di!-ESP12 Proto GY68 1 di!-ESP12 Proto GY68
Dopo aver installato la suddetta libreria, ci sono sotto “File->Esempi” / ”File->Esempi” ha inserito una serie di programmi di esempio in “PubSubClient”. Per questa introduzione assumiamo il programma “mqtt-esp8266” e tutti i numeri di riga si riferiscono alle posizioni in lo schizzo originale!

Dopo la riga 27 vanno aggiunte le seguenti due righe:
#include 
#include
Ovviamente devi prima scaricare la libreria “Adafruit_BMP085” (https://github.com/adafruit/Adafruit-BMP085-Library) e installalo nell'IDE Arduino !

Le righe 31, 32 e 33 devono essere modificate per l'installazione.
31 const char* ssid = ".......";
32 const char* password = ".......";
33 const char* mqtt_server = "broker.mqtt-dashboard.com";
Ape ssid devi inserire il nome della tua rete WiFi e at parola d'ordine la password della tua rete Wi-Fi. Ape mqtt_server devi inserire l'indirizzo IP del tuo server HA (che in HA è spesso lo stesso indirizzo IP del tuo server HA).

Dopo la riga 36 va aggiunto il seguente codice:
// Collega VCC del sensore BMP085 a 3,3 V (NON 5,0 V!)
//Collega GND a terra
// Collega SCL all'orologio i2c - su GPIO05
// Collega SDA ai dati i2c - su GPIO04
Adafruit_BMP085bmp;
e in setup() dopo la riga 113 aggiungi questo:
se (!bmp.begin()) >
Lo schizzo ne ha uno sottoscrizione a questo proposito "inArgomento” e pubblica sull'argomento “outTopic”.

Se arriva un messaggio sull'argomento “inTopic”, la funzione diventa richiamare()chiamato dove, nel programma di esempio, nelle righe da 73 a 80, a seconda del contenuto del messaggio, BUILTIN_LED è acceso o spento. Non userò questa funzionalità e questi argomenti in questo post.

Poiché vogliamo principalmente inviare dati da ESP8266 a HA per questo post, creeremo una funzione aggiuntiva simile a questa:
Questa funzione legge il BMP085 e stampa i valori trovati sul monitor seriale e pubblica questi dati. Il tema principale è “ESP8266”. Il sottotema “thisDevID” deve essere modificato in un ambiente di produzione in “qualcosa” che possa identificare univocamente questo 'modulo sensore' (nel caso ne abbiate più di uno) e sotto di esso un'indicazione che indichi il tipo di dati (Temperatura, Pressione Barometrica e Altitudine). I valori effettivi vengono inviati come una stringa json.

Successivamente, modifichiamo la funzione loop() come segue:
ciclo vuoto() > // ciclo continuo()
Se hai un nome utente E parola d'ordine è stato impostato, è necessario utilizzare queste informazioni durante la connessione al broker. Dopo la riga 33, aggiungi le seguenti due righe:
char* mqttName = "..."; // nome per l'accesso MQTT
char* mqttPasswd = "..."; // .. e la sua password
La riga 92 dice:
92 if (client.connect(clientId.c_str())) {
devi regolarlo come segue:
 92 if (client.connect(clientId.c_str(), mqttName, mqttPasswd)) {
Se ora carichi il programma su ESP8266, vedrai nel monitor seriale:
Uscita MQTT ESP8266 Uscita MQTT ESP8266
Ora accedi al tuo server HA e inserisci:
mosquitto_sub -h  -u  -P mqttPasswd> -v -t ESP8266/#
L'installazione MQTT sul Raspberry Pi si chiama 'mosquitto'. Con il comando sopra avviamo un client che si connette al server MQTT sull'indirizzo IP specificato (che in molti casi sarà lo stesso indirizzo IP dell'indirizzo IP del server HA) con il nome utente e la password che hai inserito per aver impostato il server MQTT. L'opzione "-t" indica che siamo interessati solo agli argomenti che iniziano con "ESP8266/”.

Verranno quindi visualizzate le seguenti informazioni:
zanzara_sub zanzara_sub
Ora che sappiamo per certo che i messaggi dell'ESP8266 finiscono con il broker MQTT, possiamo provare a fare in modo che HA estragga questi valori da MQTT e li presenti sul suo front-end.

HA deve sapere chi deve contattare il broker MQTT. Ecco perché lo prendiamo configurazione.yaml depositare questi dati presso:
mqtt:
broker:
affrancatura: 1883
client_id: HassIO
mantenere in vita: 60
nome utente:
password:
Ho tutte le mie configurazioni di gruppo nella cartella ./gruppi e tutti i miei file yaml di configurazione del sensore nella sottocartella ./sensori. Ce l'ho per quello configurazione.yaml includeva anche queste regole:
gruppo: !include_dir_merge_named groups/
sensore: !include_dir_merge_list sensori/
Nella mappa ~/.homeassistant/sensori/ creiamo un nuovo file chiamato esp8266.yaml che ha questo contenuto:
In questo diciamo che vogliamo usare la piattaforma mqtt, che all'interno delle configurazioni le voci “ESP8266_Temperatura”, “ESP8266_Pressione dell'aria" E "ESP8266_Altezza” si verificano e i dati dalla pubblicazione “ESP8266/thisDevID/xxx” dovrebbe essere estratto dalla stringa json.

Quindi aggiungiamo nella cartella ~/.homeassistant/gruppi il file esp8266.yaml con il seguente contenuto:
Dopo aver riavviato Home-Assistant possiamo ammirare i dati nel Front-end.
Front-end HA Front-end HA

Piattaforma: restAPI

Home-Assistant può anche recuperare i dati da altri sistemi (ad esempio dal logger DSMR) tramite una restAPI.

Nella mappa ~/.homeassistant/sensors Ad esempio, è necessario inserire le seguenti informazioni:
Tuttavia, se la restAPI restituisce più dati con una sola richiesta, questo approccio ha lo svantaggio che se chiami la restAPI per ogni campo, ci sono molti dati".va oltre la linea" e che anche il sistema esterno è piuttosto pesantemente caricato. Ho optato per un approccio diverso per la lettura del lettore Smart Meter (logger DSMR).

Piattaforma: File

Per leggere il logger DSMR, ho scelto di fare in modo che Home-Assistant estraesse i dati da un file. Quel file si trova sullo stesso computer che esegue anche Home-Assistant, che riduce al minimo il sovraccarico.

Funziona così:
DSMR - Assistente domestico DSMR - Assistente domestico
Cron è il demone Unix/Linux che avvia i lavori in base al tempo. Nel nostro caso deve avviare lo script python "DSMR_Actual.py" ogni minuto. Con il comando 'crontab -e' (come utente root!!) puoi aggiungere la seguente riga in crontab:
# Per maggiori informazioni vedere le pagine man di crontab(5) e cron(8)
#
@reboot /home/homeassistant/.homeassistant/scripts/DSMR_Actual.py
#
# m h comando dom mon dow
# ogni minuto
* * * * * /home/homeassistant/.homeassistant/scripts/DSMR_Actual.py
#
Il programma DSMR_Actual.py ha i seguenti contenuti:
Nella riga 5 'url' ottiene il valore dell'API rest del logger DSMR utilizzato per richiedere i dati correnti. La riga 6 converte questo in una richiesta al logger DSMR e la riga 9 interrompe la risposta da
il registratore DSMR nella variabile 'r' che viene quindi decodificata nella riga 10 e inserita nella variabile 'response'. Infine, json.dump() scrive il contenuto della risposta nel file '/tmp/DSMR-Actual.json'.

Il contenuto del file "/tmp/DSMR-Actual.json" è simile al seguente:
Per mantenere le cose un po' chiare, ho messo tutti i programmi e gli script che uso per Home-Assistant (HA) nella cartella ~/.homeassistant/script/ fermato.

Ora non ci resta che chiarire ad HA che vogliono estrarre i dati dal logger DSMR dal file /tmp/DSMR-Actual.json deve ottenere.

Ho tutti i sensori nella mappa ~/homeassistant/sensori fermato. Nel configurazione.yaml file ho il seguente riferimento:
gruppo: !include_dir_merge_named groups/
sensore: !include_dir_merge_list sensori/
Queste regole assicurano che tutti i file .yaml presenti nella cartella gruppi/ O sensori/ essere salvato come file di configurazione dell'installazione HA
analizzato e incluso.

Uno dei file di configurazione del sensore è DSMT_Actueel.yaml. Questo ha il seguente contenuto:
Per ottenere effettivamente questi dati sul front-end HA, il file folder ~/.homeassistant/gruppi/ un file Logger DSMR.yaml sono creati con il seguente contenuto:
Con il riavvio di Home-Assistant possiamo ammirare i dati dal lettore Smart Meter:
Assistente domiciliare Energia attuale Assistente domiciliare Energia attuale
Non più disponibile
Modulo WIFI ESP8266 ESP-01SIl modulo WiFi ESP8266 è stato presentato al momento della sua introduzione come modulo TTL "Serial to Internet". Utile per connettere le schede Arduino a Internet. disponibile € 4,60
Pubblicato da Sito web Willem Aandewiel (1955) ha un background in elettronica e tecniche digitali. Tuttavia, la maggior parte della sua vita lavorativa ha lavorato nell'automazione, dove ha lavorato in quasi tutte le discipline, dal programmatore al project leader e al project manager. Willem è stato uno dei primi olandesi con un microcomputer (KIM-1, 1976) in un'epoca in cui il PC doveva ancora essere inventato. Attualmente si occupa principalmente della progettazione e produzione di piccoli circuiti elettronici a microprocessore. La sua "missione nella vita" è rendere le persone entusiaste di creare i propri circuiti elettronici, microcomputer e programmazione.

Commenti

Webwinkelkeur Kiyoh Trustpilot Opencircuit