Les User properties permettent d'introduire des métadonnées aux messages MQTT. Ces User properties prennent la forme d' un tableau de paires clés/valeur UTF-8 transportées dans le champ de propriété du message MQTT.
Puisque les user properties sont définies par l'utilisateur elles n'ont de signification que pour l'application de l'utilisateur.
Les user properties peuvent être envoyées entre le client et le serveur ou de client à client selon le type de message utilisé pour les transmettre.
Un User properties définit dans un message de connexion par exemple ne sera pas transmis aux clients ayant souscris au broker alors qu' un user properties défini dans un message publish sera transmis.
Les user properties associés au message de connexion sont envoyé du client vers le serveur et ne sont pas transmis aux clients écoutant sur le broker.
Ils sont utilisés pour envoyer des informations au serveur. Le serveur doit être en mesure d’utiliser ces propriétés. Elles doivent être définies côté serveur.
Le client du module Python Paho depuis sa version 1.5.1 supporte MQTTv5
Pour utiliser le protocole MQTTv5, il faut bien spécifier la version du protocole à utiliser lors de l'instanciation du client:
from paho.mqtt.client import Client as MqttClient from paho.mqtt.client import MQTTv5 as MQTTv5 aClient = MqttClient("mqtt5_client", protocol=MQTTv5)
from paho.mqtt.properties import Properties from paho.mqtt.packettypes import PacketTypes properties=Properties(PacketTypes.CONNECT) properties.MaximumPacketSize=20 aClient.connect(host,port,properties=properties)
from paho.mqtt.properties import Properties from paho.mqtt.packettypes import PacketTypes aProp = Properties(PacketTypes.PUBLISH) from datetime import datetime aDateString = "25/12/2022 09:00:00" aDateTime = datetime.strptime(aDateString, '%d/%m/%Y %H:%M:%S') ts = int(aDateTime.timestamp()) aProp.UserProperty = [("timestamp", str(ts))] # vérifier les user properties sont des paires clés/valeurs de type chaines UTF-8 aProp.json() {'UserProperty': [('timestamp', '1671955200')]} aClient.connect("192.168.1.94", port=1883) aClient.publish(topic="synop/7630",payload='{"t":12.3,"u":72}',qos=1,properties=aProp)