Python Link SDK

本文以夜灯开关为例,介绍如何快速地使用Python Link SDK,模拟设备采用MQTT协议接入物联网平台,并通过自定义Topic上报数据至物联网平台的完整操作。

前提条件

开通物联网平台服务

说明

免费开通后,您可先试用物联网平台服务,试用流程,请参见阿里云免费试用的物联网平台产品。物联网平台服务的计费标准,请参见计费概述

创建产品和设备

  1. 登录物联网平台控制台,单击目标实例卡片。

  2. 在左侧导航栏,选择设备管理 > 产品,单击创建产品

  3. 新建产品页面,输入产品名称:夜灯开关,所属品类选择自定义品类,其他参数使用默认值,单击确认

    创建产品

  4. 在完成创建产品的页面,单击添加设备下的前往添加

  5. 设备页面,单击添加设备

  6. 添加设备对话框中,输入设备名称,例如:LightSwitch。然后,单击确认

    添加设备

  7. 添加完成对话框中,单击一键复制设备证书。将设备证书信息保存至本地备用。关于设备证书的更多信息,请参见设备证书

准备开发环境

本示例的开发环境为Python 3.6,开发工具为PIP 3.6。关于环境的更多说明,请参见环境要求与配置

  1. 安装Python开发环境。

    更多信息,请参见Python

  2. 可选:安装Python的包管理工具PIP。

    更多信息,请参见PIP

  3. 根据需要,选择以下方式安装Demo运行所需的依赖库。

    • 已安装PIP:

      在任意目录下,执行以下命令。

      pip install aliyun-iot-linkkit
      pip install paho-mqtt==1.6.1
    • 未安装PIP:

      请手动下载以下开源库并解压至本地,然后依次在每个解压后的目录下,执行命令python setup.py install

配置设备端SDK

  1. 下载Demo文件至开发环境并解压。

  2. 打开./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,您可自定义消息的数据格式。

  3. 配置参数后,保存文件。

运行结果

  • 在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概述