test2.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import paho_mqtt3a as mqttv3, time, random
  2. import contextlib
  3. print dir(mqttv3)
  4. hostname = "localhost"
  5. clientid = "myclientid"
  6. topic = "test2_topic"
  7. def deliveryComplete(context, msgid):
  8. print "deliveryComplete", msgid
  9. def connectionLost(context, cause):
  10. print "connectionLost"
  11. print "rc from reconnect is", mqttv3.connect(self.client)
  12. def messageArrived(context, topicName, message):
  13. print "messageArrived", message
  14. #print "clientid", context
  15. #print "topicName", topicName
  16. return 1
  17. def onSuccess(context, successData):
  18. print "onSuccess for", context["clientid"], context["state"], successData
  19. responseOptions = {"context": context, "onSuccess": onSuccess, "onFailure" : onFailure}
  20. #responseOptions = {"context": context}
  21. if context["state"] == "connecting":
  22. context["state"] = "subscribing"
  23. print "rc from subscribe is", mqttv3.subscribe(client, topic, 2, responseOptions)
  24. elif context["state"] == "subscribing":
  25. context["state"] = "publishing qos 0"
  26. print "rc from publish is", mqttv3.send(client, topic, "a QoS 0 message", 0, 0, responseOptions)
  27. elif context["state"] == "publishing qos 0":
  28. context["state"] = "publishing qos 1"
  29. print "rc from publish is", mqttv3.send(client, topic, "a QoS 1 message", 1, 0, responseOptions)
  30. elif context["state"] == "publishing qos 1":
  31. context["state"] = "publishing qos 2"
  32. print "rc from publish is", mqttv3.send(client, topic, "a QoS 2 message", 2, 0, responseOptions)
  33. elif context["state"] == "publishing qos 2":
  34. context["state"] = "finished"
  35. print "leaving onSuccess"
  36. def onFailure(context, failureData):
  37. print "onFailure for", context["clientid"]
  38. context["state"] = "finished"
  39. noclients = 1
  40. myclientid = None
  41. clients = []
  42. for i in range(noclients):
  43. myclientid = clientid+str(i)
  44. rc, client = mqttv3.create("tcp://"+hostname+":1883", myclientid)
  45. #print "client is", hex(client)
  46. print "rc from create is", rc
  47. print "rc from setcallbacks is", mqttv3.setcallbacks(client, client, connectionLost, messageArrived, deliveryComplete)
  48. context = {"client" : client, "clientid" : clientid, "state" : "connecting"}
  49. print "rc from connect is", mqttv3.connect(client, {"context": context, "onSuccess": onSuccess, "onFailure": onFailure})
  50. clients.append(context)
  51. while [x for x in clients if x["state"] != "finished"]:
  52. print [x for x in clients if x["state"] != "finished"]
  53. time.sleep(1)
  54. for client in clients:
  55. if mqttv3.isConnected(client["client"]):
  56. print "rc from disconnect is", mqttv3.disconnect(client["client"], 1000)
  57. time.sleep(1)
  58. mqttv3.destroy(client["client"])
  59. print "after destroy"