[Domotique] Mise en place d’un serveur MQTT sur Raspberry

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