Table des matières

, ,

:TODO_DOCUPDATE:

MQTTv5 : User Properties

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.

Les nombres devront donc être convertis en chaînes de caractères.

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.

User properties à la connexion

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.

User properties à publier

Le client du module Python Paho depuis sa version 1.5.1 supporte MQTTv5

Client Python Paho

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)

Références