|
@@ -1,43 +1,18 @@
|
|
|
# -*- coding: utf-8 -*-
|
|
# -*- coding: utf-8 -*-
|
|
|
# pip install paho-mqtt
|
|
# pip install paho-mqtt
|
|
|
-import paho.mqtt.client as mqtt
|
|
|
|
|
import base64
|
|
import base64
|
|
|
import hmac
|
|
import hmac
|
|
|
|
|
+import paho.mqtt.client as mqtt
|
|
|
import time
|
|
import time
|
|
|
from urllib.parse import quote
|
|
from urllib.parse import quote
|
|
|
|
|
+from OneNet_token import cal_token
|
|
|
|
|
|
|
|
DEV_ID="950698937" #设备ID
|
|
DEV_ID="950698937" #设备ID
|
|
|
PRO_ID = "522417" #产品ID
|
|
PRO_ID = "522417" #产品ID
|
|
|
DEV_NAME='Air_Conditioning_IR'
|
|
DEV_NAME='Air_Conditioning_IR'
|
|
|
accesskey="dgEP7iOL2/1kVNc1ykDvIhXSVqhb0tLnKinjU2RYpDs="
|
|
accesskey="dgEP7iOL2/1kVNc1ykDvIhXSVqhb0tLnKinjU2RYpDs="
|
|
|
|
|
+SERVER = 'mqtts.heclouds.com'
|
|
|
|
|
|
|
|
-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响应时的回调。也就是申请连接,服务器返回结果是否成功等
|
|
# 当客户端收到来自服务器的CONNACK响应时的回调。也就是申请连接,服务器返回结果是否成功等
|
|
|
def on_connect(client, userdata, flags, rc):
|
|
def on_connect(client, userdata, flags, rc):
|
|
@@ -50,8 +25,6 @@ def on_publish(client, userdata, mid):
|
|
|
print(str(mid))
|
|
print(str(mid))
|
|
|
|
|
|
|
|
import random
|
|
import random
|
|
|
-import json
|
|
|
|
|
-# 从树莓派发布到服务器的数据内容
|
|
|
|
|
def data(ds_id,value):
|
|
def data(ds_id,value):
|
|
|
message = {
|
|
message = {
|
|
|
"id": int(ds_id),
|
|
"id": int(ds_id),
|
|
@@ -67,21 +40,22 @@ def data(ds_id,value):
|
|
|
}]
|
|
}]
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- # print(message)
|
|
|
|
|
- message = json.dumps(message).encode('ascii')
|
|
|
|
|
|
|
+ # message = json.dumps(message).encode('ascii')
|
|
|
|
|
+ print("publish json:", bytes("{}".format(message), 'ascii'))
|
|
|
|
|
+ message = bytes("{}".format(message), 'ascii')
|
|
|
return message
|
|
return message
|
|
|
|
|
|
|
|
def main():
|
|
def main():
|
|
|
- passw=token(PRO_ID,accesskey)
|
|
|
|
|
|
|
+ passw = cal_token(PRO_ID, accesskey)
|
|
|
print(passw)
|
|
print(passw)
|
|
|
username = PRO_ID
|
|
username = PRO_ID
|
|
|
- client = mqtt.Client(DEV_NAME,protocol=mqtt.MQTTv311)
|
|
|
|
|
|
|
+ client = mqtt.Client(DEV_NAME, protocol=mqtt.MQTTv311)
|
|
|
#client.tls_set(certfile='/Users/mryu/PycharmProjects/MyProject/onenet/MQTTS-certificate.pem') #鉴权证书
|
|
#client.tls_set(certfile='/Users/mryu/PycharmProjects/MyProject/onenet/MQTTS-certificate.pem') #鉴权证书
|
|
|
client.on_connect = on_connect
|
|
client.on_connect = on_connect
|
|
|
client.on_publish = on_publish
|
|
client.on_publish = on_publish
|
|
|
client.on_message = on_message
|
|
client.on_message = on_message
|
|
|
|
|
+ client.connect(SERVER, port=1883, keepalive=300)
|
|
|
client.username_pw_set(PRO_ID, passw)
|
|
client.username_pw_set(PRO_ID, passw)
|
|
|
- client.connect('183.230.40.96', port=1883, keepalive=1200)
|
|
|
|
|
|
|
|
|
|
# 按照OneENT要求的格式,配置数据发布和订阅的主题
|
|
# 按照OneENT要求的格式,配置数据发布和订阅的主题
|
|
|
topic_dp = '$sys/%s/%s/dp/post/json/+' % (username, DEV_NAME) # 设备上报数据主题
|
|
topic_dp = '$sys/%s/%s/dp/post/json/+' % (username, DEV_NAME) # 设备上报数据主题
|