本文介绍如何快速地使用Python Link SDK,通过MQTT协议,实现设备与物联网平台之间连接和通信的整体操作

前提条件

已开通物联网平台服务。

说明 开通阿里云物联网平台不收费。开通后,您可以根据免费额度试用服务,试用流程请参见物联网平台试用中心

背景信息

本文以夜灯开关为例,通过配置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,手动下载以下开源库并解压至本地。然后在解压后的目录下,分别执行命令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。

      请在物联网平台控制台左上角,查看您服务所在的地域。地域ID的取值,请参见地域和可用区

      本示例的接入地为华东1(上海)。

      product_key a18wP****** 设备认证信息。完成添加设备后,您保存至本地的设备证书。

      您也可以在物联网平台设备的详情页查看设备的认证信息。

      device_name LightSwitch
      device_secret uwMTmVAMnGGHaAkqmeDY6cHxxB******
      endpoint iot-cn-6ja******.mqtt.iothub.aliyuncs.com 企业版实例的接入域名。接入公共实例时,无需配置该参数。

      您可在实例详情页面,单击查看开发配置,查看MQTT设备接入的信息。具体操作,请参见查看实例终端节点

      说明 本示例中设备接入公共实例。如使用企业版实例,请删除代码前的注释符号(#)。
    • 配置设备订阅Topic(例如:/a18wP******/LightSwitch/user/get),以接收来自物联网平台的消息。示例代码如下:
              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,可接收物联网平台的消息。

      您可以在物联网平台的产品详情页Topic类列表下的自定义Topic页签下,查看您的自定义Topic。更多信息,请参见什么是Topic

      示例值中的user/get为Topic的后缀,将其修改为指定值后,可订阅对应的Topic。

      本示例订阅的Topic为/a18wP******/LightSwitch/user/get
      • a18wP******为设备的ProductKey
      • LightSwitch为设备的DeviceName
    • 配置设备用于发送信息的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和上报消息的日志。Python设备的日志
      说明 您可以忽略关于订阅Topic/sys/a18wP******/LightSwitch/thing/deviceinfo/update_reply的日志。该订阅为SDK自带默认功能,不影响您的体验。

如果在调试过程中出现错误,请参见设备端接收的错误码,根据提示解决问题。若未能解决问题,您可以提交工单

后续步骤

设备接入物联网平台后,您可以管理设备并对其进行监控运维。关于物联网平台的更多功能,请参见物联网平台产品功能

您还可以使用Python Link SDK配置相关高级功能。更多信息,请参见Python Link SDK概述