Intégration des données de l'enregistreur ESP8266 / DSRM avec Home-Assistant

Placé sur

Plate-forme : MQTT

Le moyen le plus simple de partager des données sur un ESP8266 avec Home-Assistant (HA) consiste à passer par un courtier MQTT. Un courtier MQTT est un service qui s'exécute par défaut sur l'installation HassIO de HA. MQTT signifie Transport de télémétrie Message Queuing système et il se compose de clients qui communiquent avec un serveur (le «courtier»). Un client peut être à la fois un abonné (quelqu'un qui demande des données) et un éditeur (quelqu'un qui fournit des données). Les informations sont regroupées en "sujets". Si un éditeur a de nouvelles informations, il les envoie au courtier. Le courtier s'assure alors que chaque client qui a un abonnement à ce sujet spécifique reçoit ces nouvelles informations.

Les rubriques sont organisées de manière hiérarchique, ce qui signifie qu'une rubrique, par exemple "ESP8266/Abc/Temperature", se compose de "ESP8266, sous lequel se trouve "Abc" et sous lequel se trouve "Temperature". Par exemple, la hiérarchie « ESP8266/Abc/ » peut également contenir « Air pressure » (ESP8266/Abc/Air pressure). Si un client a un abonnement uniquement à "ESP8266", il recevra également tous les messages qui en relèvent !

Si un nouveau client s'inscrit avec un intérêt pour un certain sujet, ce client recevra immédiatement les dernières informations sur ce sujet. L'abonné n'a donc pas à attendre une mise à jour pour ce sujet. Il obtient toujours, instantanément, les dernières informations connues.

Si le broker MQTT (mosquitto) n'est pas installé sur votre Raspberry Pi , vous pouvez toujours le faire :

pi@raspberry:~ $ sudo apt mise à jour
pi@raspberry:~ $ sudo apt install -y moustique moustique-clients
Pour ensuite démarrer automatiquement le serveur moustique au démarrage de votre RPi, saisissez :

pi@raspberry:~ $ sudo systemctl enable mosquitto.service
Voilà pour la théorie.

L'intégration

L'intégration entre l'ESP8266 et Home-Assistant via MQTT ressemble schématiquement à ceci :
ESP/MQTT/HA ESP/MQTT/HA
Pour pouvoir se connecter à un broker MQTT avec l'ESP8266, la librairie pubsous-client par Nick O'Leary
être installé dans l'IDE Arduino (https://github.com/knolleary/pubsubclient).

À titre d'exemple, nous utilisons un projet dans lequel l'ESP8266 lit un capteur BMP085 (GY-68) et envoie les données au courtier MQTT.

J'ai le circuit comme indiqué dans l'image ci-dessous 1de ! prototype plaque (à gauche) soudée et le croquis sur le 1ou!-ESP12 le signe (à droite) a clignoté.
1de!-ESP12 Proto GY68 1de!-ESP12 Proto GY68
Après avoir installé la bibliothèque susmentionnée, il y a sous "Fichier->Exemples” / ”Fichier->Exemples» a placé un certain nombre d'exemples de programmes sur «PubSubClient”. Pour cette introduction, nous supposons que le programme "mqtt-esp8266” et tous les numéros de ligne font référence aux positions dans le croquis original!

Après la ligne 27, il faut ajouter les deux lignes suivantes :
#include 
#include
Bien sûr vous devez d'abord télécharger la librairie « Adafruit_BMP085 » (https://github.com/adafruit/Adafruit-BMP085-Library) et installez-le dans l'IDE Arduino !

Les lignes 31, 32 et 33 sont à modifier pour votre installation.
31 const char* ssid = ".......";
32 const car* mot de passe = ".......";
33 const char* mqtt_server = "broker.mqtt-dashboard.com" ;
Abeille ssid vous devez entrer le nom de votre réseau WiFi et à mot de passe le mot de passe de votre réseau WiFi. Abeille mqtt_server vous devez entrer l'adresse IP de votre serveur HA (qui chez HA est souvent la même adresse IP que votre serveur HA).

Après la ligne 36, le code suivant doit être ajouté :
// Connectez VCC du capteur BMP085 à 3,3 V (PAS 5,0 V !)
// Connecter GND à la masse
// Connecter SCL à l'horloge i2c - sur GPIO05
// Connecter SDA aux données i2c - sur GPIO04
Adafruit_BMP085 bmp ;
et dans setup() après la ligne 113 ajoutez ceci :
si (!bmp.begin()) >
Le croquis en a un abonnement sur le sujet"dans le sujet» et publie sur le sujet «outTopic”.

