Niveau cuve d'eau via JSN-SR04T en MQTT pour openHAB 3

Je voulais partager avec vous cette expérience d'allier un composant électronique simple avec OpenHAB.
Dans cet exemple j'utiliserai la version openHAB 3 qui est beaucoup plus "user friendly" c'est à dire "agréable" et accessible que sa petite soeur openHAB v2.
De plus cela permettre de poser les bases d'une mise en oeuvre d'openHAB v3 sous MQTT.

Contexte :
Vous avez un récupérateur d'eau et vous ne savez jamais quel est le niveau d'eau restant dedans.
Ce processus peut simplement vous indiquer la hauteur d'eau (donc son volume) ou permettre de déclencher des règles précises de gestion que vous souhaitez d'après ce niveau.
En ce qui me concerne, j'ai un récupérateur de 3500 L et je ne sais jamais - à moins de l'ouvrir - quel est le niveau d'eau restant.

En fait ce que l'on veut précisement c'est savoir quel est le pourcentage d'eau qui occupe la cuve.

page


J'avais déjà mis en place ce process sur Home Assistant. Je me devais de le tester et valider sur openHAB 3 ;o)

 sr04

 

PARTIE 1 : Quels composants utiliser et pourquoi ?

N'étant pas d'un niveau en électronique qui me permet d'aller loin dans la mise en oeuvre je me suis mis à chercher un moyen simple et peu honereux.
Après avec recensé les techniques, 3 étaient possibles.

1. Un appareil dédié qui mesure et affiche en temps réel le volume de ma cuve.
Autant le dire de suite, j'ai vite été calmé par le prix (envrion 50 à 150 voir 350 euros) et par la possibilité de mise en oeuvre parfois (centrée, fixer..etc..).
D'autresont moins cher (surtout sur Banggood ou Aliexpress) et comportent même un afficheur, mais le cable est trop court ou alors le paramétrage ne convient pas... bref pas flexible et
surtout le lien avec la domotique n'est pas simple.

2. Certains mettent enplace une grande barre sur lequel on place tous les x centimetres des capteurs d'eau. Suivant les capteurs qui informent qu'ils sont au contact de l'eau, on peut savoir la hauteur d'eau.
Perso en 2021 je trouve que cela fait usine à gaz et qu'il y a plus simple...
https://www.framboise314.fr/une-mesure-de-niveau-deau-avec-un-raspberry-pi/

3. Dernière solution c'est l'utilisation de capteur type ultrasons qui va determiner une distance entre le capteur et une sarface/objet touché.
Ce composant électronique est peu honéreux et surtout il peut d'adapter à plein de systèmes très facillement (Ardunio, Raspberry... et surtout un WEMOS D1 WIFI qui coût quasi rien !)
C'est ce choix que j'ai fait et que je vais vous détailler.


Quelle difference entre HC-SR04 JSN-SR04T ?

Le plus connu est le HC-SR04 car dans les utilisations arduino il est fortement utilisé.
Cependant, même si les deux modèles remplissent le même rôle, l'utilisation du JSN-SR04T est obligatoire. Pourquoi ? Car ce dernier est waterproof et l'autre non...
Vital dans notre cas car dans une cuve de récupération en cas de puie, humidité, condensation etc... notre système ne tiendrait pas longtemps...
Par contre votre choix doit obligatoirement s'orienté vers le module JSN-SR04T-3.0 : la version 3.0 est OBLIGATOIRE car stable (les anciennes ont des pb, j'ai pu le vérifier moi-même su un de mes capteurs)

 sr041

sr042

Quels matériels nécessaires en plus du JSN-SR04T ?

Le matériel DE BASE est le suivant :
- 1 WEMOS D1 mini (environ 1,5 euros) : Le Wemos va permettre de communiquer les prises de mesures faites par le module JSN-SR04T et le transmettre en MQTT

