本文以夜燈開關為例,介紹如何快速地使用Python Link SDK,模擬設備采用MQTT協議接入物聯網平臺,并通過自定義Topic上報數據至物聯網平臺的完整操作。
前提條件
開通物聯網平臺服務。
免費開通后,您可先試用物聯網平臺服務,試用流程,請參見阿里云免費試用的物聯網平臺產品。物聯網平臺服務的計費標準,請參見計費概述。
創建產品和設備
準備開發環境
本示例的開發環境為Python 3.6,開發工具為PIP 3.6。關于環境的更多說明,請參見環境要求與配置。
配置設備端SDK
下載Demo文件至開發環境并解壓。
打開./mqtt_quick_start.py文件,配置如下參數。
配置設備接入信息,使設備接入物聯網平臺。示例代碼如下:
lk = linkkit.LinkKit( host_name="cn-shanghai", product_key="a18wP******", device_name="LightSwitch", device_secret="uwMTmVAMnGGHaAkqmeDY6cHxxB******") lk.config_mqtt(endpoint="iot-cn-6ja******.mqtt.iothub.aliyuncs.com")
參數
示例
說明
host_name
cn-shanghai
設備接入的地域ID。更多信息,請參見地域和可用區。
product_key
a18wP******
設備認證信息。即完成添加設備后,您保存至本地的設備證書。
您也可以在物聯網平臺的設備詳情頁查看設備的認證信息。更多信息,請參見獲取設備認證信息。
device_name
LightSwitch
device_secret
uwMTmVAMnGGHaAkqmeDY6cHxxB******
endpoint
iot-cn-6ja******.mqtt.iothub.aliyuncs.com
接入域名。
您可在物聯網平臺控制臺的實例詳情頁面,單擊查看開發配置,獲取設備接入域名。
更多信息,請參見查看實例終端節點。
配置設備訂閱Topic接收來自物聯網平臺的消息。示例代碼如下:
elif msg == "3": rc, mid = lk.subscribe_topic(lk.to_full_topic("user/get")) if rc == 0: print("subscribe topic success:%r, mid:%r" % (rc, mid)) else: print("subscribe topic fail:%d" % rc)
參數
示例
說明
subscribe_topic
lk.to_full_topic("user/get")
具有訂閱權限的Topic,設備通過該Topic,可接收物聯網平臺的消息。
您可以填入
lk.to_full_topic("user/get")
或者/a18wP******/LightSwitch/user/get
。lk.to_full_topic("user/get")
是一個Topic自動生成接口,您在前面已經填入了ProductKey、DeviceName等參數,該接口調用后將返回一個字符串,其值等同于/a18wP******/LightSwitch/user/get
配置設備用于發送信息的Topic,例如
/a18wP******/LightSwitch/user/update
,并設置要發送的信息內容。示例代碼如下:elif msg == "5": rc, mid = lk.publish_topic(lk.to_full_topic("user/update"), "{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0}}") if rc == 0: print("publish topic success:%r, mid:%r" % (rc, mid)) else: print("publish topic fail:%d" % rc)
參數
示例
說明
publish_topic
lk.to_full_topic("user/update"), "{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0}}"
要發送消息的Topic和內容。其中:
示例值中的
user/update
為Topic的后綴,將其修改為指定值后,可向對應的Topic發送消息。該Topic需具備發布權限。您可以在物聯網平臺的產品詳情頁的Topic類列表下的自定義Topic頁簽下,查看您的自定義Topic。更多信息,請參見什么是Topic。
本示例要發送消息的Topic為
/a18wP******/LightSwitch/user/update
。a18wP******
為設備的ProductKey。LightSwitch
為設備的DeviceName。
{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0}}
為上報至物聯網平臺的消息內容。本示例使用自定義Topic,您可自定義消息的數據格式。
配置參數后,保存文件。
運行結果
在Demo可執行文件所在目錄下,執行以下命令,運行Demo可執行文件。
python mqtt_quick_start.py
Demo運行成功后,設備端運行如下日志,設備(LightSwitch)成功接入物聯網平臺。
2021-05-07 15:27:10,725-6508-14504 - linkkit:linkkit:info - INFO - config_mqtt enter 2021-05-07 15:27:10,725-6508-14504 - linkkit:linkkit:debug - DEBUG - connect_async 2021-05-07 15:27:10,727-6508-4408 - linkkit:linkkit:debug - DEBUG - LoopThread thread enter 2021-05-07 15:27:10,727-6508-4408 - linkkit:linkkit:debug - DEBUG - enter 2021-05-07 15:27:10,727-6508-4408 - linkkit:linkkit:info - INFO - start connect 2021-05-07 15:27:10,729-6508-4408 - linkkit:linkkit:debug - DEBUG - current working directory:D:\****** 2021-05-07 15:27:10,799-6508-4408 - Paho:client:_easy_log - DEBUG - Sending CONNECT (u1, p1, wr0, wq0, wf0, c1, k60) client_id=b'a18wP******&LightSwitch|securemode=2,signmethod=hmacsha1,ext=1,lan=Python,_v=1.2.0,sii=Eth|03ACDEFF0032|Eth|03ACDEFF0031,timestamp=1620372430|' 2021-05-07 15:27:10,831-6508-4408 - Paho:client:_easy_log - DEBUG - Received CONNACK (0, 0) 2021-05-07 15:27:10,831-6508-4408 - linkkit:linkkit:info - INFO - __on_internal_connect
在運行的Demo中,輸入3,模擬設備LightSwitch訂閱Topic
/a18wP******/LightSwitch/user/get
。2021-05-07 16:03:52,423-25352-26452 - Paho:client:_easy_log - DEBUG - Sending SUBSCRIBE (d0, m2) [(b'/a18wP******/LightSwitch/user/get', 1)] subscribe topic success:0, mid:2 2021-05-07 16:03:52,440-25352-24916 - Paho:client:_easy_log - DEBUG - Received SUBACK 2021-05-07 16:03:52,440-25352-24916 - linkkit:linkkit:debug - DEBUG - post_message :'on_subscribe' 2021-05-07 16:03:52,440-25352-24916 - linkkit:linkkit:debug - DEBUG - post_message success 2021-05-07 16:03:52,441-25352-25544 - linkkit:linkkit:debug - DEBUG - thread runnable pop cmd:'on_subscribe' 2021-05-07 16:03:52,441-25352-25544 - linkkit:linkkit:debug - DEBUG - __on_internal_subscribe mid:2 granted_qos:1 on_subscribe_topic mid:2, granted_qos:1
Topic訂閱成功后,您可以返回物聯網平臺,在設備詳情頁面的Topic列表頁簽,單擊訂閱的Topic操作欄的發布消息,然后在發布消息對話框的消息輸入欄中,輸入一條消息,例如:This is a test message from Alibaba Iot Platform.,模擬從物聯網平臺向設備發送消息。
在運行的Demo中,輸入5,模擬設備LightSwitch通過Topic
/a18wP******/LightSwitch/user/update
,向物聯網平臺上報了一條消息。2021-05-07 16:06:23,786-30364-20372 - Paho:client:_easy_log - DEBUG - Sending PUBLISH (d0, q1, r0, m3), 'b'/a18wP******/LightSwitch/user/update'', ... (53 bytes) publish topic success:0, mid:3 2021-05-07 16:06:23,799-30364-27344 - Paho:client:_easy_log - DEBUG - Received PUBACK (Mid: 3) 2021-05-07 16:06:23,799-30364-27344 - linkkit:linkkit:debug - DEBUG - post_message :'on_publish' 2021-05-07 16:06:23,806-30364-27344 - linkkit:linkkit:debug - DEBUG - post_message success 2021-05-07 16:06:23,806-30364-11596 - linkkit:linkkit:debug - DEBUG - thread runnable pop cmd:'on_publish' 2021-05-07 16:06:23,808-30364-11596 - linkkit:linkkit:debug - DEBUG - __on_internal_publish message:3 on_publish_topic mid:3
您可以在物聯網平臺控制臺,查看設備的狀態和運行日志。
左側導航欄,選擇
,找到設備,查看設備狀態。設備狀態顯示為在線,則表示設備與物聯網平臺成功連接。在左側導航欄,選擇監控運維>日志服務,選擇夜燈開關產品后,查看設備上線、訂閱Topic和上報消息的日志。
說明您可以忽略關于訂閱Topic
/sys/a18wP******/LightSwitch/thing/deviceinfo/update_reply
的日志。該訂閱為SDK自帶默認功能,不影響您的體驗。
如果在調試過程中出現錯誤,請參見設備端接收的錯誤碼,根據提示解決問題。
后續步驟
設備接入物聯網平臺后,您可以管理設備并對其進行監控運維。關于物聯網平臺的更多功能,請參見物聯網平臺產品功能。
使用Python Link SDK配置相關高級功能,請參見Python Link SDK概述。