Seconde solution pour suivre sa consommation d’eau (SWDE ou autre)

Classé dans : Capteur, Home Assistant, Jeedom | 9

En 2020, j’avais écrit un article sur une solution domotique pour suivre sa consommation d’eau. Cette solution était destinée à une certaine catégorie de compteur à savoir celle disposant d’un demi-disque métallique qui tournait lors de la consommation d’eau : https://www.objetsconnectes.be/2020/07/15/capteur-lj18a3-nodemcu-esp8266-compteur-eau-swde/

La solution fonctionne mais n’est pas parfaite. Tout d’abord, il y a quelques litres “parasites”. Il est difficile d’être parfaitement aligné entre la réalité et ce qui est mesuré principalement parce que le placement du capteur est très sensible. Le mien avait bougé un peu et, alors que j’étais loin de chez moi, il s’est mis à détecter une consommation d’eau permanente. Revenus en urgence, ce n’était qu’un bug et cela m’a rassuré mais cela m’a fait perdre du temps.

Au même moment que ce bug se produisait (à répétition), un charmant lecteur (Vincent) m’orientait vers une autre solution à base d’un capteur original.

Le principe de l’ESP32-CAM

Le principe du capteur est simple et repose sur le module ESP32-CAM c’est-à-dire un micro-contrôleur intégrant une caméra vidéo et une carte microSD. L’ESP32-CAM photographie régulièrement le compteur d’eau et effectue une reconnaissance de caractères pour déterminer les index de consommation. Ce faisant, selon la fréquence choisie pour la photo, on peut en déduire une consommation sur la période écoulée.

AI-on-the-edge-device-compteur-eau-3049

Pour réaliser ce capteur de la façon la plus simple, le matériel nécessaire est :

– un ESP32-CAM :
https://www.amazon.fr/XTVTX-ESP32-CAM-Bluetooth-ESP32-CAM-MB-compatible/dp/B093GSCBWJ/ref=sr_1_1?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=1S7U9HQ7087K4&keywords=B093GSCBWJ&qid=1705480081&sprefix=b093gscbwj%2Caps%2C424&sr=8-1

– une carte microSD :
https://www.amazon.fr/Intenso-3433470-M%C3%A9moire-microSDHC-Adaptateur/dp/B00YMZC944/ref=sr_1_1?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=1TGQAI7B6OXD9&keywords=B00YMZC944&qid=1705480124&sprefix=b00ymzc944%2Caps%2C75&sr=8-1