wemosD1mini
- 1 cable USB <-> micro USB pour alimenter, communiquer et flasher le WEMOS
- Un simple chargeur USB pour rendre le composant SR04T indépendant sur une prise électrique
- Des connecteurs - à fixer/souder sur le Wemos - qui serviront à connecter les fils de connexions entre le Wemos et le composant JSN-SR04T
Préparer le Wemos avec les connecteurs soudés et prêts pour le flashage.

connecteurs

C'est le minimum pour obtenir une mesure de distance entre le capteur et la surface de l'eau.
Ensuite on pourra rajouter d'autres choses suivant votre besoin (rallonge tpe rj45 pour le module SR04...etc...)

- A présent il vous faut connecter les fils de connexion aux connecteurs du WEMOS en respectant le tableau suivant :

JST-SR04T WEMOS D1 Mini
 5V 5V
 GND GND
 TRIG (RX) D7 (GPIO13)
ECHO (TX) D6 (GPIO12)

On est prêt à flasher !

Tips : Si vous avez une imprimante 3D je vous recommande d'imprimer ces petits boitiers très pratiques :
pour le Wemos
https://www.thingiverse.com/thing:1768820
pour le module SR04T
https://www.thingiverse.com/thing:3346226


PARTIE 2 : Flasher le Wemos D1 mini via Tasmota

 

Tout petit et rapide rappel : qu'est ce que Tasmota ?
C'est un firmware qui permet de gérer - par une couche software - des composants de type ESP8266. En sortie cela nous permet d'exploiter un mode WIFI + MQTT... etc... bref c'est génial et c'est gratuit...
Pour plus d'infos c'est ici :
https://tasmota.github.io/docs/

Il y a une séquence d'actions pour flasher le Wemos. Cela se fait très facilement.

1. Brancher votre Wemos au micro usb qui est lui même relié à un port usb de votre ordi.
Dans la photo d'illustration ci-dessous le module SR04 n'est pas connecté au Wemos mais chez vous bien entendu tout est relié...

wemos ordi

2. Télécharger ce petit utilitaire qui va vous permettre de transférer le firware Tasmota sur votre Wemos D1 mini.
Il s'appelle Tasmotizer (version actuelle : Tasmotizer 1.2)
Vous pouvez le télécharger ici : (prenez la version x64 ou 32 bits selon votre système)
https://github.com/tasmota/tasmotizer/releases

Cet outil est génial car il va vous faciler grandement la vie : en 3 manipulations très simple, votre Wemos est flashé !

3.Lancez cet utilitaire sur votre ordi en ayant une connexion internet car il va récupérer la dernière version de Tasmota (vous pouvez aussi bien sûr déposer manuellement votre propre version Tasmota en fichier xxxx.bin si vous le souhaitez)

 Tasmotizer récupère le port de connexion de votre USB branché sur votre Wemos et il vous demande quelle version implémenter, pensez à cocher de supprimer ce qu'il y avait auparavant  (vous pouvez aussi sauvegarder votre ancienne version sur le Wemos etc...)
LE PLUS IMPORTANT A RETENIR EST QU'IL FAUT PRENDRE LA VERSION tasmota-sensors.bin car la version standard ne comporte pas la gestion du SR04. (Pour info en version 8.1.0 standard on peut le faire mais ensuite il faut utiliser ce fichier là et pas un autre)

tasmotizer 

Vous pouvez cliquer sur le bouton Tasmotize.

tasmotizer2

Le flashage se fait tout seul...

tasmotizer3
A la fin du processus, débranchez votre cable USB sur l'ordinateur, rebranchez et patientez 10s avant de cliquer sur le bouton "OK"
A présent on va mettre à jour directement la configuration WIFI dans Tasmota (pratique ! on est quitte de se connecter sur le réseau Tasmota dédié et paramétrer manuellement)

Pour cela, cliquer sur le bouton "Send config" et configurer votre réseau WIFI + Password.. Vous pouvez aussi compléter le recovery WIFI au cas où vous perdez votre WIFI courant.
La partie MQTT sera configurée directement dans Tasmota (plus bas)

tasmotizer4

