# -*- coding: utf-8 -*- # pip install paho-mqtt import base64 import hmac import paho.mqtt.client as mqtt import time from urllib.parse import quote from OneNet_token import cal_token SERVER = 'mqtts.heclouds.com' PRO_ID = "522417" #产品ID DEV_NAME='local_python' accesskey="dgEP7iOL2/1kVNc1ykDvIhXSVqhb0tLnKinjU2RYpDs=" # DEV_ID = "950698937" # 设备ID username = PRO_ID password = "version=2018-10-31&res=products%2F522417&et=1685551369&method=sha1&sign=9l9gkFQx7A%2B7B3fu8uU%2F089azps%3D" # 当客户端收到来自服务器的CONNACK响应时的回调。也就是申请连接,服务器返回结果是否成功等 def on_connect(client, userdata, flags, rc): print("连接结果:" + mqtt.connack_string(rc)) # 从服务器接收发布消息时的回调。 def on_message(client, userdata, msg): print(str(msg.payload,'utf-8')) #当消息已经被发送给中间人,on_publish()回调将会被触发 def on_publish(client, userdata, mid): print(str(mid)) import random def data(ds_id,value): message = { "id": int(ds_id), "dp": { "count": [{ # 距离传感器采集的数据 "v": value }], "random": [{ # Python产生的随机数 "v": random.randint(20,80) }], "talk": [{ # Python产生的随机数 "v": "fuck you bitch!%d"%(value*random.randint(20,80)) }] } } # message = json.dumps(message).encode('ascii') # print("publish json:", bytes("{}".format(message), 'ascii')) message = bytes("{}".format(message), 'ascii') return message def main(): # password = cal_token(PRO_ID, accesskey) # passw = password print(password) username = PRO_ID client = mqtt.Client(DEV_NAME, protocol=mqtt.MQTTv311) #client.tls_set(certfile='/Users/mryu/PycharmProjects/MyProject/onenet/MQTTS-certificate.pem') #鉴权证书 client.on_connect = on_connect client.on_publish = on_publish client.on_message = on_message client.connect(SERVER, port=1883, keepalive=300) client.username_pw_set(PRO_ID, password) # 按照OneENT要求的格式,配置数据发布和订阅的主题 topic_dp = '$sys/%s/%s/dp/post/json/+' % (username, DEV_NAME) # 设备上报数据主题 topic_cmd = '$sys/%s/%s/cmd/#' % (username, DEV_NAME) # 设备接受命令主题 topic_cmds = '$sys/%s/%s/cmd/request/' % (username, DEV_NAME) # 设备接受命令主题 topic_publish = '$sys/%s/%s/dp/post/json' %(username,DEV_NAME) client.loop_start() count = 0 while True: count += 1 payload = data(count, random.randint(0, 100)) client.publish(topic=topic_publish, payload=payload, qos=1) print("topic_publish: ", topic_publish) print("payload: ", payload) print("-------------------------------------------------------------------------------") time.sleep(3) if __name__ == '__main__': main()