La suite 'enez'

enez est une suite d’outils logiciels permettant d’enregistrer et de restituer tous type de données issues de capteurs divers.
Les données gérées par enez doivent être au format json et sont publiées sur un broker MQTT. Ces données sont ientifiées par un sujet (topic), et ainsi rendues disponibles sous forme de flux.
Un premier outil, le service enezKreiz, présente une interface web pour identifier les flux à traiter et enregistrer. Ce même service permet de les afficher de façon générale, ou de les délivrer à la demande.
Il s’agit d’un système de datalogging autonome pouvant fonctionner en réseau local, qui n’a pas besoin d’être connecté à l’Internet.
Les différents services de la suite peuvent être hébergés sur une unique machine, ou répartis sur plusieurs machines.


Principe

Après avoir identifié les flux de données à traiter, c’est à dire le sujet (topic) MQTT, il est possible de définir les cartes qui apparaitront sur le tableau de bord afin de donner un accès aux écrans par défaut.
Outre les cartes permettant d’avoir accès aux courbes de données, il est possible à des outils tiers d’accèder aux données via une API http.
Enfin, la disponibilité des flux MQTT permet à d’autres outils indépendants d’appliquer éventuellement un traitement particulier selon chaque flux.


Mode de fonctionnement

Sur un ordinateur, sur un Raspberry-Pi par exemple, ou sur un ou plusieurs serveurs mis en réseau, en fonction du volume de données, sont installés les services suivants :

  • Un système de gestion de base de données (SGBD) pour la persistance des flux. Ici, il s’agit de PostgreSQL.
  • Un broker MQTT pour la circulation et la distribution des données. Mosquitto en l’occurrence.
  • Le service web enezKreiz écrit en python permet de paramétrer tous les autres services enez et de présenter une API afin de servir les historiques de données, soit en les affichant basiquement sur un graphique, soit sous forme d’export.
    L’API fournie par enezKreiz est particulièrement utilisable par Node-Red.
  • Le service enezDiaz, écrit en python, est chargé de récupérer les flux de données selon les paramètres établis par enezKreiz et de les enregistrer dans la base de données PostgresQL.
  • Service optionnel enezKenstroll, écrit en python, permet d’effectuer automatiquement des calculs de regroupement temporel selon les paramètres établis par enezKreiz et de les enregistrer.
  • Si besoin, le service Node-red peut gérer d’autres affichages. Il peut éventuellement déclencher et envoyer des commandes.
A noter

Ces différents services peuvent être installés sur des machines différentes afin par exemple de répartir les charges.

Au niveau des données, il y a 2 contraintes :

  • Les données doivent être au format json
  • Toutes les données de tous les capteurs doivent impérativement être publiée sur le broker MQTT.
    Ces 2 conditions permettent en fait de simplifier grandement les choses, d’avoir une souplesse incomparable et d’être relativement universel au niveau des capteurs.
    Les données circulent sur un réseau Ethernet, que ce soit du filaire, du WiFi, du GPRS, du LoRa ou autre n’a aucune importance.

Les capteurs ont donc une certaine autonomie, en terme de connexion.
Il est possible d’utiliser des Arduino, avec une carte Ethernet.
Une autre carte bien plus pratique est l’ESP8266 ou l’ESP32, éventuellement configurable via un écran de configuration en utilisant Tasmota.
Ces microcontrôleurs sont entre autre capables de lire les trames téléinfos (mode historique ou mode standard en 9600 bps) et de les traiter afin de publier sur le réseau les informations utiles, formatées en json.
Il est aussi possible d’avoir des capteurs connectés à des Arduino nano, eux mêmes connectés en USB à un Rasberry afin de pousser les infos sur le réseau Ethernet filaire.
Idem pour les compteurs à impulsions. L’Arduino traite les impulsions et envoie toutes les x minutes la consommation en Wh. Si la communication se passe via le port USB, c’est le service enezLusk qui réceptionne ces données afin de la publier en MQTT.
D’autres modules, des capteurs environnementaux, fonctionnent sur le même principe, ainsi que des systèmes de suivi de production de chaleur solaire par exemple, …

Remarque

enez est capable de traiter les données envoyées par Tasmota, qui est un système alternatif open source installable sur de nombreux dispositifs, comme les Sonoff, les Shelly, ou les ESP.


Résumé des étapes

Donc, pour résumer, à partir de l’appareil émetteur de données, les différentes étapes sont :

  • Le capteur physique : Compteur Linky, capteur de température, humidité, puissance électrique, particules fines, concentration chimique, paramètres complets d’une pompe à chaleur, …
  • Lecture du capteur et envoie des données vers un broker MQTT (Mise en réseau) grâce à un agent logiciel : ESPxxx, Pi, Arduino avec son Shield Ehternet ou connecté à un Pi…
  • Broker MQTT pour centraliser les données, installé sur un Pi ou tout autre ordinateur sous Linux.
  • Services enez pour traiter les données, qui peuvent aussi être le même matériel que pour l’étape précédente si c’est au moins un Pi.
  • Base de données, qui peut encore être le même matériel que pour l’étape précédente (Pi).
  • Services enez pour diffuser les données.

Les services

Chaque problèmatique relative aux données est solutionnée par un service logiciel indépendant.
Outre les services évoqué plus haut, on peut trouver les services suivants :

  • Un service un peu particulier : enezNTP qui permet l’horodatage des données
  • enezDigenvez : Republication de façon isolée sur un topic défini des données reçues au format json
  • Le service enezEeunTredan se charge de lire les données de téléinformation issues des compteurs électronique Enedis de type Linky.
  • enezEeunTredans : Lecture d’un port USB pouvant recevoir des données de téléinformation de plusieurs compteurs
  • enezEmgefreek : Automatisation d’actions basées sur des données publiées sur le broker MQTT
  • enezGremva : Service web proposant des pages dédiées à la surveillance et au contrôle d’une centrale photovoltaïque EasySunSystem.
  • enezGwenan : Traduction d’URLs vers des messages MQTT
  • enezKan : Permetre au système “enez” d’envoyer des SMS via une passerelle 4G Mkrotik
  • enezKarg : Afin de calculer régulièrement l’état de charge de la batterie EasySunSystem
  • enezKrogen : Lecture et mise au format json des données publiées par un Shelly3EM
  • enezLusk : Lecture et publication MQTT des données json arrivant sur un port série
  • enezMar : IFTTT like service on MQTT messages
  • enezMust : Lecture des données ModBus de la centrale 5K
  • enezPiGwask : Web interface for configuring GPIO collecting service via enezDiaz and collecting GPIO data (capteur de pression)
  • enezPiGwrez : Lecture d’un bus de capteur de température DS18B20
  • enezPiUntu : Lecture d’une pince ampéremètrique à courant continu sur le port GPIO du raspberryPi
  • enezSan : Subscription to external brokers to republish messages on the enez mqtt broker
  • enezSkramm : Extraction d’une donnée spécifique d’un document json publié sur le broker MQTT afin de la publier sur un afficheur.
  • enezTredan : Lecture de la téléinformation Enedis via un Arduino
  • enezTredans : Lecture de la téléinformation Enedis issue de plusieurs compteur, via un Arduino
  • enezVeDir : Lecture du bus VE.Direct des appareils Victron et compatibles

Licence

Les sources de ce service sont disponibles sur Codeberg selon la licence CC BY-SA 4.0. by-sa by-sa