La fonction publish permet de mettre, en file d'attente d'envoi, un message pour un topic donné. Le message sera envoyé ensuite vers le broker par la boucle de gestion des messages qui appellera une fonction préalablement définie.
Les paramètres important de cette fonction sont :
C'est une chaîne de caractères contenant le topic d'envoi. Ce premier paramètre est obligatoire.
C'est le message MQTT qui sera envoyé. Ce second paramètre est facultatif et, en absence de ce dernier, un message vide sera envoyé.
C'est la qualité de service demandée pour l'envoie du message. Ce troisième paramètre est facultatif et a pour valeur par défaut 0.
Remarque : Un quatrième paramètre facultatif peut également être utilisé. Pour plus d'informations voir le site de paho-mqtt.
La fonction publish retourne un objet contenant les attributs suivant :
Cela donne un code de retour pour savoir si la fonction n'a pas rencontré de problème
Cela fournit un identifiant du message mis en file d'attente qui pourra ensuite être comparé avec l'identifiant de message transmis à la fonction callback on_publish
Ce boolean indique True quand le message a été réceptionné par le broker
Remarque : L'objet dispose également de la méthode wait_for_publish() pour attendre que le broker ait réceptionné le message.
Si on souhaite faire une action lorsque le message a été transmis au broker, on définit, au début de notre programme, une fonction callback qui sera appelé quand le broker aura accepté le message. La fonction callback sera appelée avec les 3 arguments suivant (dont vous pouvez changer les noms si vous le souhaitez) :
Ce premier paramètre est une copie de l'objet de gestion de MQTT utilisé pour cette connexion
Ce deuxième paramètre est la structure de données utilisateur que l'on a passée à la connexion
Ce troisième paramètre est l'identifiant du message envoyé que l'on pourra comparer avec celui obtenu en retour de la fonction publish.
# -*- coding:Utf-8 -*- import paho.mqtt.client as mqtt import time def on_connect(client,userdata,flags,result): try: if (result==0): client.subscribe("/junia/#",2) else: print("erreur de connexion") quit(0) except Exception as e: print(e) quit(0) def on_message(client,userdata,message): try: print("Received message '" + message.payload.decode("utf8") + "' on topic '" + message.topic + "' with QoS " + str(message.qos)) except Exception as e: print(e) def on_publish(client,userdata,mid): try: print("message envoyé mid=",mid) except Exception as e: print(e) mqttc = mqtt.Client() mqttc.on_connect = on_connect mqttc.on_message = on_message mqttc.on_publish = on_publish mqttc.connect("test.mosquitto.org", 1883, 60) mqttc.loop_start() while True: # lecture des capteurs s=mqttc.publish("/junia/capteur/1","Hello Word !") print("message mis en attente mid=",s.mid) time.sleep(10)