Si un message arrive sur le topic "inTopic", la fonction devient rappeler()appelé où, dans le programme d'exemple, aux lignes 73 à 80, selon le contenu du message, BUILTIN_LED est allumé ou éteint. Je n'utiliserai pas cette fonctionnalité et ces sujets dans cet article.

Parce que nous voulons principalement envoyer des données de l'ESP8266 à HA pour ce post, nous allons créer une fonction supplémentaire qui ressemble à ceci :
Cette fonction lit le BMP085 et imprime les valeurs trouvées sur le Serial Monitor et publie ces données. Le sujet principal est "ESP8266”. Le sous-thème "thisDevID" doit être modifié dans un environnement de production en "quelque chose" qui peut identifier de manière unique ce "module de capteur" (au cas où vous en auriez plus d'un) et en dessous une indication qui indique le type de données (température, pression barométrique et altitude). Les valeurs réelles sont envoyées sous forme de chaîne json.

Ensuite, nous modifions la fonction loop() comme suit :
boucle vide () > // boucle()
Si tu as un nom d'utilisateur et mot de passe mis en place, vous devez utiliser ces informations lors de la connexion au courtier. Après la ligne 33, ajoutez les deux lignes suivantes :
char* mqttName = "..." ; // nom pour la connexion MQTT
char* mqttPasswd = "..." ; // .. et son mot de passe
La ligne 92 dit :
92 si (client.connect(clientId.c_str())) {
vous devez l'ajuster comme suit:
 92 si (client.connect(clientId.c_str(), mqttName, mqttPasswd)) {
Si vous téléchargez maintenant le programme sur l'ESP8266, vous verrez dans le moniteur série :
Sortie ESP8266 MQTT Sortie ESP8266 MQTT
Connectez-vous maintenant à votre serveur HA et entrez :
moustique_sub -h  -u  -P mqttPasswd> -v -t ESP8266/#
L'installation MQTT sur le Raspberry Pi s'appelle 'mosquitto'. Avec la commande ci-dessus, nous démarrons un client qui se connecte au serveur MQTT sur l'adresse IP spécifiée (qui dans de nombreux cas sera la même adresse IP que l'adresse IP du serveur HA) avec le nom d'utilisateur et le mot de passe que vous avez entrés pour avoir mis en place le serveur MQTT. L'option "-t" indique que nous ne sommes intéressés que par les sujets commençant par "ESP8266/”.

Vous verrez alors apparaître les informations suivantes :
moustique_sub moustique_sub
Maintenant que nous savons avec certitude que les messages de l'ESP8266 se retrouvent avec le courtier MQTT, nous pouvons essayer de faire en sorte que HA extraie ces valeurs de MQTT et les présente sur son front-end.

HA a besoin de savoir qui le courtier MQTT doit contacter. C'est pourquoi nous le prenons configuration.yaml déposer ces données auprès de :
mqtt :
courtier :
affranchissement : 1883
client_id : HassIO
garder en vie : 60
nom d'utilisateur :
mot de passe :
J'ai toutes mes configurations de groupe dans le dossier ./groupes et tous mes fichiers yaml de configuration de capteur dans le sous-dossier ./capteurs. je l'ai pour ça configuration.yaml également inclus ces règles:
groupe : !include_dir_merge_named groups/
capteur : !include_dir_merge_list capteurs/
Dans la carte ~/.homeassistant/capteurs/ créons un nouveau fichier appelé esp8266.yaml qui a ce contenu :
En cela, nous disons que nous voulons utiliser la plate-forme mqtt, que dans les configurations les éléments "ESP8266_Température”, “ESP8266_Pression d'air" et "ESP8266_Hauteur" se produire et les données de la publication "ESP8266/thisDevID/xxx” doit être extrait de la chaîne json.

Ensuite, nous ajoutons dans le dossier ~/.homeassistant/groupes le fichier esp8266.yaml avec le contenu suivant :
Après avoir redémarré Home-Assistant, nous pouvons admirer les données dans le Front-end.
Front-end haute disponibilité Front-end haute disponibilité

Plate-forme : restAPI

Home-Assistant peut également récupérer des données d'autres systèmes (par exemple à partir de l'enregistreur DSMR) via une restAPI.

