Python Demo使用说明
概述
本文以Python语言为例,介绍通过MQTTS/MQTT协议接入平台,基于平台接口实现“属性上报”、“订阅接收命令”等功能。
本文中使用的代码为样例代码,仅用于体验平台通信功能,如需进行商用,可以参考资源获取获取对应语言的IoT Device SDK进行集成。
前提条件
准备工作
- 安装python
- 访问python官网,选择合适系统的版本下载并安装。(本文以windows系统为例,安装python3.8.2)。
- 下载完成后,运行exe文件进行安装。
- 勾选“Add python 3.8 to PAYTH”(如无勾选,需手动配置环境变量),单击“Customize installation”,按照界面提示安装。
- 检查python是否安装成功。
Win键 + r -->输入 cmd-->回车,进入命令行窗口,输入python –V,回车后显示python版本即表示安装成功。
- 访问python官网,选择合适系统的版本下载并安装。(本文以windows系统为例,安装python3.8.2)。
- 安装Pycharm。(如已安装,请跳过此步骤)
- 访问Pycharm官网,选择合适的版本单击“Download”下载。
注:推荐使用专业版。
- 运行exe文件,按照界面提示安装。
- 访问Pycharm官网,选择合适的版本单击“Download”下载。
导入代码样例
- 下载QuickStart(Python)样例。
- 运行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:存放证书;
DigiCertGlobalRootCA.crt.pem:设备校验平台身份的证书,用于设备侧接入物联网平台登录鉴权使用,可以在资源获取中下载证书文件。
- IoT_device/request:对设备相关属性进行封装,如命令、消息和属性等。
- IoT_device_demo:使用MQTT协议的demo文件;
- (可选)安装paho-mqtt库,paho-mqtt是python使用mqtt协议的第三方库(如已安装,可跳过)。可参考如下两种安装方式:
建立连接
设备或网关在接入物联网平台时首先需要和平台建立连接,从而将设备或网关与平台进行关联。开发者通过传入设备信息,将设备或网关连接到物联网平台。
- IoTClientConfig类主要提供配置客户端相关信息的功能,在建立连接之前,先修改以下参数。
1 2 3 4
# 客户端配置 client_cfg = IoTClientConfig(server_ip='iot-mqtts.cn-north-4.myhuaweicloud.com', device_id='5e85a55f60b7b804c51ce15c_py123', secret='******', is_ssl=True) # 创建设备 iot_client = IotClient(client_cfg)
- 调用 connect 方法进行连接。
iot_client.connect()
如果连接成功会打印:
-----------------Connection successful !!!
注:如果连接失败,在retreat_reconnection函数中已实现退避重连,代码样例如下:
# 退避重连 def retreat_reconnection(self): 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()
订阅Topic
订阅某Topic的设备才能接收broker发布的关于该Topic的消息,关于平台预置Topic可参考Topic定义。
在message_sample.py文件中提供了订阅Topic、取消订阅Topic和设备消息上报等功能。
订阅命令下发Topic方式如下:
1
|
iot_client.subscribe(r'$oc/devices/' + str(self.__device_id) + r'/sys/commands/#') |
如果订阅成功会打印(Topic为自定义的Topic,如上Topic_1):
------You have subscribed: topic
响应命令下发
在command_sample.py文件中提供了响应平台下发命令的功能。详细接口信息请参考命令下发接口。
1 2 3 4 5 |
# 响应平台下发的命令 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文件中实现了设备属性上报、响应平台设置与查询设备属性的功能。
如下代码实现了设备每隔10秒向平台上报属性的功能,service_property为设备属性对象,具体可在services_propertis.py文件查看。
1 2 3 4 5 6 7 |
# 定时上报属性 while True: # 按照产品模型设置属性 service_property = ServicesProperties() service_property.add_service_property(service_id="Battery", property='batteryLevel', value=1) iot_client.report_properties(service_properties=service_property.service_property, qos=1) time.sleep(10) |
设备上报属性成功后可在设备详情页面查看到上报的属性。
如果在“设备详情”页面没有最新上报数据,请修改产品模型中服务和属性的内容,确保设备上报的服务/属性和产品模型中的服务/属性一致,或者进入 页面,删除所有服务。
消息上报
消息上报是指设备向平台上报消息。message_sample.py文件中提供了消息上报的功能。
1 2 |
# 设备向平台发送消息,系统默认topic iot_client.publish_message('raw message: Hello Huawei cloud IoT') |
消息上报成功后会打印:
Publish success---mid = 1
由于是同步命令需要端侧回复响应可参考接口。