import paho.mqtt.client as mqtt from paho.mqtt.properties import Properties from paho.mqtt.reasoncodes import ReasonCodes from paho.mqtt.subscribeoptions import SubscribeOptions from paho.mqtt.packettypes import PacketTypes from time import sleep def gen_publish_properties(): publish_properties = Properties(PacketTypes.PUBLISH) publish_properties.UserProperty = ("A"*65535, "A"*65535) #0x26 publish_properties.UserProperty = ("B"*65535, "B"*65535) #0x26 #publish_properties.UserProperty = ("C"*65535, "C"*65535) #0x26 return publish_properties def on_connect(client, userdata, flags, reasonCode, properties): global on_connect_received print("\nConnection result: "+ mqtt.connack_string(reasonCode) + " Code: "+ reasonCode.getName()) if (userdata): print("-Userdata "+ str(userdata)) if (flags): print("-Flags "+ str(flags)) if (properties): print("-Properties"+ str(properties)) on_connect_received = True def on_publish(client, userdata, mid): global on_publish_received print("\nPublished. Message ID: "+str(mid)) on_publish_received = True def set_callbacks(client): client.on_connect = on_connect client.on_publish = on_publish client = mqtt.Client(client_id="MQTT5_publisher", protocol=mqtt.MQTTv5) set_callbacks(client) on_connect_received = False on_publish_received = False payload = "0" * 65535 client.will_set("will/topic", payload) client.connect("192.168.99.100", port=1883) client.loop_start() while(not on_connect_received): sleep(1) payload2 = "Z" * 1 client.publish("topic", payload2, properties=gen_publish_properties()) while(not on_publish_received): sleep(1) rc = ReasonCodes(PacketTypes.DISCONNECT, "Disconnect with Will message", 4) client.disconnect(reasoncode=rc)