Dans la carte ~/.homeassistant/capteurs Par exemple, vous devez saisir les informations suivantes :
Cependant, si la restAPI renvoie plusieurs données avec une seule requête, cette approche présente l'inconvénient que si vous appelez la restAPI pour chaque champ, il y a beaucoup de données.va au-delà de la ligne" et que le système externe est également assez chargé. J'ai opté pour une approche différente pour la lecture du lecteur Smart Meter (enregistreur DSMR).

Plate-forme : fichier

Pour lire l'enregistreur DSMR, j'ai choisi de demander à Home-Assistant d'extraire les données d'un fichier. Ce fichier se trouve sur le même ordinateur sur lequel s'exécute Home-Assistant, ce qui minimise la surcharge.

Cela fonctionne comme ceci :
DSMR - Assistant à domicile DSMR - Assistant à domicile
Cron est le démon Unix/Linux qui démarre les travaux en fonction du temps. Dans notre cas, il doit démarrer le script python "DSMR_Actual.py" toutes les minutes. Avec la commande 'crontab -e' (en tant qu'utilisateur root !!), vous pouvez ajouter la ligne suivante dans crontab :
# Pour plus d'informations, consultez les pages de manuel de crontab(5) et cron(8)
#
@reboot /home/homeassistant/.homeassistant/scripts/DSMR_Actual.py
#
# commande m h dom mon dow
# chaque minute
* * * * * /home/homeassistant/.homeassistant/scripts/DSMR_Actual.py
#
Le programme DSMR_Actual.py a le contenu suivant :
À la ligne 5, 'url' reçoit la valeur de l'API restante de l'enregistreur DSMR utilisé pour demander les données actuelles. La ligne 6 convertit cela en une demande à l'enregistreur DSMR et la ligne 9 arrête la réponse de
l'enregistreur DSMR dans la variable 'r' qui est ensuite décodée à la ligne 10 et mise dans la variable 'response'. Enfin, json.dump() écrit le contenu de la réponse dans le fichier '/tmp/DSMR-Actual.json'.

Le contenu du fichier '/tmp/DSMR-Actual.json' ressemble à ceci :
Pour garder les choses un peu claires, j'ai placé tous les programmes et scripts que j'utilise pour Home-Assistant (HA) dans le dossier ~/.homeassistant/scripts/ arrêté.

Maintenant, nous devons juste indiquer clairement à HA qu'ils peuvent extraire les données de l'enregistreur DSMR à partir du fichier /tmp/DSMR-Actual.json doit avoir.

J'ai tous les capteurs dans la carte ~/homeassistant/capteurs arrêté. Dans le configuration.yaml fichier j'ai la référence suivante :
groupe : !include_dir_merge_named groups/
capteur : !include_dir_merge_list capteurs/
Ces règles garantissent que tous les fichiers .yaml qui se trouvent dans le dossier groupes/ ou capteurs/ être enregistré en tant que fichier de configuration de l'installation HA
analysé et enregistré.

L'un des fichiers de configuration du capteur est DSMT_Actueel.yaml. Celui-ci a le contenu suivant :
Pour obtenir réellement ces données sur le front-end de HA, le dossier ~/.homeassistant/groups/ un fichier Enregistreur DSMR.yaml sont créés avec le contenu suivant :
Avec le redémarrage de Home-Assistant, nous pouvons admirer les données du lecteur Smart Meter :
Home Assistant Énergie Réelle Home Assistant Énergie Réelle
N'est plus disponible
Module Wi-Fi ESP8266 ESP-01SLe module WiFi ESP8266 a été présenté comme un module TTL « Serial to Internet » lors de son introduction. Utile pour connecter les cartes Arduino à Internet. Disponible immédiatement € 4,50
Posté par Site Internet Willem Aandewiel (1955) a une formation en électronique et en techniques numériques. Cependant, la majeure partie de sa vie professionnelle, il a travaillé dans l'automatisation où il a travaillé dans à peu près toutes les disciplines, du programmeur au chef de projet et au chef de projet. Willem a été l'un des premiers Néerlandais à posséder un micro-ordinateur (KIM-1, 1976) à une époque où le PC n'avait pas encore été inventé. Aujourd'hui, il s'occupe principalement de la conception et de la production de petits circuits électroniques à microprocesseurs. Sa «mission dans la vie» est de rendre les gens enthousiastes à l'idée de fabriquer leurs propres circuits électroniques, micro-ordinateurs et programmes.

Commentaires

Webwinkelkeur Kiyoh Trustpilot Opencircuit