communicate.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. # -*- coding: utf-8 -*-
  2. # pip install paho-mqtt
  3. import paho.mqtt.client as mqtt
  4. import time
  5. from urllib.parse import quote
  6. from mylib import cal_token, payload_data
  7. import random
  8. SERVER = 'mqtts.heclouds.com'
  9. PRO_ID = "522417" #产品ID
  10. DEV_NAME='local_python'
  11. accesskey="dgEP7iOL2/1kVNc1ykDvIhXSVqhb0tLnKinjU2RYpDs="
  12. # DEV_ID = "950698937" # 设备ID
  13. username = PRO_ID
  14. password = "version=2018-10-31&res=products%2F522417&et=1685551369&method=sha1&sign=9l9gkFQx7A%2B7B3fu8uU%2F089azps%3D"
  15. # 当客户端收到来自服务器的CONNACK响应时的回调。也就是申请连接,服务器返回结果是否成功等
  16. def on_connect(client, userdata, flags, rc):
  17. print("连接结果:" + mqtt.connack_string(rc))
  18. # 从服务器接收发布消息时的回调。
  19. def on_message(client, userdata, msg):
  20. print("on_message:" ,str(msg.payload,'utf-8'))
  21. #当消息已经被发送给中间人,on_publish()回调将会被触发
  22. def on_publish(client, userdata, mid):
  23. print(str(mid))
  24. def main():
  25. # password = cal_token(PRO_ID, accesskey)
  26. # passw = password
  27. print(password)
  28. username = PRO_ID
  29. client = mqtt.Client(DEV_NAME, protocol=mqtt.MQTTv311)
  30. #client.tls_set(certfile='/Users/mryu/PycharmProjects/MyProject/onenet/MQTTS-certificate.pem') #鉴权证书
  31. client.on_connect = on_connect
  32. client.on_publish = on_publish
  33. client.on_message = on_message
  34. client.connect(SERVER, port=1883, keepalive=300)
  35. client.username_pw_set(PRO_ID, password)
  36. # 按照OneENT要求的格式,配置数据发布和订阅的主题
  37. topic_dp = '$sys/%s/%s/dp/post/json/+' % (username, DEV_NAME) # 设备上报数据主题
  38. topic_cmd = '$sys/%s/%s/cmd/#' % (username, DEV_NAME) # 设备接受命令主题
  39. topic_cmds = '$sys/%s/%s/cmd/request/' % (username, DEV_NAME) # 设备接受命令主题
  40. topic_publish = '$sys/%s/%s/dp/post/json' %(username,DEV_NAME)
  41. "$sys/{}/{}/dp/post/json/accepted".format(username,DEV_NAME)
  42. client.loop_start()
  43. count = 0
  44. while True:
  45. count += 1
  46. dat = {
  47. "temperatrue": [{
  48. "v": random.randint(0, 100),
  49. }],
  50. "power": [{
  51. "v": random.randint(33, 55)/10,
  52. "t": time.time()
  53. }],
  54. "status": [{
  55. "v": {
  56. "color": "blue",
  57. "led1": "on",
  58. "led2": "off",
  59. }
  60. },
  61. {
  62. "v": {
  63. "color": "red"
  64. },
  65. "t": time.time()
  66. }
  67. ]
  68. }
  69. payload = payload_data(count, dat)
  70. client.publish(topic=topic_publish, payload=payload, qos=1)
  71. print("topic_publish: ", topic_publish)
  72. print("payload: ", payload)
  73. print("-------------------------------------------------------------------------------")
  74. time.sleep(3)
  75. if __name__ == '__main__':
  76. main()