{{tag>sysadmin netadmin mqtt}}
: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 =====
* http://www.steves-internet-guide.com/examining-mqttv5-user-properties/
* http://www.steves-internet-guide.com/mqttv5-properties/
* http://www.steves-internet-guide.com/python-mqtt-client-changes/
* https://stackoverflow.com/questions/39523837/mqtt-message-timestamp