On clique sur "Save".
A présent on va récupérer l'adresse IP où démarre notre Wemos. Pour cela on clique sur "Get IP".

tasmotizer5
A présent vous pouvez saisir cette IP dans votre navigateur ; cela affiche la configuration de base de Tasmota.

tasmota

 

PARTIE 3 : Configurer Tasmota

 

A présent nous allons configurer notre module SR04 dans Tasmota.
On va dans "configuration" puis "module parameters".
On choisi le module de type GENERIC 18 et "save". Le module "reboot" donc patientez et vous arriverez au menu de Tasmota.

tasmota2

tasmota3

A présent on défini les connecteurs D6 et D7 pour communiquer (RT et TX, rappelez vous du tableau de connexion dans le chapitre 1).
On sauvegarde. Cela reboot encore et on arrive à nouveau au menu et là... ô miracle, l'affichage de la distance mesuré par la sonde s'affiche !!

tasmota4

 
On va à présent donner un titre plus précis que "Tasmota", on va l'appeler "JSN-SR04T" et on laisse l'émulation à "None".

tasmota6
tasmota7

 Maintenant que l'on a la mesure de la distance, et que l'on a nommé notre Tasmota, il nous faut préparer le mode de communication de ces infos avec openHAB.
Le protocol utilisé est MQTT. Nous allons donc configurer la partie MQTT du Wemos pour pouvoir ensuite dialoguer avec openHAB.

