L’objectif du jour est de mesurer et disposer de la quantité d’eau contenue dans une cuve de récupération d’eau pluviale. Pour cela, nous mettrons en oeuvre plusieurs notions sur le Raspberry Pi, mais également sur le système domotique Jeedom. De quoi accroître vos connaissances des deux systèmes qui, il faut bien l’avouer font un couple parfait. Pour ce nouveau guide, je vais m’appuyer sur un premier guide autour du Raspberry Pi et de la mesure des distances que nous avions publiée sur le blog il y a deux ans.
[irp posts=”10072″ name=”Comment mettre en place un capteur de distance HC-SR04 sur Raspberry Pi”]Côté matériel, je vais mettre à profit une ancienne version du Raspberry Pi. Amplement suffisante pour cette tâche, sachez toutefois que ce guide peut aussi parfaitement s’appliquer à une autre version du RPi.
Pour la mesure de distance qui sera la donnée principale de ce guide, nous nous appuierons sur l’excellent et économique module HC-SR04.
Enfin, pour mettre en musique le tout, nous aurons également besoin de deux résistances et quelques câbles.
Les composants nécessaires
Dernière mise à jour du tarif le 2024-10-15 at 16:12
Et pour l’alimentation du Raspberry Pi, n’ayant pas d’électricité près du récupérateur et n’ayant pas envie de tirer une nouvelle ligne. J’ai opté pour une autre option bien pratique, l’alimentation PoE. Oui, un petit module qui permet de conduire à la fois la donnée et l’alimentation du Rapspberry sur un seul et même câble réseau.
- this POE Splitter is suitable for household IP camera with Micro USB Plug 5V power Port
Dernière mise à jour du tarif le 2024-10-15 at 16:12
L’outillage nécessaire
No products found.
Retour sur les GPIO du Raspberry Pi
Les GPIO sont les broches qui se trouvent sur le bord du Raspberry Pi. Ces broches permettent de connecter des composants électroniques qui seront ensuite capables d’être lues ou actionnées depuis un programme piloté par le Rpi.
Je vous invite à lire notre article sur un excellent ouvrage qui traite des GPIO et leur potentiel.
[irp posts=”10543″ name=”Mouvement, lumière et son avec Arduino et Raspberry Pi”]Voici le brochage générique des Raspberry Pi.
Et voici le brochage qui concerne plus spécifiquement notre projet. Vous avez peut-être remarqué que j’ai mis à profit de mon projet, un vieux Raspberry Pi dans sa version B. Cette version était une des premières du mini-ordinateur et ne possédait donc pas autant de PIN que la dernière génération. Toutefois, cela n’a pas une grande importance puisque nous utiliserons des broches de la première partie, qui sont à la fois sur les anciennes et les nouvelles versions.
Le nommage des PIN ne change pas, elles sont simplement plus nombreuses sur les dernières versions du Rpi (Partie rouge de droite en plus).
Pour le repérage, comme vous pouvez le remarquer, nous viendrions utiliser 4 PIN. Deux pour l’alimentation 5V et GND et deux autres pour collecter les données du capteur.
Le schéma de câblage
Pour le branchement des différents composants, rien de compliqué. il n’y a qu’à suivre ce petit schéma simple. Pour info, la résistance de 470 Ohms peut être remplacée par deux résistances de valeur équivalentes. Pour ma part, j’ai utilisé une résistance de 330 Ohms et une autre de 150Ohms. Soit 480Ohms mais rien de grave, ça fonctionne correctement quand même.
Le script Python
Les présentations sont faites avec le branchement des GPIO, voyons à présent la partie script. Comme dans l’article sur l’utilisation du HC-SR04, nous utiliserons le même script de base. Un script de Matt Hawkins bien pratique. Nous apporterons simplement quelques petites modifications à ce script pour envoyer les données à Jeedom.
Avant toute chose, nous allons nous assurer de disposer de tout le nécessaire pour l’environnement python du Raspberry Pi.
1 commençons par mettre à jour les depots :apt-get update2 Ensuite, il faut ajouter pip
apt-get install python-pip3 maintenant, installons la bibliothèque requests
python -m pip install requests
Requests, va permettre à Python de faire des appels HTTP pour communiquer avec Jeedom et son API. C’est comme cela que nous mettrons à jour la valeur dans Jeedom.
4À présent, téléchargeons le script ultrasonic de la même façon que dans le premier guide à l’aide de la commande suivante
wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/ultrasonic_2.py
Du côté de jeedom
Du côté du système domotique Jeedom, nous avons juste à créer un device virtuel que le Raspberry Pi viendra alimenter avec sa valeur mesurée. Créez alors simplement un virtuel et notez son code de commande.
Création de la requête de mise à jour
Vous l’avez compris, nous utiliserons la bibliothèque python Requests pour envoyer les données de mesure à Jeedom. Nous devons donc pour cela construire la requête avant de l’ajouter dans le script.
changez alors les valeurs APIKEYDEJEEDOM et IDDUVIRTUAL par vos valeurs
payload = {'plugin': 'virtual', 'apikey': 'APIKEYDEJEEDOM' , 'type': 'virtual' , 'id': 'IDDUVIRTUAL' , 'value': distance}
Enfin, maintenant que nous disposons des paramètres à passer dans l’URL, construisons l’URL principale. Là encore remplacez simplement ADRESSEJEEDOM par l’adresse de votre Jeedom.
r = requests.post("https://ADRESSEJEEDOM/core/api/jeeApi.php", params=payload)
Mise à jour du script
À présent, il convient d’éditer le script python pour y intégrer nos paramètres d’appel à Jeedom.
1 Pour cela, ajoutez la ligne suivante en début dans script dans la partie import des bibliothèques :import requests2 Puis ajoutez les lignes précédemment construites avec vos données dans la boucle en fin de script
Modifiez le sleep de la boucle pour disposer d’une rotation du script 1 fois par heure soit 3600 secondes
3 Il ne reste plus qu’à sauvegarder le tout et tester. Pour ce test, lancez manuellement le script avec la commande suivante :python ultrasonic_2.py
L’automatisation du script
Maintenant que nous avons testé le bon fonctionnement du script, il convient de l’automatiser au démarrage du Rapsberry Pi. Sur ce point plusieurs méthodes existent, je ne me suis pas cassé la tête, j’ai simplement choisi d’éditer le fichier de démarrage. Pour cela utilisez la commande suivante :
sudo nano /etc/rc.local
Une fois dans le fichier rc.local ajoutez-lui la ligne suivante :
python ultrasonic_2.py
Notez qu’il est possible d’avoir une erreur d’exécution, car la bibliothèque requests n’est pas forcément disponible sous l’environnement sudo. Pour corriger cela, exécutez simplement cette commande :
sudo pip install requests
C’est terminé ! À présent à chaque démarrage du raspberry pi, le script va s’exécuter automatiquement et mettre à jour le niveau de la cuve dans un virtual Jeedom toutes les heures.
La formule de conversion distance / volume pour Jeedom
Pour terminer, la formule de calcul pour convertir la distance en litre et disposez du véritable volume d’eau de la cuve.
pour une cuve de 500L mesurant 98cm de haut, les données sont les suivantes :
- 0 cm = cuve pleine
- 98 cm = cuve vide
- contenance total = 500 L
l’équation à saisir dans Jeedom est donc ((98-#value#)x500)/98
Enfin, vous pouvez encore allez plus loin en manipulant les différentes données générées avec différents compteurs.
Ou encore avec une vue en relation avec la quantité de pluie tombée.
Conclusion
Voilà, nous venons de voir comment j’ai entrepris ce projet. Pour moi c’était une cuve de récupération d’eau, mais le principe est parfaitement applicable à une cuve de fioul, un réceptacle de granules de bois ou encore un puit. De la même façon, ce guide est réalisé sur Jeedom mais peut aussi être transposé à une autre box domotique comme Eedomus par exemple.
Pour aller plus loin, vous pouvez également imprimer un modèle 3D pour y loger le détecteur et le coller dans la cuve. Voici le modèle 3D que j’ai utilisé chez moi et que vous avez vu ce week-end sur mes réseaux sociaux.
Besoin d’un Raspberry Pi pour réaliser ce guide?
Dernière mise à jour du tarif le 2024-10-15 at 16:02
Bonjour
Merci pour ce tutoriel tous fonctionne chez-moi sauf que je voudrais faire le calcul pour le niveau d’aujourd’hui et d’hier mais je ne trouve pas la bonne formule merci à vous
Bonjour,
cela doit être possible via les calculs d’historique de jeedom. (si la valeur est bien historisé)