今天心血來潮想通過MQTT協議連接中移物聯網OneNet。然後找了個MQTT客戶端——MQTT.fx。
MQTT.fx 是目前主流的mqtt客戶端,可以快速驗證是否可以與IoT Hub 服務交流發佈或訂閱消息。設備將當前所處的狀態作爲MQTT主題發送給IoT Hub,每個MQTT主題topic具有不同等級的名稱,如“小區/區域/車位閒置” 。MQTT代理服務器將接收到的主題topic發送給給所有訂閱的客戶端。
☛ 點擊下載MQTT.fx ☚
☞ 轉到中移物聯網OneNet ☜
1. 創建物聯網設備
- 註冊–>登錄–>開發者中心–> 添加產品
- 添加設備
然後大概就是醬紫咯
2. MQTT.fx連接OneNet
- 設置–>名稱–>服務器地址/端口–>產品的名稱或ID
服務地址
MQTTS 接入套件支持標準 MQTT V3.1.1 版本,支持TLS加密,接入服務地址如下
連接協議 | 證書 | 地址 | 端口 |
---|---|---|---|
MQTTS | 證書下載 | 183.230.40.16 | 8883 |
注意:要下載證書
設備安全認證
設備創建時,平臺爲每個設備分配了唯一的 key,設備登錄時需要使用 通過 key 計算出的訪問token 來進行訪問安全認證。
設備可通過MQTT connnect報文進行登錄,connect報文中三要素填寫方法如下:
參數 | 是否必須 | 參數說明 | 示例 |
---|---|---|---|
clientId | 是 | 設備名稱 | A2-Area |
username | 是 | 平臺分配的產品ID | 288XXX |
password | 是 | 填寫經過 key 計算的 token | Trc9tlrmS18v**************************1BQt756wfPE= |
- 如何查看password
注:需要經過處理才能在MQTT.fx 中使用
MQTT.fx中Password的處理
- 直接上代碼吧
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:OneNet.py
import base64
import hmac
import time
from urllib.parse import quote
def token(name,access_key):
version = '2018-10-31'
res = id
et = str(int(time.time()) + 3600)
method = 'sha1'
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()
sign = quote(sign, safe='')
res = quote(res, safe='')
token = 'version=%s&res=%s&et=%s&method=%s&sign=%s' % (version, res, et, method, sign)
return token
if __name__ == '__main__':
id = 'products/288XXX/devices/A2-Area' #設備目錄,根據自己的目錄修改
access_key = 'Trc9tlrmS18v**************************1BQt756wfPE='
print(token(id,access_key))
運行,得到Password然後複製到MQtt.fx 中的Password即可。
- MQTT.fx設置
插入證書
- 連接
連接成功
消息的發佈/訂閱下週再繼續調試吧,18:36下班咯,拜!!!!