Pour cela il nous faut décrire le Host c'est à dire l'IP de notre Broker MQTT (que l'on va installer sur notre openHAB ou que l'on a installé indépendement), le port (c'est toujours 1883), le user/password de votre MQTT Broker et enfin le Topic.
Ce dernier point est à ne pas négliger car c'est ce qui servira à la subscribtion sous MQTT et qui permet d'identiifer votre module dans MQTT dans mon cas je n'en ai qu'un donc je l'ai appelé JSN-SR04T.

 On sauvegarde et cela va relancer le module pour la prise en compte

 tasmota9

 Il nous reste une toute dernière modification à faire.
Par défaut la prise de mesure se fait tous les 300s cad toutes les 5min. On va réduire à 30s c'est plus pratique.
Pour cela on va dans le menu de "Logging parameters" et on change le champ "Telemetry period" de 300 par défaut à 30

tasmota8
On sauvegarde.


On a fini à présent avec le le composant.
A présent on va s'occuper de MQTT.


PARTIE 4 : Installer et configurer MQTT

 MQTT peut s'installer de 4 façons :

- Votre openhab est sous openhabian, c'est le cas le plus simple et le plus rapide.
Il faut vous connecter avec putty à votre console et aller dans le menu de configuration qui est très pratique via la commande :

sudo openhabian-config

Allez dans le menu 20 : "Optional Components"
Puis 23 | Mosquitto MQTT broker Eclipse Mosquitto

 Il va vous proposer l'installation de Mosquitto qui est un broker MQTT gratuit et très répendu. Vous allez préciser un user / password...etc..
Rien de compliqué. Après une relance c'est fait, votre MQTT est opérationnel sur le port 1883.

- Vous avez une installation linux indépendante d'openhabian, je vous conseille donc d'installer Mosquitto via des installations linux classiques.
Je vous invite à suivre ce tutoriel ici qui est très bien fait :
https://www.tutos.eu/4910

- Vous êtes sous Docker et vous voulez ajouter un container MQTT Mosquitto.
J'ai fait un tutoriel ici :
https://macleod.hfstudio.com/index.php/fr/tut/160-installer-le-message-broker-mosquitto-dans-un-container-docker

- Vous avez déjà un brocker situé sur un autre serveur (windows ou autre...). Simplement récupérez le user/password + IP + port qui seront utiles pour la suite.

 

Je ne peux pas m'empécher de vous donner 2 astuces très utiles :

1. Tasmota propose une log détaillées de l'activité du module.
Pour cela allez sur l'IP de votre module dans le menu "Console"

tasmota11

Ici on voit clairement que les posts MQTT passent bien et via 2 topics :
MQT: tele/JSN-SR04T/STATE : donne le status du composant.
MQT: tele/JSN-SR04T/SENSOR : donne le résultat (la distance)


2. Utilisation d'un client MQTT pour suivre l'activité et tracer les messages postés.
Quand votre module va poster ses informations il est très pratique de vérifier qu'elles sont bien poussées dans MQTT et que c'est opérationnel.
Je recommande l'utilisation du logiciel gratuit : MQTT.fx disponible ici :
https://mqttfx.jensd.de/

 

MQTTfx

On peut souscrire pour trapper les infos postées.
Dans notre cas les données sont postées dans tele/JSN-SR04T/SENSOR (souvenez vous notre configuration MQTT dans Tasmota)

MQTTfx2

Cela confirme ce que l'on voit dans les logs Tasmota du point précédent !

 

PARTIE 5 : La configuration sous openHAB 3

 

 Bien évidement - et ce depuis longtemps - openHAB sait gérer MQTT.

1. Binding MQTT
Lorsque vous êtes dans l'administration d'openhab (url https://votreipopenhab:8080, il vous faut en premier installer le binding.
Le binding correspond à un composant qui va savoir gérer un matériel (par un protocol de communication, une définition de canaux etc...)
Dans notre cas il nous faut installer le binding MQTT.

Aller dans "Paramètres" au niveau des "Add-ons" et cloquer sur "Bindings" .
A présent cliquer sur la petite croix bleue en bas à droite de la page et recherchez "MQTT".
Il vous trouvera la version courante du binding et vous propose de l'installer. C'est rapide (10s).
En retournant dans votre menu "Bindings" vous verrez qu'il est installé.


openhab

2. Définir les objets (Things)
Le binding étant réalisé nous pouvons à présent référencer notre objet (c'est à dire le SR04T).
Cet objet sera de type MQTT car le mode de communication entre le SR04T et openHAB se fait en MQTT.
MAIS avant ça il nous faut définir le Broker MQTT qui n'a pas encore été créé (le Broker n'est à créer qu'une fois pour votre gestion de tous vos composants en MQTT bien entendu)

 

Le Thing de type Broker MQTT
Nous allons donc dans le menu d'openHAB dans "Paramètres" puis "Things". L'objet en peut être détecté automatiquement. Nous allons donc l'ajouter manuellement.
On clique sur la croix bleue en bas à droite pour ajouter.
Nous voulons ajouter un élement dépendant du binding MQTT. (on choisit donc MQTT binding)
Et on choisi le type MQTT Broker.

openhab2
Nous avons donc à compléter la configuration de notre broker Mosquitto.
On donne un nom ("MQTT Broker"), on click sur l'option "advanced" pour optenir plus d'options.
On précise l'IP de notre Broker le port (1883 par défaut)

openhab3

il faut aussi définir notre user/password défini dans la config Mosquitto

openhab4


On sauvegarde. A l'issu, openHAB vous confirme si il a accès au Broker MQTT ou pas via le status.

openhab5


Le Thing de type Generic MQTT

Maintenant que l'objet Broker est défini, il nous reste à ajouter l'objet SR04T.
C'est un objet de type Generic MQTT c'est à dire que c'est un objet MQTT standard.

 On recommence :
Nous allons donc dans le menu d'openHAB dans "Paramètres" puis "Things". L'objet en peut être détecté automatiquement. Nous allons donc l'ajouter manuellement.
On clique sur la croix bleue en bas à droite pour ajouter.
Nous voulons ajouter un élement dépendant du binding MQTT. (on choisit donc MQTT binding)
Et on choisi le type Generic MQTT Thing.

Dans l'onglet au dessu "Thing"
Je lui donne le nom JSN-SR04T et il fait partie de mon emplacement gExterieur.
Je lui assigne le nom de mon Broker qui est : MQTT Broker (créé précédement)

openhab6
Ensuite on va dans l'onglet "Channel" pour lui définir les caractéristiques de notre objet ( 'les canaux' qu'on va utiliser)
On clique sur "Add Channel" et le type sera "Pourcentage Value"

openhab7

Petite précisions.
Vous avez remarqué que le type de canal est "pourcentage" alors que le SR04T gère... une distance...
Comment allons nous obtenir ce calcul de pourcentage alors que MQTT ne nous transmet qu'un nombre qui correspond à la distance...
Nous allons utiliser.. la Transformation sous openHAB. On verra ça plus loin.
En attendant il nous faut configurer le Channel.
On précise le topic, et l'unité de mesure "%" pour l'affichage.

openhab8
On sauvegarde.
Le canal pour l'information de notre module est créé.



L'item du Canal de notre objet (Thing)


A présent on va lui associer un item qui nous servira pour les affichages. Cela s'appelle "Link Channel to item".
On clique sur "Add link to item" au niveau du channel.

On créé un nouvel item. On lui associe des informations comme le type (nombre dnas notre cas), un label qu'on retrouvera dans la liste des items, et des descriptions.

openhab9

Un point très important est en bas : on lui associe un JS (javascript) que j'ai appelé ici "pourcentage.js" : ceci concerne en fait ce que j'ai expliqué plus haut ; la transformation.
On sauvegarde notre item pour qu'il soit créé.
C'est à dire qu'on va convertir le nombre lu (qui est une distance) et on va calculer ce que cela signifie en terme d'occupation de la cuve (en pourcentage) par une petite formule mathématique simple qui es définie dans le JS.

Ce fichier javascript est situé sur votre serveur où est installé openHAB dans le répertoire  /etc/openhab/transform

openhab10


On créé le fichier nommé pourcentage.js qui comporte ceci :

(function(i) {
// i = 30 => cuve pleine => 100 %
// i = 150 => cuve vide => 0 %
var i_cuve_vide = 150; // hauteur i mesuree en cm quand cuve vide
var i_cuve_pleine = 30; // hauteur i mesuree en cm quand cuve pleine

var pourcent = (i_cuve_vide - i) / ((i_cuve_vide - i_cuve_pleine) / 100);
var pourcent = pourcent.toFixed(2);
return pourcent;
})(input)

 

Evidemment vous adaptez les variables i_cuve_vide et i_cuve_pleine avec les mesures de hauteurs de votre module SR04T avec vos 2 hauteurs mesurées cuve vide et cuve pleine en cm.
La fonction toFixed permet de ne positionner que 2 chiffres après la virgule.

Donc pour ceux qui ne veulent que la hauteur en cm du SR04T, il ne faut pas implémenter ceci mais je trouve pratique d'avoir un visuel de pourcentage qu'une hauteur en cm pour une mesure de volume...

On vérifie ce que l'on a fait dans la vue des items !
On va dans "Administration" "Paramètres" "Items".

openhab11

Il applique bien la formule du JS et affiche en % !


La configration de l'affichage

On peut à présenter montrer quelque chose de joli pour afficher notre pourcentage d'occupation de cuve !
On va dans "Administration" "Paramètres" "Pages" et on clique sur la page d'overview. (aperçu) et on ajoute un element (cliquer sur la croix dans le gros rectangle)

On choisi un type d'affiche "Gauge" qu'on va paramétrer en cliquant sur le bouton noir (écran) créé.


openhab12

 Cliquer sur "Configure Widget"
Bon je vous laisse personnaliser à votre goût l'affichage... notez qu'il faut assigner l'item que vous voulez afficher et comment se présente votre gauge..

openhab13

Voilà !!!
C'est opérationnel à présent !
J'espère que ce tutoriel que j'ai voulu le plus complet possible vous a plu.
N'hésitez pas à me faire des retours !
++

NOTA : pour information si vous devez faire une rallonge, c'est avec un RJ45 entre le WemosD1 et carte JSN (sur plusieurs dizaines de mètres) !

{jcomments on}