OneNet_communicate.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. # -*- coding: utf-8 -*-
  2. # pip install paho-mqtt
  3. import base64
  4. import hmac
  5. import paho.mqtt.client as mqtt
  6. import time
  7. from urllib.parse import quote
  8. from OneNet_token import cal_token
  9. DEV_ID="950698937" #设备ID
  10. PRO_ID = "522417" #产品ID
  11. DEV_NAME='Air_Conditioning_IR'
  12. accesskey="dgEP7iOL2/1kVNc1ykDvIhXSVqhb0tLnKinjU2RYpDs="
  13. SERVER = 'mqtts.heclouds.com'
  14. # 当客户端收到来自服务器的CONNACK响应时的回调。也就是申请连接,服务器返回结果是否成功等
  15. def on_connect(client, userdata, flags, rc):
  16. print("连接结果:" + mqtt.connack_string(rc))
  17. # 从服务器接收发布消息时的回调。
  18. def on_message(client, userdata, msg):
  19. print(str(msg.payload,'utf-8'))
  20. #当消息已经被发送给中间人,on_publish()回调将会被触发
  21. def on_publish(client, userdata, mid):
  22. print(str(mid))
  23. import random
  24. def data(ds_id,value):
  25. message = {
  26. "id": int(ds_id),
  27. "dp": {
  28. "count": [{ # 距离传感器采集的数据
  29. "v": value
  30. }],
  31. "random": [{ # Python产生的随机数
  32. "v": random.randint(20,80)
  33. }],
  34. "talk": [{ # Python产生的随机数
  35. "v": "fuck you bitch!%d"%(value*random.randint(20,80))
  36. }]
  37. }
  38. }
  39. # message = json.dumps(message).encode('ascii')
  40. print("publish json:", bytes("{}".format(message), 'ascii'))
  41. message = bytes("{}".format(message), 'ascii')
  42. return message
  43. def main():
  44. passw = cal_token(PRO_ID, accesskey)
  45. print(passw)
  46. username = PRO_ID
  47. client = mqtt.Client(DEV_NAME, protocol=mqtt.MQTTv311)
  48. #client.tls_set(certfile='/Users/mryu/PycharmProjects/MyProject/onenet/MQTTS-certificate.pem') #鉴权证书
  49. client.on_connect = on_connect
  50. client.on_publish = on_publish
  51. client.on_message = on_message
  52. client.connect(SERVER, port=1883, keepalive=300)
  53. client.username_pw_set(PRO_ID, passw)
  54. # 按照OneENT要求的格式,配置数据发布和订阅的主题
  55. topic_dp = '$sys/%s/%s/dp/post/json/+' % (username, DEV_NAME) # 设备上报数据主题
  56. topic_cmd = '$sys/%s/%s/cmd/#' % (username, DEV_NAME) # 设备接受命令主题
  57. topic_cmds = '$sys/%s/%s/cmd/request/' % (username, DEV_NAME) # 设备接受命令主题
  58. topic_publish = '$sys/%s/%s/dp/post/json' %(username,DEV_NAME)
  59. client.loop_start()
  60. count = 0
  61. while True:
  62. count += 1
  63. # 树莓派循环发布数据到OneNET
  64. client.publish(topic=topic_publish, payload=data(count, random.randint(0,100)), qos=1)
  65. print("-------------------------------------------------------------------------------")
  66. time.sleep(3)
  67. if __name__ == '__main__':
  68. main()