Monitorer la température et le PH d’un bassin avec une connexion Lora et remonter l’information dans Jeedom

Monitorer la température et le PH d’un bassin avec une connexion Lora et remonter l’information dans Jeedom

6 January 2021 0 By Jérôme Ferrari

Bonjour à tous,

Aujourd’hui, on va apprendre comment monitorer l’état d’un bassin pour monitorer la température de l’eau ainsi que son PH afin de savoir si tout va bien pour ses habitants. Ce tutoriel change un peu de l’ordinaire car le matériel utilisé est plus cher que ce que j’utilise d’habitude.

Partie 0: Le matériel choisi

  • Une Raspberry pi + son alimentation + une carte SD
Raspberry Pi® 4 B 4 Go 4 x 1.5 GHz Raspberry Pi® | Conrad.fr
  • Un shield Dragino
  • Une sonde de température Atlas scientific PT-1000
  • Un circuit de mesure de température EZO RTD
  • Une sonde de PH Atlas scientific
  • Un circuit de mesure de EZO PH
  • 2 Cartes de support EZO vers USB
  • 2 câbles mini USB -> USB
  • Optionnellement, une imprimante 3D

Partie 1: Préparation du matériel

Comme pour chaque projet que je fais avec un raspberry pi, vous devez commencer par créer une carte SD (voir les parties de 1 à 4 de mon ancine poste http://miniprojets.net/index.php/2019/05/13/jeedom-ou-comment-domotiser-sa-maison-en-quelques-clics/)

Maintenant nous pouvons préparer le matériel physique.

Dans un premier temps, nous devons faire une légère modification sur le shield Dragino car certaines versions ont un défaut et il faut souder en elles les pins 22 et 24. (Pour plus d’information, je vous invite à aller vous le wiki https://wiki.dragino.com/index.php?title=Lora_Shield)

Maintenant je vous propose d’imprimer en 3D le boitier pour la raspberry et le shield Dragino mais cela n’est pas nécessaire pour la suite du projet, c’est juste que je vais l’installer dans mon garage et j’aimerai une installation propre.

https://www.thingiverse.com/thing:3352448

Ainsi que le support pour maintenir en place les cartes de support EZO vers USB.

https://www.thingiverse.com/thing:1561906

Une fois cela fait, nous pouvons les monter de la façon suivante:

On commence par mettre la raspberry dans le support bas du boitier

Puis on monte la pièce intermédiaire et le chapeau.

Ensuite on fixe les 2 cartes supports

On assemble le tout sur le boitier et on branche les 2 câbles USB

On peux enfin mettre en place le système.

Avant de plonger la sonde de PH, il faudra faire sa calibration. Pour cela, je modifierai mon article un peu plus tard car je n’ai pas le matériel sous la main à cause de la situation actuelle….

Partie 2: Identification des sondes

Pour cette partie, je me base sur la documentation fournie par AtlasScientific (comme d’habitude je vous mets la copie ci-dessous).

Dans un premier temps, il faut rentrer en SSH sur la raspberry pi puis télécharger depuis le git le code nécessaire avec la commande suivante:

Il faut maintenant installer et paramétrer les modules nécessaire avec les commandes suivantes:

Copier en remplaçant le contenu du fichier 99-libftdi.rules par la ligne suivante:

Faites un Ctrl+X, puis y pour sauvegarder.

Redemarrez le service udev avec la commande suivante:

Vérifiez que dans le fichier /usr/local/lib/python3.7/dist-packages/pylibftdi/driver.py pour la ligne qui contient USB_PID_LIST vous avez exactement cela USB_PID_LIST = [0x6001, 0x6010, 0x6011, 0x6014, 0x6015] grâce à la commande suivante:

puis faite un Ctrl+W et tapez USB_PID_LIST, puis entrée.

Si jamais il manque 0x6015, rajoutez le en faite un Ctrl+X, puis Y.

Maintenant tapez la commande suivante:

Normalement vous devriez avec une réponse de ce genre:

Ce qui correspond à nos 2 capteurs.

Maintenant tapez les commandes suivantes:

Nous allons modifier le fichier ftdi car avec python3 la fonction decode n’est plus nécessaire. Pour cela on tape la commande:

Puis on recherche decode avec le Ctrl+w

On tombe sur la ligne suivante:

il suffit de supprimer le “.decode(‘latin1’)” ce qui donne

Faites un Ctrl+x, puis Y

Maintenant, tapez la commande suivante:

Vous aurez le choix suivant:

Tapez par exemple 0 ou 1 au choix (ici je tape 1), vous vous retrouvez avec l’annonce suivante:

Tapez la commande R (Read (lecture)) puis taper sur Entrée. Après quelques secondes, vous aurez le résultat suivant:

Comme je sais que l’eau est à environ 23°C (mesure fait via un thermomètre simple) cela me renseigne que le capteur DO009MWF (ayant pour index 1) est mon capteur de PH et donc que le capteur DO009J4O (ayant pour index 0) est mon capteur de température.

Je mets ici les 2 pdfs correspondant aux 2 capteurs afin de permettre de s’amuser avec les différentes commandes possibles (étalonnage, mesure continue,….)

Voila nous avons identifié les 2 capteurs et nous pouvons passer à la suite afin de permettre la lecture des 2 capteurs toutes les 15 minutes, la sauvegarde de la valeur puis leur envoie via Lora.

Partie 3: Lecture et enregistrement des valeurs des sondes

Maintenant, nous allons créer un script qui va permettre de lire les valeurs des capteurs puis de sauvegarder leur valeur dans 3 fichiers distincts (1 pour l’historisation, 1 pour la valeur actuelle de la température mais retravaillé pour la transmission et 1 pour la valeur actuelle du PH).

Pour cela, il faut créer un fichier avec la commande suivante:

Puis collez le code suivant:

Vérifiez que les index sont corrects pour vos capteurs (ici)

et modifiez en cas où

Ce code un fois lancé va lire la valeur du capteur de température ainsi que celui du capteur de PH puis les enregistrer dans les fichiers et attendre 60 secondes avant de recommencer.

Faites un Ctrl+X, puis Y.

Maintenant, on va créer un service qui se lancera ce script au démarrage de la raspberry pi.

Pour cela, il faut faire les commandes suivantes:

Maintenant, il faut coller le code suivant:

Faites un Ctrl+X, puis Y.

Maintenant on met en route le service via les commandes suivantes:

Maintenant, nous allons vérifier que l’enregistrement fonctionne bien avec la commande suivante:

On se retrouve avec l’affichage suivant:

Ce qui correspond pour la première colonne au timestamp, la seconde à la température et la troisième au PH.

on vérifie aussi pour les valeurs actuelles avec les commandes:

Qui nous donne 61.463 (car on a rajouté 40° afin de n’avoir que des chiffres positifs pour l’envoi)

et la commande

qui nous donne 8.048

Voila maintenant que les données sont formatées et enregistrées, nous pouvons passer à leur envoi via le réseau Lora

Partie 4: Préparation de l’environnement LORA sur thethingsnetwork

Dans un premier temps, il faut vous inscrire sur TTN

https://www.thethingsnetwork.org/

Quand vous êtes inscrit et loggé, cliquez sur Console puis Application

Cliquez maintenant sur add application

Remplissez les cases vides comme ci-dessous (c’est un exemple que j’ai fait avec ma raspberry qui se situe dans le garage ^^)

La prochaine étape consiste a ajouter un appareil (device) donc cliquez sur register device

Remplissez le Device ID avec un nom du genre sensors_from_dragino. (car c’est un shield dragino que j’utilise ^^)

Cliquez sur les deux flèches sous le champ Device EUI ce qui le généra de façon automatique

Et finalement cliquez sur Register (Surtout pas sur Cancel car si vous cliquez dessus, vous perdez votre configuration en cours et cela est peu stupide…. Non non je n’ai jamais fait cela… Bon Ok peut-être une fois quand j’étais jeune…)

Normalement vous devriez avoir une nouvelle page avec les identifiants pour connecter votre Lopy sur le réseau Lora

Maintenant que nous avons les bonnes informations, nous pouvons retourner sur la raspberry pi pour coder la partie Lora

Partie 5: Code LORA avec un dragino

Dans un premier temps, il faut télécharger le programme avec la commande suivante:

Une fois cela fait, allez dans le dossier lmic-rpi-lora-gps-hat/examples/periodic/

Maintenant, il faut modifier le fichier sensor.c

On modifie la partie Read data de la façon suivante:

On sauvegarde avec ctrl+x

Puis, nous allons modifier le fichier main.c

Ajoutez les lignes suivantes en dessous de #include “lmic.h” #include “debug.h”

Dans la partie CONFIGURATION renseignez les clefs APPEUI, DEVEUI et DEV KEY avec les informations TTN respectives Application EUI, Device EUI et App Key

ATTENTION!!!! Pour les APPEUI et DEVEUI, il faut inverser l’ordre des hexas, c’est à dire que par exemple sur TTN, vous avez la clef Device EUI: 0127356F2894472B, il faudra écrire pour DEVEUI: 0x2B, 0x47, 0x94, 0x28, 0x6F, 0x35, 0x27, 0x01.

Seul App Key garde le même sens de lecture!

Voila ce que cela donne par exemple:

Maintenant, il faut aussi modifier la partie UTILIY JOB de la façon suivante:

On fait une sauvegarde avec ctrl+x

Maintenant, on compile le code

on test le programme avec la commande suivante:

on devrait avoir le retour suivant:

On vérifie sur TTN que tout est ok en allant sur l’onglet DATA

Si tout est bon, repérez bien le numéro de Port. Cela servira pour la suite.

on peux créer le service lora-node pour rendre automatique celui-ci

Pour cela on fait les commande suivantes:

On remplile fichier de la façon suivante:

On sauvegarde avec ctrl+x et on execute les commandes suivantes:

Nous devons avoir le retour suivant:

C’est ok? Parfait! maintenant on va passer à la partie décodage

Partie 6: Décodage de la Trame Lora

Il faut aller dans l’onglet Applications > capteurs_garage > Payload Formats

On renseigne le code suivant dans la partie decoder

On va tester pour voir si cela fonctionne pour cela dans Payload, mettez 5C 24 14 46 et cliquez sur Test

Si tout est ok, on sauvegarde avec le bouton situé en bas. Voilà nous avons réussi à décoder la trame et elle sera ainsi tout le temps décodée.

Partie 7: Récupérer les données sur Jeedom

Pour cette partie, on va utiliser le plugin LoRa Node for TTN (Attention le plugin est payant, j’écrirai un article sur une solution gratuite utilisant MQTT un peu plus tard)

Pour cela dans le market de Jeedom téléchargé le plugin et activé le, il n’y a pas de configuration spécifique.

Maintenant allez dans le plugin en cliquant sur Plugins > Protocole domotique > Lora Node for TTN

Cliquez sur Ajouter un équipement et donnez lui un nom

Remplissez les informations suivantes: Application ID, Device ID et Port

Pensez à mettre Visible et sauvegardez

Copiez l’adresse avec l’apikey en bas de la page et renseignez Europe pour le Sélection du serveur TTN (Région)

Maintenant allez sur TTN et cliquez sur l’onglet Applications >capteurs_garage > Integrations

Cliquez sur + add integration

Choisissez HTPP Integration

Maintenant, remplissez les données suivantes Process ID, choisissez default key et collez l’URL prise dans Jeedom (ATTENTION, Il faut avoir ouvert et redirigé les ports correctement de sa box afin d’avoir accès à Jeedom depuis l’extérieur, je ferai un article prochainement dessus)

Sauvegardez et maintenatnt retournez sur Jeedom.

Si tout est paramétré correctement, on devrait voir apparaitre à la prochaine remontée les données issues de TTN. Notre script Lora remontant les données toutes les 15 minutes, nous avons le temps de boire un café ^^

Après cette pause café, on vérifie….

Nous pouvons même historiser…

Voilà, maintenant vous êtes capable de faire le monitoring d’un bassin via une connexion Lora et remonter les données dans Jeedom.

J’espère que cela vous aidera, n’hésitez pas à poser des questions ou des updates.

Jérôme Ferrari