# -*- coding: utf-8 -*- # pip install paho-mqtt import paho.mqtt.client as mqtt import base64 import hmac import time from urllib.parse import quote DEV_ID = "950698937" # 设备ID PRO_ID = "522417" # 产品ID DEV_NAME='Air_Conditioning_IR' accesskey = "dgEP7iOL2/1kVNc1ykDvIhXSVqhb0tLnKinjU2RYpDs=" def token(id,access_key): #官方文档给出的核心秘钥计算算法 version = '2018-10-31' res = 'products/%s' % id # 通过产品ID访问产品API # 用户自定义token过期时间 et = str(int(time.time()) + 3600) # 签名方法,支持md5、sha1、sha256 method = 'sha1' # 对access_key进行decode key = base64.b64decode(access_key) # 计算sign org = et + '\n' + method + '\n' + res + '\n' + version sign_b = hmac.new(key=key, msg=org.encode(), digestmod=method) sign = base64.b64encode(sign_b.digest()).decode() # value 部分进行url编码,method/res/version值较为简单无需编码 sign = quote(sign, safe='') res = quote(res, safe='') # token参数拼接 token = 'version=%s&res=%s&et=%s&method=%s&sign=%s' % (version, res, et, method, sign) return token # 当客户端收到来自服务器的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)) def main(): passw=token(PRO_ID,accesskey) print(passw) 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('mqtts.heclouds.com', port=1883, keepalive=300) client.username_pw_set(PRO_ID, passw) client.loop_forever() if __name__ == '__main__': main()