Je suis actuellement en train de tester la « box » domotique Gladys, j’avais essayé il y a quelques années, mais j’étais vite passé sur Domoticz où j’avais trouvé plus de tuto. La nouvelle version est fluide, belle, et répond à mes besoins. Dans l’optique de faire communiquer l’ensemble de mes outils avec la Gladys, j’ai décidé de me tourner vers le protocole MQTT qui semble tout désigné et, comme le hasard est bien fait, cela est déjà présent sur Gladys ; je me décharge donc de la partie installation du broker et de sa configuration en faisant une simple référence à la documentation de Gladys, qui est limpide !
Pré-requis
installation sur le Raspberry qui envoie les informations:
pip install paho-mqtt
Script
Après quelques tests voici le code :
#!/usr/bin/python3 # coding: utf-8 import paho.mqtt.client as mqtt import time # valeur a transmettre # à compléter en fonction des besoins value = 14 # identification des erreurs de connexion # 0: Connection successful # 1: Connection refused – incorrect protocol version # 2: Connection refused – invalid client identifier # 3: Connection refused – server unavailable # 4: Connection refused – bad username or password # 5: Connection refused – not authorised # 6-255: Currently unused. def on_connect(client, userdata, flags, rc): if rc==0: client.connected_flag=True #set flag print("Connexion OK") else: print("Pas de connexion, erreur : code=",rc) # publication des données def on_publish(client, userdata, result): print("publication faite\n") pass # création du flag mqtt.Client.connected_flag = False # adresse du broker broker="ip_du_broker" # création de l'instance client = mqtt.Client("identification_instance") # username et mdp de gladys pour le brocker client.username_pw_set(username="nom_du_broker", password="mot_de_passe_du_broker") # On appelle les fonctions de callback client.on_connect = on_connect client.on_publish = on_publish # On lance la boucle client.loop_start() print("Connexion au broker ",broker) client.connect(broker) # connexion au broker while not client.connected_flag: # attente du retour du flag print("En attente de la boucle") time.sleep(1) print("Dans la boucle") # indiquer le topic du brocker (cf parametrage de gladys) client.publish("Indiquer_code_topics", value) # Fin de la boucle client.loop_stop() # Deconnexion client.disconnect()
Reste a compléter : l’ip du broker, le nom de connexion et le mot de passe, ainsi que le canal où publier ; toutes ces informations, dans le cadre de l’usage de Gladys, sont détaillé dans la documentation mentionnée plus haut.
J’ai mis le contenu du code dans un fichier send_mqtt.py, puis lancer la commande python send_mqtt.py et cela fonctionne.
Le résultat sur Gladys, en l’occurrence la température de l’étable (oui il fait très doux en ce mois de janvier). Cela me permettra de rassembler les informations de mes différents Raspberry sur une seule interface.
sources
- https://www.framboise314.fr/utiliser-le-protocole-mqtt-pour-communiquer-des-donnees-entre-2-raspberry-pi/
- http://www.steves-internet-guide.com/publishing-messages-mqtt-client/
- http://www.steves-internet-guide.com/subscribing-topics-mqtt-client/
- http://www.steves-internet-guide.com/client-connections-python-mqtt/
- https://www.framboise314.fr/wp-content/uploads/2018/06/mqtt-dht22.txt
- https://gladysassistant.com/fr/docs/integrations/mqtt/