相关资源
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文件中实现了设备属性上报、响应平台设置与查询设备属性的