• 沒有找到結果。

相关资源

4.3.4 Python Demo 使用说明

概述

本文以Python语言为例,介绍设备通过MQTTS/MQTT协议接入平台,通过平台接口实 现“数据上报”、“命令下发”的功能。如需其他语言接入,请参考资源获取。

前提条件

● 已安装python,若未安装请参考安装python。

● 已安装开发工具(本文以Pycharm为例),若未安装请参考安装Pycharm。

● 已在控制台获取设备接入地址。获取地址的操作步骤,请参考平台对接信息。

● 已在控制台创建产品和设备。创建产品和设备的具体操作细节,请参考创建产 品、注册单个设备或批量注册设备。

准备工作

● 安装python

a. 访问python官网,选择合适系统的版本下载并安装。(本文以windows系统 为例,安装python3.8.2)。

b. 下载完成后,运行exe文件进行安装。

c. 勾选“Add python 3.8 to PAYTH”(如无勾选,需手动配置环境变量),单 击“Customize installation”,按照界面提示安装。

d. 检查python是否安装成功。

Win键 + r -->输入 cmd-->回车,进入命令行窗口,输入python –V,回车后 显示python版本即表示安装成功。

● 安装Pycharm。(如已安装,请跳过此步骤)

a. 访问Pycharm官网,选择合适的版本单击“Download”下载。

设备接入

开发指南 4 设备侧开发

注:推荐使用专业版。

b. 运行exe文件,按照界面提示安装。

导入代码样例

步骤1 下载QuickStart(Python)样例。

步骤2 运行PyCharm,单击Open,选择步骤1中下载的样例。

代码目录简述:

IoT_device_demo:使用MQTT协议的demo文件;

message_sample.py:设备发送消息和接收平台消息的demo;

command_sample.py:响应平台下发命令的demo;

properties_sample.py:属性上报等的demo;

IoT_device/client:对paho-mqtt进行了封装;

IoT_client_config.py:配置客户端信息,如设备id、秘钥等;

IoT_client.py:提供mqtt协议相关功能,如连接、订阅、发布和响应等;

IoT_device/Utils:工具方法,如获取时间戳、秘钥加密等;

IoT_device/resources:存放证书;

设备接入

开发指南 4 设备侧开发

IoT_device/request:对设备相关属性进行封装,如命令、消息和属性等。

步骤4 (可选)安装paho-mqtt库,paho-mqtt是python使用mqtt协议的第三方库(如已安 装,可跳过)。可参考如下两种安装方式:

● 方法一:在命令行下采用pip工具安装(安装python时,已自带该工具)

进入命令行界面输入命令:pip install paho-mqtt回车,提示 Succefully installed paho-mqtt 表示安装成功。(若提示pip不是内部或外部命令,请检查python环 境变量的配置),如下图所示:

● 方法二:通过PyCharm安装

a. 打开PyCharm,选择 “File > Setting > Project Interpreter” ,单击右侧 + 号搜索“paho-mqtt”。

b. 单击左下角 Install Package进行安装。

----结束

建立连接

设备或网关在接入物联网平台时首先需要和平台建立连接,从而将设备或网关与平台 进行关联。开发者通过传入设备信息,将设备或网关连接到物联网平台。

1. IoTClientConfig类主要提供配置客户端相关信息的功能,在建立连接之前,先修 改以下参数。

# 客户端配置

client_cfg = IoTClientConfig(server_ip='iot-mqtts.cn-north-4.myhuaweicloud.com', device_id='5e85a55f60b7b804c51ce15c_py123', secret='123456789', is_ssl=True)

# 创建设备

iot_client = IotClient(client_cfg)

server_ip:物联网平台的设备对接地址,可参考平台对接信息获取(获取的 是域名信息,可通过在cmd命令框中执行“ping 域名”,获取IP地址);

device_id和secret:在成功注册设备后获取;

is_ssl:设置为True 时建立MQTTS连接,False时建立MQTT连接。

2. 调用 connect 方法进行连接。

iot_client.connect()

如果连接成功会打印:

---Connection successful !!!

注:如果连接失败,在retreat_reconnection函数中已实现退避重连,代码样例 如下:

# 退避重连

def retreat_reconnection(self):

设备接入

开发指南 4 设备侧开发

print("---- 退避重连") global retryTimes minBackoff = 1 maxBackoff = 30 defaultBackoff = 1

low_bound = (int)(defaultBackoff * 0.8) high_bound = (int)(defaultBackoff * 1.2)

random_backoff = random.randint(0, high_bound - low_bound)

backoff_with_jitter = math.pow(2.0, retryTimes) * (random_backoff + low_bound) wait_time_until_next_retry = min(minBackoff + backoff_with_jitter, maxBackoff) print("the next retry time is ", wait_time_until_next_retry, " seconds")

retryTimes += 1

time.sleep(wait_time_until_next_retry) self.connect()

iot_client.subscribe(r'$oc/devices/' + str(self.__device_id) + r'/sys/commands/#')

如果订阅成功会打印(topic为自定义的topic,如上topic_1):

---You have subscribed: topic

响应命令下发

在command_sample.py文件中提供了响应平台下发命令的功能。详细接口信息请参考 命令下发接口。

# 响应平台下发的命令

def command_callback(request_id, command):

# result_code:设置为0命令下发成功,为1下发命令失败 iot_client.respond_command(request_id, result_code=0) iot_client.set_command_callback(command_callback)

属性上报

属性上报是指设备主动向平台上报自己的属性。更多接口信息请参考设备属性上报。

在properties_sample.py文件中实现了设备属性上报、响应平台设置与查询设备属性的