本文以夜灯开关为例,介绍如何快速地使用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概述。