Intégration des données de l'enregistreur ESP8266 / DSRM avec Home-Assistant
Placé surPlate-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 :
Pour ensuite démarrer automatiquement le serveur moustique au démarrage de votre RPi, saisissez :
pi@raspberry:~ $ sudo apt mise à jour
pi@raspberry:~ $ sudo apt install -y moustique moustique-clients
pi@raspberry:~ $ sudo systemctl enable mosquitto.serviceVoilà 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
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é.
ê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
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 :
Les lignes 31, 32 et 33 sont à modifier pour votre installation.
Après la ligne 36, le code suivant doit être ajouté :
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 :
Après la ligne 27, il faut ajouter les deux lignes suivantes :
#includeBien 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 !
#include
Les lignes 31, 32 et 33 sont à modifier pour votre installation.
31 const char* ssid = ".......";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).
32 const car* mot de passe = ".......";
33 const char* mqtt_server = "broker.mqtt-dashboard.com" ;
Après la ligne 36, le code suivant doit être ajouté :
// Connectez VCC du capteur BMP085 à 3,3 V (PAS 5,0 V !)et dans setup() après la ligne 113 ajoutez ceci :
// Connecter GND à la masse
// Connecter SCL à l'horloge i2c - sur GPIO05
// Connecter SDA aux données i2c - sur GPIO04
Adafruit_BMP085 bmp ;
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 :
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 MQTTLa ligne 92 dit :
char* mqttPasswd = "..." ; // .. et son mot de passe
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
Connectez-vous maintenant à votre serveur HA et entrez :
Vous verrez alors apparaître les informations suivantes :
moustique_sub -hL'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/”.-u -P mqttPasswd> -v -t ESP8266/#
Vous verrez alors apparaître les informations suivantes :
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 :
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 :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:
courtier :
affranchissement : 1883
client_id : HassIO
garder en vie : 60
nom d'utilisateur :
mot de passe :
groupe : !include_dir_merge_named groups/Dans la carte ~/.homeassistant/capteurs/ créons un nouveau fichier appelé esp8266.yaml qui a ce contenu :
capteur : !include_dir_merge_list capteurs/
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 :
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é
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
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)Le programme DSMR_Actual.py a le contenu suivant :
#
@reboot /home/homeassistant/.homeassistant/scripts/DSMR_Actual.py
#
# commande m h dom mon dow
# chaque minute
* * * * * /home/homeassistant/.homeassistant/scripts/DSMR_Actual.py
#
À 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 :
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 :
analysé et enregistré.
L'un des fichiers de configuration du capteur est DSMT_Actueel.yaml. Celui-ci a le contenu suivant :
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/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
capteur : !include_dir_merge_list capteurs/
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
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