Capteur de température et d’humidité sans fil – suite

5
(6)
Capteur sans fil et serveur Jeedom

Seconde partie : intégration des données dans le logiciel domotique Jeedom sur un Raspberry Pi

Dans cette seconde partie du tutoriel, nous allons réaliser la partie réception des données reçues du capteur sans fil et leur intégration dans un serveur domotique Jeedom afin de pouvoir les stocker et les visualiser sur un smartphone par exemple.

Un Raspberry Pi est utilisé pour la partie serveur domotique, car un Arduino n’est pas adapté pour faire tourner un serveur comme Jeedom. En effet un Arduino ne possède pas suffisamment de mémoire et sa puissance de calcul est trop faible. L’intérêt du Raspberry Pi est que nous allons pouvoir facilement y connecter le module radio HC12 via ses GPIO (General Purpose Input Output).

Un script Python va lire régulièrement les données du module radio HC12 et puis va les transmettre au serveur Jeedom en utilisant le protocole MQTT.

Le matériel

Liste du matériel nécessaire pour la partie récepteur et serveur domotique :

  • Raspberry Pi 3 Model B
  • Modules radio HC12

Schéma du montage

On relie le HC12 au port Série (UART) du Raspberry Pi et on utilise une sortie du Raspberry Pi (la GPIO 4 par exemple) afin de contrôler la pin SET du HC12 pour sélectionner son mode normal ou configuration via le script Python.

Raspberry Pi HC12

Installation de Jeedom sur le Raspberry Pi

Il suffit d‘exécuter le script d‘installation après l‘avoir télécharger à partir du github jeedom.

pi@raspberrypi:~ $ wget https://raw.githubusercontent.com/jeedom/core/beta/install/install.sh
pi@raspberrypi:~ $ chmod u+x install.sh 
pi@raspberrypi:~ $ sudo ./install.sh 
 

Notez le mot de passe root MySQL indiqué à la fin de l‘installation, il pourra vous être utile ultérieurement.

Vous pouvez ensuite vous connecter au serveur Jeedom depuis un navigateur en tapant l‘adresse IP du Raspberry Pi. Le nom d‘utilisateur initial est admin et le mot de passe est admin également. Vous devrez le changer à la première connexion.

Login Jeedom

Il faudra également vous créer un compte Jeedom market afin d’installer les plugins nécessaires (MQTT).

Il est recommandé de suivre le tutoriel d’installation Jeedom :

https://jeedom.github.io/documentation/installation/fr_FR/index

Mise en place de MQTT

Installez Mosquitto MQTT sur le Raspberry Pi ainsi que Paho MQTT pour avoir accès au broker via le script Python.

pi@raspberrypi:~ $ sudo apt update
pi@raspberrypi:~ $ sudo apt install mosquitto mosquitto-clients python3-paho-mqtt 

Tester le fonctionnement du broker, en publiant un topic et en s‘y abonnant (publier les données sur un terminal et s‘y abonner sur un autre terminal permet de visualiser les échanges facilement).

Terminal 1 : on s‘abonne aux données

pi@raspberrypi:~ $ mosquitto_sub -h localhost -t "sensor/humidite"
pi@raspberrypi:~ $ mosquitto_sub -h localhost -t "sensor/temperature"

Terminal 2 : on publie des données

pi@raspberrypi:~ $ mosquitto_pub -h localhost -t "sensor/temperature" -m 22
pi@raspberrypi:~ $ mosquitto_pub -h localhost -t "sensor/humidite" -m 40

Lorsque des valeurs pour les topics sont publiées on voit leur valeur évoluer dans le terminal dans lequel nous sommes abonnés à ces topics.

Activation du port série du Raspberry Pi

Afin de permettre la communication entre le Raspberry Pi et le module radio HC12, il faut activer la communication sur le port série dans la configuration du Raspberry Pi.

Configuration Raspberry Pi

Script Python

Un script Python récupère les informations du module radio HC12 via le port série, et les publie vers le logiciel domotique Jeedom au travers du broker MQTT.

#!/usr/bin/env python3

import serial
import time
import paho.mqtt.client as mqtt
import RPi.GPIO as GPIO

def on_publish(client,userdata,result):  #create function for callback
    pass

broker_url = "localhost"
broker_port = 1883

client = mqtt.Client()
client.on_publish = on_publish
client.connect(broker_url, broker_port)

client.loop_start()

ser = serial.Serial(port="/dev/serial0",baudrate=9600)
time.sleep(1)
ser.flushInput()

GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.OUT, initial=GPIO.LOW) # set pin 7 (GPIO4) to OUTPUT (SET pin of HC12)
GPIO.output(7, GPIO.LOW) # set HC12 to AT mode
ser.write(b"AT+DEFAULT\n") # Set HC12 to default configuraiton
time.sleep(0.5)
ser.write(b"AT+P4\n") # Set HC12 module to 8dBm
time.sleep(0.5)
GPIO.output(7, GPIO.HIGH) # set HC12 to normal mode
time.sleep(0.5)
    
print("Script ready, listening to HC12 radio messages and publish it")
ser.flushInput()

while True:
    try:        
        size = ser.inWaiting()
        if size > 0:
            received_data = ser.read(size).decode("ascii").split(":")
            print(received_data)
            if ((len(received_data) == 4) and (received_data[0] == 'S1')):
                temperature = received_data[1]
                humidite = received_data[2]
                batterie = received_data[3]
                infot = client.publish("sensor/temperature", payload=temperature, qos=1)
                infot.wait_for_publish()
                infot = client.publish("sensor/humidite", payload=humidite, qos=1)
                infot.wait_for_publish()
                infot = client.publish("sensor/Heure", payload=time.strftime("%H:%M"), qos=1)
                infot.wait_for_publish()
                infot = client.publish("sensor/batterie", payload=batterie, qos=1)
                infot.wait_for_publish()

    except IOError:
        print("restarting serial")
        ser.close()
        ser.open()
    except Exception as e:
        print("exception occured: ", e)
    time.sleep(2)

ser.close()

En dehors de la puissance d’émission, la configuration du module HC12 doit être identique sur le récepteur et sur l’émetteur. Puisque la configuration de l’émetteur est la celle par défaut (FU3, 9600 bauds, canal 1) on configure simplement le récepteur par la commande « AT+DEFAULT ».

Le script boucle sur l’écoute du port série, en attendant un message en provenance du HC12. Le format du message est vérifié afin d’éliminer tout message parasite envoyé par un équipement autre que notre capteur sur le même canal radio.

Le message attendu est du format « S1:XX:YY:ZZ>, aussi le message reçu doit être composé de 4 parties séparées par des « : », dont la première partie doit être « S1 ».

Le script publie les données reçues (température et l’humidité) vers le broker MQTT, en utilisant les topic :

  • sensor/humidite
  • sensor/temperature
  • sensor/barrerie

Afin de pouvoir vérifier l’heure de réception de la dernière mesure, le script publie également le topic suivant qui contient l’heure courante :

  • sensor/heure

Configurer Jeedom pour afficher les informations du capteur

Une fois le script Python exécuté, il suffira de configurer Jeedom afin de récupérer les informations du capteur via le plugin MQTT.

Tout d’abord créer un objet racine « home » via le menu « Outils / Objets / Ajouter »

Ajout capteur Jeedom

Ajouter le plugin MQTT via le menu « Plugins / Market » depuis l’interface Jeedom.

Plugin MQTT Jeedom Market

Une fois installé, activer ce plugin via le menu « Plugin / Configuration » et l’action « Activer » dans le rectangle « Etat »

Capteur MQTT Jeedom
MQTT Jeedom

Ajouter un équipement dans ce plugin MQTT, avec une icône Humidité et Température et dont l’objet parent « home » créé précédemment.

Cocher les cases « Activer » et « Visible ».

Equipement Jeedom

Assurez vous que des données « sensor/temperature »  « sensor/humidite » et « sensor/heure » soient déjà publiées avant de créer l’équipement. Soit en s’assurant que le script Python ai bien reçu les informations du capteur, soit en publiant manuellement des valeurs comme indiqué précédemment. Si ce n’est pas le cas vous devrez redémarrer le « Démon » dans la configuration de plugin MQTT après leur publication pour qu’ils deviennent visibles dans l’équipement.

Les topics seront automatiquement visibles comme commandes de type « info » dans l’équipement. Vous pouvez bien entendu les personnaliser avec une icône et des unités.

Il est également possible de stocker l’historique des valeurs, très pratique pour suivre l’évolution de la température.

Commandes Jeedom

Dans la partie „Dashboard“ vous devriez pouvoir visualiser les valeurs remontées par votre capteur.

Voilà ce tutoriel est terminé, n’hésitez pas à laisser un commentaire !


Votre avis compte, merci 🙂

Cliquez sur une étoile pour voter

Note moyenne : 5 / 5. Nombre de votes : 6

Pas encore de vote pour ce tutoriel

Désolé si cet article ne vous a pas intéressé

Merci de commenter afin que je puisse l’améliorer.

Dites-moi comment améliorer cette page.