– un support à imprimer avec une imprimante 3D (il convient de trouver le bon support, adapté à son compteur. Un exemple se trouve ici : https://www.thingiverse.com/thing:4845508).

Il existe plusieurs sortes d’ESP32-CAM et plusieurs sortes de cartes microSD. En général la compatibilité est bonne et presque toutes les cartes fonctionneront avec presque tous les ESP32-CAM. Pour ceux qui préfèrent éviter le moindre risque, les deux ci-dessus fonctionnent parfaitement ensemble.

La remontée des données se fait in fine via le protocole MQTT, un protocole bien implanté dans les box domotique (dont Jeedom et Home Assistant).

Au final, la solution coûte pour environ 35 euros.

La réalisation du capteur

Le placement physique

On commence par insérer la carte microSD sur l’ESP32-CAM (en suivant le sens de la flèche et avec l’inscription vers le haut).

AI-on-the-edge-device-compteur-eau-3050

La seconde étape est un peu plus complexe. La caméra doit être installée sur l’ESP32-CAM mais, auparavant, il faut enlever un petit point de colle. Car, pour une raison que j’ignore, ce petit point de colle a été ajouté pour empêcher de régler le focus. Or, comme il s’agit de faire une photo à 10 cm, un réglage du focus est nécessaire. 

Une fois le point de colle enlevé, il faut tourner la caméra d’un quart de tour dans le sens contraire des aiguilles d’une montre. Attention toutefois que cette opération est un peu délicate et rend le produit hors garantie.

AI-on-the-edge-device-compteur-eau-3051

On connecte ensuite la caméra OV2640 sur l’ESP32-CAM en enfichant le ruban connecteur :

AI-on-the-edge-device-compteur-eau-3052

Et on n’oublie pas d’enlever le film protecteur de l’objectif.

Ce capteur se place sur un support que l’on peut imprimer en 3D. Je n’avais pas d’imprimante 3D et donc merci à Vincent de me l’avoir imprimé.

AI-on-the-edge-device-compteur-eau-3047

Mais hélas, ce support était trop petit : j’ai du le cisailler pour élargir la base et l’emplacement prévu pour l’ESP32-CAM était trop réduit en hauteur. 

ESP32-CAM - Watermeter -cisaillement fixation

In fine, avec du tape, cela tient mais je conseille la plus grande vigilance au moment de mesurer son compteur et de choisir les dimensions pour l’impression 3D.

Le software sur l’ESP32-CAM

Les différentes manières d’installer un firmware sont très bien décrites sur cette page: https://jomjol.github.io/AI-on-the-edge-device-docs/Installation/#2-firmware

Autant choisir, si possible, la facilité et c’est donc la solution “Web Installer” qui a retenu ma préférence.

On commence par alimenter l’ESP32-CAM à l’aide d’un câble USB côté PC et micro USB côté ESP32-CAM.

AI-on-the-edge-device-compteur-eau-3053

Via le navigateur internet Chrome, on se connecte au site Web Installer et on clique sur le bouton “CONNECT”.

AI-on-the-edge-device-compteur-eau-6

Pour que cela fonctionne, il faut que le PC dispose d’un port série ou qu’un driver permette de transformer un port USB en port série. Il faudra donc être sûr de trouver quelque chose comme ceci dans “Device Manager”.

AI-on-the-edge-device-compteur-eau-3055

Si le port série n’est pas bien installé, alors c’est un message d’erreur qui sera au rendez-vous:

AI-on-the-edge-device-compteur-eau-3057

Par contre, si le port série fonctionne, Chrome permet de choisir celui à utiliser (USB Serial (COM4) ici). Un clic sur le bouton “Connexion” démarre la procédure d’installation du firmware.

AI-on-the-edge-device-compteur-eau-3054

Le site demande la confirmation pour l’installation de AI-on-the-edge (version v15.1.0) sur l’ESP32-CAM:

AI-on-the-edge-device-compteur-eau-3056

A la fin, si tout s’est bien passé, un message de confirmation de bonne fin apparaît. On peut redémarrer l’ESP32-CAM.

Configuration via WIFI

Maintenant que le firmware “AI on the edge” est installé, il s’agit de le configurer.

1. Depuis son PC/MacBook, on télécharge la dernière version du fichier AI-on-the-edge-device__remote-setup__*.zip sur la page https://github.com/jomjol/AI-on-the-edge-device/releases

AI-on-the-edge-device-compteur-eau-4

2. Toujours sur son PC/MacBook, on se connecte au WIFI de l’ESP32-CAM (le WIFI nommé AI-on-the-Edge):

ESP32-CAM Wifi

3. Dans le navigateur internet Chrome, on indique l’URL  http://192.168.4.1 afin de se connecter à l’ESP32-CAM.

4. On charge la configuration initiale sur la carte microSD. Via le bouton “Choose file”, on choisit le fichier zip téléchargé à la première étape (pour moi : AI-on-the-edge-device__remote-setup__v15.1.0.zip). On clique ensuite sur le bouton “Upload File”. Ici, c’est un peu bizarre car on a l’impression que rien ne se passe et on pourrait être tenté de cliquer plusieurs fois sur le bouton “Upload File”. Mais ce serait une erreur : il ne faut cliquer qu’une seule fois et il faut attendre une bonne minute. 

AI-on-the-edge-device-compteur-eau-3

5. Après une minute, une nouvelle page apparaît. On configure les informations WIFI pour que l’ESP32-CAM puisse se connecter au WIFI local. Une fois ces informations fournies, on clique sur le bouton “Write wlan.ini”.

AI-on-the-edge-device-compteur-eau-2

6. On clique sur “Reboot to first setup.” et on attend.

AI-on-the-edge-device-compteur-eau-1

7. On sait que le processus est fini quand, après une ou deux minutes, on voit que l’ESP32-CAM redémarre et que sa lampe LED s’allume quelques secondes. Si, durant le démarrage, la lampe clignote trois fois en rouge, cela signifie que l’installation s’est bien passée.

8. En se connectant à son routeur, on doit voir apparaître un appareil appelé “watermeter”. On note bien son adresse IP afin de s’y connecter lors de l’étape suivante.

Le placement de l’ESP32-CAM sur le compteur d’eau

Cela semble facile et rapide : on a un support imprimé en 3D (un qui est adapté ou un qui est arrangé comme pour moi) et on le dépose par-dessus le compteur avec l’ESP32-CAM à l’intérieur. Pour l’alimentation et pour ceux qui ont une prise de courant à proximité, un petit chargeur GSM et un câble micro USB font l’affaire.
https://www.amazon.fr/PremiumCord-C%C3%A2ble-Micro-USB-Blanc/dp/B07NSMVG13/ref=sr_1_1?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=3T8TYX7YU49NW&keywords=asin%3AB07NSMVG13&qid=1705480220&sprefix=asin+b07nsmvg13%2Caps%2C111&sr=8-1

Sauf que, hélas, cela demande quelques réglages. Avec certains compteurs, dont le mien, le flash de la caméra engendre des reflets. La documentation, https://jomjol.github.io/AI-on-the-edge-device-docs, traite d’ailleurs du sujet.

Il y a plusieurs solutions possibles aux reflets. Je n’avais pas envie de partir sur une LED externe, trop compliquée à mettre en oeuvre à mon sens. J’ai alors choisi de positionner le flash le plus loin possible des chiffres et j’ai ensuite collé un petit bout de papier sur la led afin d’avoir une lumière plus diffuse. C’était mieux et il faut le faire mais, hélas, ce n’était pas suffisant.

AI-on-The-Edge-ESP32-Cam-Reflets-2

En second essai, j’ai choisi de désaxer le support de l’ESP32-CAM afin que la lumière ne soit pas réfléchie trop directement vers la caméra. Cela a supprimé les reflets mais cela a amené une image un peu déformée

AI-on-The-Edge-ESP32-Cam-moins reflets-2

Et, plus loin dans les étapes, les erreurs de reconnaissance de caractère étaient trop nombreuses car le dessus des chiffres n’étaient pas bien reconnus (par exemple, le 7 étaient vu comme un 1 car la barre horizontale supérieure du chiffre 7 n’était pas vue).

Au final, j’ai placé le compteur pour chercher un compromis : le moins de reflets possible et pas trop désaxé pour avoir une bonne vue sur les chiffres. Je me suis donc approché de 100% avec ce placement, combinant une lumière plus diffuse et un léger désaxement pour éviter les reflets:

Screen Shot 2023-04-07 at 07.36.47

Un WIFI performant est requis

Un souci que j’ai de suite rencontré a été lié à la force du signal WIFI (-63db). L’ESP32-CAM est hélas moins performant en termes de WIFI qu’un ESP32 normal et j’ai l’impression qu’il en faut peu pour atténuer drastiquement le signal. J’avais beau essayer de me connecter via l’adresse IP de l’ESP32-CAM, http://X.Y.Z.W, c’était excessivement lent pour voir les pages quand je n’avais pas, tout bonnement, un timeout.

Après avoir essayé, pendant des heures, de me connecter à l’ESP32-CAM, j’ai songé à placer un point d’accès WIFI tout près, pour faire la configuration et le problème s’est résolu. Une fois la configuration finalisée, j’ai pu retirer ce point d’accès WIFI. Un bon signal WIFI est nécessaire pour la configuration (en particulier pour la transmission des images de l’ESP32-CAM) mais, ensuite, un signal WIFI moins bon sera suffisant pour transmettre les données en MQTT.

Configuration initiale

Dans la naviguateur internet Chrome, on se connecte à l’ESP32-CAM via son adresse IP récupérée sur le routeur WIFI. Cela donne quelque chose comme http://X.Y.Z.W (ce n’est donc plus http://192.168.4.1 puisque maintenant l’ESP32-CAM est connecté au réseau local).

Une page de configuration initiale est affichée par défaut lors de la première connexion. Cette configuration initiale se fait en cinq étapes. Passer d’une étape à la suivante peut prendre du temps et nécessite parfois un reboot. Il convient donc d’être un peu patient et d’attendre un peu avant de s’inquiéter de l’absence de réaction.

AI-on-the-edge-device-compteur-eau-initial-setup

1. Création de l’image de référence

La première étape consiste à prendre une photo du compteur. Cette photo va servir de base pour la suite de la configuration.

ESP32-CAM - Watermeter - Step 2 Set image reference 1

La procédure est simple:

  • On clique sur “Create New Reference
  • On règle les paramètres “Pre-rotate Angle” et “Fine Alignment” pour trouver l’alignement parfait. Il convient d’être soigneux à cette étape. Par exemple, sur la photo ci-dessous, le réglage n’était pas assez précis et les détections en souffraient. Il faut vraiment s’assurer de la meilleure horizontalité et verticalité possible au niveau des chiffres en s’aidant des bandes vertes.

ESP32-CAM - Watermeter - Step 2 Set image reference 2

  • On clique sur “Save”
  • On passe à l’étape suivante en cliquant sur le bouton “Next” en haut de l’écran.

Un des paramètres de cet écran est le réglage de l’intensité de la LED (LEDIntensity). Mais ce paramètre n’a jamais fonctionné : que j’indique 1 ou 99, le flash était toujours aussi intense (et provoquait toujours autant de reflets, ce qui était dommage).

2. Définition des marqueurs

A cette étape, on identifie des marqueurs, c’est-à-dire des morceaux d’images qui serviront de repère. A chaque relevé, l’image photographiée sera alignée sur base des marqueurs définis afin d’assurer une reconnaissance pointue des chiffres des index.

Il est conseillé de définir deux marqueurs, sur des zones de texte bien identifiables et bien distinctes. Parfois, il est conseillé de renforcer le contraste (via le paramètre “Enhance Constrast”) pour optimiser les marqueurs.

On commence par choisir le marqueur, via “Select Reference :”

  • On règle x, y, dx (distance sur l’axe des x) et dy (distance sur l’axe de y) pour faire en sorte que le rectangle rouge couvre exactement le marqueur que l’on souhaite identifier
  • On clique sur “Update Reference”. On voit alors l’image extraite qui s’affiche en dessous de “Original Image:” et “Reference Image:”
  • On clique sur le bouton “Save”

AI-on-The-Edge-ESP32-Cam-Reflets-alignment-mark-2

La procédure d’installation impose de redémarrer l’appareil après cette étape, ce qui peut se faire en cliquant sur “reboot” en bas de la page.

Une fois l’ESP32-CAM redémarré, il se peut que l’on soit revenu à l’étape 1. On peut alors se rendre directement à l’étape 3 en cliquant deux fois sur le bouton “Next” en haut de la page.

3. Récupération des informations digitales

C’est l’étape clé et celle qui est un peu fastidieuse. Il faut définir l’emplacement de chaque chiffre du compteur, soit 8 dans mon cas pour la partie digitale. Et il faut le faire dans le bon ordre afin que le système reconstitue ensuite l’index correctement.

On choisit un ROI (Région of Interest) dans la liste déroulante (digit1 par exemple) ou on en crée un nouveau avec le bouton “New ROI (after current)” si on a utilisé tout ceux existants. On règle ensuite les paramètres (principalement x, y, dx et dy) pour faire en sorte que les chiffres soient bien centrés.

AI-on-The-Edge-ESP32-Cam-ROI-Digital-2

Il n’est pas très facile de comprendre comment définir au mieux les Region Of Interest (ROI). Cela dépend du modèle choisi (que j’explique brièvement plus loin dans cet article) et du compteur. La documentation officielle fournit de l’aide : https://jomjol.github.io/AI-on-the-edge-device-docs/ROI-Configuration/

Sur l’image ci-dessus, on voit que le carré intérieur est bien trop grand. Il ne faut en effet pas trop d’espace entre les chiffres et ce carré rouge intérieur. Voici, par exemple, une meilleure configuration (c’est celle de Vincent) où le cadre rouge intérieur colle au maximum à la taille du chiffre:

Cette étape est importante et il faut vraiment y apporter un très grand soin afin que le résultat se rapproche de 100%. Il faudra sans doute procéder de manière empirique avec des essais et des corrections afin d’obtenir la meilleure reconnaissance possible. De temps en temps, une mesure erronée sera remontée comme, par exemple, lorsqu’on se situe entre deux chiffres. 

4. Récupération des informations analogiques

L’étape 4 concerne la récupération des informations analogiques. Mon compteur ne comptant qu’une partie analogique et n’étant pas beaucoup intéressé par mesurer des dixièmes de litres de consommation, cette étape a été passée en décochant “Enable Analog ROI’s”.

ESP32-CAM - Watermeter - Step 4 analog ROI

5. Derniers réglages

La cinquième et dernière étape est celle des réglages avancés et des optimisations.

ESP32-CAM - Watermeter - Step 5 Settings

Un des premiers réglages avancés est le choix du modèle de reconnaissance des chiffres:

ESP32-CAM - Watermeter - DIGIT ROI

Les différents modèles, décrit dans la documentation Model Selection, permettent de choisir la façon dont on souhaite que les images soient analysées. On compte principalement deux types de modèles qu’il convient d’expérimenter afin de choisir celui qui fonctionne le mieux:

  1. Modèle dig-class11-* : ce modèle reconnaît uniquement des chiffres entiers. Quand la roue chiffrée du compteur évolue, le modèle ne détecte pas de chiffre quand on est situé entre deux valeurs. Ce modèle est plus efficace mais fort limité car on tombe rarement sur tous les chiffres bien centrés en même temps
  2. Modèle dig-cont-* : ce modèle essaie de reconnaître où il en est en essayant de détecter des chiffres partiels. Ce modèle est sympa en théorie mais, en pratique, il amène souvent beaucoup plus d’estimations erronées.

Personnellement, après avoir essayé quelques modèles, c’est le dig-cont_0611_s3_q (de reconnaissance des chiffres partiels) qui a le mieux fonctionné. Le modèle dig-class11-* de reconnaissance des chiffres complets ne fonctionnait vraiment pas bien car le nombre d’erreurs étaient beaucoup plus nombreux.

Un autre paramètre important est le “AutoTimer”. Ce paramètre permet d’indiquer la fréquence à laquelle le relevé des index sera fait:

AI-on-The-Edge-ESP32-Cam-Reflets-Auto-Timer

6. La remontée des données via le protocole MQTT pour Heedom

Comme autre paramètre avancé, on peut citer la configuration du protocole MQTT qui permet de remonter les informations vers des box domotiques.

Pour Jeedom et son plugin MQTT, peu de paramètres ont été nécessaires. J’ai simplement mentionné l’URI en spécifiant l’adresse IP du serveur sur lequel Jeedom est installé et en conservant le port par défaut (1883) et le protocole par défaut (MQTT). J’ai gardé les valeurs par défaut pour les paramètres “Main Topic” et “Client ID” et je n’ai pas eu à préciser les “Username” et “Password”.

ESP32-CAM - Watermeter - Settings - MQTT

Dans les ESPEasy, on peut en général configurer plusieurs contrôleurs, ce qui permet de remonter les données en MQTT dans plusieurs box domotiques en parallèle. Ce n’est pas le cas ici puisqu’on ne peut mentionner qu’une seule URI au niveau du protocole MQTT. Il faut donc choisir vers quelle box on remonte les informations. A noter que les box domotiques tournent en général avec leur propre “Mosquitto Broker” et on peut faire en sorte qu’une box domotique récupère les données et que les autres box domotiques se connectent à cette première box domotique pour venir y chercher, à leur tour, les données.

7. La remontée des données via le protocole MQTT pour Home Assistant

Pour ceux qui souhaitent remonter les informations dans Home Assistant, c’est le même principe de configuration sauf qu’il faudra, sans doute, mentionner un nom d’utilisateur et un mot de passe (si vous n’avez plus ces informations, vous pouvez les récupérer en ouvrant le fichier /config/.storage/core.config_entries avec File Editor. Les informations se trouvent au niveau de la ligne “broker”:”core-mosquitto”).

Comme autre spécificité pour Home Assistant, on notera le Homeassistant Discovery (que l’on peut lancer via une URL, comme expliqué à l’écran) et la possibilité d’indiquer le type de compteur (value:l et Rate: l/h dans mon cas)

Screenshot 2024-12-03 at 11.40.30

Les informations dans Jeedom

Dans Jeedom et au niveau du plugin MQTT, on voit apparaître trois équipements :

ESP32-CAM - Watermeter - Jeedom - MQTT Plugin

A noter que, pour utiliser la valeur mesurée (c’est-à-dire l’index de consommation) dans des calculs de consommation, il faut choisir le type “Numérique” au niveau de la commande “value” dans l’object watermetermain ou watermetermainjson (celui que l’on préfère utiliser):

ESP32-CAM - Watermeter - Jeedom - Value - Numerique

Une fois les trois objets MQTT rendus “Active” et “Visible”, ils apparaissent sur le Dashboard de Jeedom:

ESP32-CAM - Watermeter - Jeedom - Dashboard 2

Dans un virtuel, on peut faire le calcul de la consommation, jour par jour, avec une formule comme celle-ci:

MaxBetween(#[Cave Garage][watermetermain][value]#,Today -30days, Now) – MaxBetween(#[Cave Garage][watermetermain][value]#,Today -30days, Today -0days)

Les informations dans Home Assistant

La première chose à faire, c’est de vérifier que les mesures remontent bien en MQTT dans Home Assistant. On se connecte donc à MQTT Explorer dans Home Assistant afin de vérifier que les trames de l’équipement «watermeter» (dans ma configuration) apparaissent bien, ce qui était le cas:

Screenshot 2024-12-03 at 13.22.52

Lors de la configuration des paramètres MQTT, on se souvient de cette information affichée à l’écran:

The discovery topics and the static topics (IP, MAC, Hostname, Interval, …) only get sent on startup. To send them again, you can call the following URL: http://<IP>/mqtt_publish_discovery

J’ai donc remplacé <IP> par l’adresse IP de l’ESP32-CAM et j’ai collé cette URL dans un navigateur internet, par sécurité. De retour dans Home Assistant, de nombreuses entités avait été créées:

Screenshot 2024-12-03 at 14.37.37

En particulier, une des entités créées peut-être utilisée dans le tableau de bord Energie de Home Assistant : c’est l’entitié “watermeter Value”

Screenshot 2024-12-03 at 13.22.32

Le tableau de bord Energie affiche alors une section avec la consommation d’eau par heure:

Screenshot 2024-12-03 at 14.36.56

Gestion des erreurs

Le mécanisme de relevé de l’index est intelligent et il essaie de corriger, tant que faire se peut, les valeurs qu’il lit. Une belle description de toute cette intelligence a été faite sur la documentation en ligne: https://jomjol.github.io/AI-on-the-edge-device-docs/Correction%20Algorithm/

A tout le moins, je conseille d’essayer différents paramètres de gestion des erreurs pour permettre au système de faire la meilleure analyse possible:

  • Allow Negative Rates : false. Pour un compteur d’eau, il est en effet impossible que le compteur tourne à l’envers.
  • Maximum Rate Value : C’est la différence d’index qui, selon toute logique, serait bien trop élevée pour être correcte. Tout dépend ici de la fréquence à laquelle les index sont lus et de la consommation moyenne de chacun. Chez moi, pour une lecture tous les quart d’heure, une consommation supérieure à 105 litres est sans doute une erreur. Si une telle consommation est détectée, le système remontera alors l’erreur “Rate too high” (voir capture d’écran ci-dessus) et la valeur sera tout simplement ignorée

ESP32-CAM - Watermeter - Max Rate Value

Une journée de pratique

C’est sûr que, pour éviter les reflets, je n’ai pas pu disposer l’ESP32-CAM au mieux (c’est-a-dire parfaitement horizontal et au centre du capteur. Par conséquent, plusieurs erreurs se sont produites durant les tests, surtout quand la caméra était très désaxée et quand j’avais le modèle de reconnaissance des chiffres entiers (et pas partiels).

Il y a tout d’abord eu les cas “NaN”, c’est-à-dire les cas où le système ne parvient pas à reconnaître les chiffres. Par exemple, ci-dessous, les chiffres 9 et 0 n’étaient pas reconnus. 

AI-on-the-Edge-Compteur-eau-NaN

Ce cas de figure n’est pas trop grave : le système a retenu la valeur précédente et c’est celle-là qu’il utilisera pour calculer l’index. Sur des chiffres qui changent peu (les premiers en noir), cela n’a pas d’incidence du tout. Pour les autres chiffres, c’est plus ennuyant mais on parle d’un plus petit nombre de litre.

Une autre sorte d’erreur se produit quand le système confond les chiffres. Par exemple, sur mon compteur, il confond régulièrement 1 et le 7 sur les index rouges:

AI-on-the-Edge-Compteur-eau-confusing-1-7

Dans ce cas de figure, on a une surestimation de la valeur lue.

C’est sans doute pour ces raisons que je conseillerais de configurer le système pour tourner régulièrement. En ce qui me concerne, j’ai choisi une fréquence de relevé d’index toutes les 5 minutes. Ce faisant, on finit par accrocher très régulièrement toutes les bonnes valeurs et on a alors une parfaite lecture:

AI-on-the-Edge-Compteur-eau-Bonne-lecture 2

C’est aussi pour corriger les erreurs que j’ai finalement mis l’option “Allow Negative Rates” (voir ci-dessus) à true. C’est vrai qu’un compteur d’eau ne peut pas tourner à l’envers et que ce n’est pas logique à priori. Mais, ce faisant, le système se corrige quand il a surestimé une valeur et, dans le suivi, on peut voir s’il y a eu une erreur ou pas (et investiguer pour essayer d’améliorer le système).

Finalement, si on regarde l’évolution de la consommation, en litre, sur une journée on voit des montées (ce qui est logique puisqu’il y a consommation) suivies parfois de descentes. Ces descentes constituent en fait la correction de valeurs incorrectement lues précédemment.

AI-on-the-Edge-Compteur-eau-Consommation-Jour

Au final, ce n’était pas parfait comme lecture mais c’était quand même suffisamment bon. On avait, en fin de journée, une bonne approximation des consommations du jour et des moments de consommation. Et, sur une longue période (un an par exemple), la marge d’erreur est quasiment nulle. Mais je restais sur ma fin et j’étais prêt à abandonner quand Vincent m’a poussé à continuer car il était parvenu, de son côté, à approcher les 100%. Et c’est vrai que, après plusieurs essais de placement de caméra et de définition des zones ROI, je suis parvenu moi aussi à des mesures quasiment justes à chaque fois:

Screen Shot 2023-04-07 at 07.26.36

C’est donc possible mais il faut y passer du temps.

Conclusions

Ce capteur à base d’ESP32-CAM ne coûte pas cher. C’est aussi amusant à installer mais ce n’est pas facile du tout à bien configurer. J’ai failli abandonner et j’ai donc failli revenir à l’ancienne solution : https://www.objetsconnectes.be/2020/07/15/capteur-lj18a3-nodemcu-esp8266-compteur-eau-swde/. Mais je suis content d’avoir finalement pu obtenir un résultat excellent et je suis donc content de cette nouvelle solution. 
– un ESP32-CAM :
https://www.amazon.fr/XTVTX-ESP32-CAM-Bluetooth-ESP32-CAM-MB-compatible/dp/B093GSCBWJ/ref=sr_1_1?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=1S7U9HQ7087K4&keywords=B093GSCBWJ&qid=1705480081&sprefix=b093gscbwj%2Caps%2C424&sr=8-1

– une carte microSD :
https://www.amazon.fr/Intenso-3433470-M%C3%A9moire-microSDHC-Adaptateur/dp/B00YMZC944/ref=sr_1_1?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=1TGQAI7B6OXD9&keywords=B00YMZC944&qid=1705480124&sprefix=b00ymzc944%2Caps%2C75&sr=8-1

9 Responses

  1. Phil

    Bonjour,
    Bravo pour ce projet et le remarquable travail exécuté !!!

    Mais en général, le compteur d’eau se trouve dans la garage ou la cave, et parfois dans le noir total.
    As-tu une solution pour alimenter ce brave ESP pour plusieurs années ?
    Et comment faire dans le noir total ?
    Merci de ton retour

    • ObjetsConnectesAdmin

      Bonjour. Merci pour ce gentil retour. En ce qui me concerne, j’avais un prise de courant près du compteur et, par conséquent, un simple câble microUSB et un petit chargeur ont fait l’affaire. Pour le noir, ce n’est pas un soucis car l’ESP32-CAM est équipé d’une led qui fait office de flash. C’est le point fort mais aussi le petit soucis car, chez moi, les reflets sur la vitre perturbent la lecture des index.

  2. KevinD

    C’est très bon à savoir à l’époque où la moindre économie est bonne à prendre. Merci pour cet article!

  3. alberto

    Super idée ! J’avais déjà investigué et je n’avais pas trouvé de tuto pour faire ça, je vais attaquer ça asap!
    Concernant ton problème de flash avec la led, je me demande si une led infrarouge ne resoudrait pas le souci ? A voir 🙂

    Merci encore, je vais attaquer ça !

  4. Emmanuel

    Hello
    Après installation du firmware et redemarrage il n’y pas de WIFI de l’ESP 32 “AI on the edge”

    Module défectueux ou j’ai loupé un truc ?

  5. doudy

    Bonjour,
    J’ai testé mais gros soucis !
    Je ne suis pas un spécialiste …
    Pourtant numpy est installé !

    pi@raspberrypi-183:~ $ pip install numpy
    Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
    Requirement already satisfied: numpy in ./.local/lib/python3.9/site-packages (1.26.4)

    Voici le shell dans Thonny :

    >>> %Run camera-1.py
    OpenCV bindings requires “numpy” package.
    Install it via command:
    pip install numpy
    Traceback (most recent call last):
    File “/home/pi/.local/lib/python3.9/site-packages/numpy/core/__init__.py”, line 24, in
    from . import multiarray
    File “/home/pi/.local/lib/python3.9/site-packages/numpy/core/multiarray.py”, line 10, in
    from . import overrides
    File “/home/pi/.local/lib/python3.9/site-packages/numpy/core/overrides.py”, line 8, in
    from numpy.core._multiarray_umath import (
    ImportError: libopenblas.so.0: cannot open shared object file: No such file or directory

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File “/home/pi/.local/lib/python3.9/site-packages/numpy/__init__.py”, line 130, in
    from numpy.__config__ import show as show_config
    File “/home/pi/.local/lib/python3.9/site-packages/numpy/__config__.py”, line 4, in
    from numpy.core._multiarray_umath import (
    File “/home/pi/.local/lib/python3.9/site-packages/numpy/core/__init__.py”, line 50, in
    raise ImportError(msg)
    ImportError:

    IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!

    Importing the numpy C-extensions failed. This error can happen for
    many reasons, often due to issues with your setup or how NumPy was
    installed.

    We have compiled some common reasons and troubleshooting tips at:

    https://numpy.org/devdocs/user/troubleshooting-importerror.html

    Please note and check the following:

    * The Python version is: Python3.9 from “/usr/bin/python3”
    * The NumPy version is: “1.26.4”

    and make sure that they are the versions you expect.
    Please carefully study the documentation linked above for further help.

    Original error was: libopenblas.so.0: cannot open shared object file: No such file or directory

    The above exception was the direct cause of the following exception:

    Traceback (most recent call last):
    File “/home/pi/scripts/camera-1.py”, line 1, in
    import cv2
    File “/home/pi/.local/lib/python3.9/site-packages/cv2/__init__.py”, line 11, in
    import numpy
    File “/home/pi/.local/lib/python3.9/site-packages/numpy/__init__.py”, line 135, in
    raise ImportError(msg) from e
    ImportError: Error importing numpy: you should not try to import numpy from
    its source directory; please exit the numpy source tree, and relaunch
    your python interpreter from there.
    >>>

    Une idée ?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.