update qcloud sdk
1. iot-hub sdk update to 3.2.0 2. iot-explorer update to 3.1.1
This commit is contained in:
73
components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/IoT_Hub通信平台快速入门.md
vendored
Normal file
73
components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/IoT_Hub通信平台快速入门.md
vendored
Normal file
@@ -0,0 +1,73 @@
|
||||
# 腾讯云物联网通信 C-SDK
|
||||
腾讯云物联网通信IoT Hub C-SDK 依靠安全且性能强大的数据通道,为物联网领域开发人员提供设备终端和云端的双向通信能力。
|
||||
本文档介绍SDK的各项功能。
|
||||
|
||||
## 快速入门
|
||||
请参考**mqtt_sample_快速入门.md**文档,介绍如何在腾讯云物联网通信IoT Hub控制台申请设备, 并结合本 SDK 的**mqtt_sample**快速体验设备端通过 MQTT 协议连接到腾讯云IoT Hub, 发送和接收消息。
|
||||
|
||||
## 设备影子
|
||||
请参考**shadow_sample_设备影子.md**文档,介绍设备影子功能,并结合 SDK 的**shadow_sample**展示影子的数据流和功能
|
||||
|
||||
## 固件升级
|
||||
请参考**ota_sample_固件升级.md**文档,介绍固件升级功能,并结合 SDK 的**ota_mqtt_sample**展示固件升级的流程和功能
|
||||
|
||||
## 网关功能
|
||||
请参考**gateway_sample_网关功能.md**文档,介绍如何在腾讯IoT Hub控制台申请网关设备并绑定子设备, 并结合本 SDK 的**gateway_sample**快速体验网关设备通过 MQTT 协议连接到腾讯云IoT Hub, 代理子设备上下线,发送和接收消息。
|
||||
|
||||
## 设备互通
|
||||
请参考**door_aircond_sample_设备互通.md**文档,介绍一个智能家居设备互通的场景, 结合本 SDK 的**aircond_shadow_sample**和**door_mqtt_sample**快速体验基于IoT Hub的消息转发和规则引擎实现设备之间的联动。
|
||||
|
||||
## 动态注册
|
||||
请参考**dynreg_dev_sample_动态注册.md**文档,介绍腾讯云物联网的设备接入认证以及动态注册功能。
|
||||
|
||||
## 设备日志上报功能
|
||||
设备端日志上报功能,可将设备端的Log通过HTTP上报到云端,并可在控制台展示,方便用户远程调试、诊断及监控设备运行状况。目前该功能仅支持MQTT模式。
|
||||
只要将SDK的编译宏FEATURE_LOG_UPLOAD_ENABLED置为y(默认为y),并在控制台设置上报级别,则在代码中调用Log_e/w/i/d接口的日志除了会在终端打印出来,还会上报云端并在控制台展示,如下图。
|
||||

|
||||
|
||||
上报级别设置可参见下图,Level级别越大则上报的日志越多,比如Level3(信息)会将ERROR/WARN/INFO级别的日志都上报而DEBUG级别则不上报。控制台默认为关闭状态,则表示设备端仅在MQTT连接失败的时候才会上报ERROR级别日志。
|
||||

|
||||
|
||||
代码具体用例可以参考mqtt_sample以及qcloud_iot_export_log.h注释说明,用户除了打开编译宏开关,还需要调用IOT_Log_Init_Uploader函数进行初始化。SDK在IOT_MQTT_Yield函数中会定时进行上报,此外,用户可根据自身需要,在程序出错退出的时候调用IOT_Log_Upload(true)强制上报。同时SDK提供在HTTP通讯出错无法上报日志时的缓存和恢复正常后重新上报机制,但需要用户根据设备具体情况提供相关回调函数,如不提供回调或回调函数提供不全则该缓存机制不生效,HTTP通讯失败时日志会被丢掉。
|
||||
|
||||
打开日志上报功能,请确保编译配置文件CMakeLists.txt中使能下面选项
|
||||
```
|
||||
set(FEATURE_LOG_UPLOAD_ENABLED ON)
|
||||
```
|
||||
|
||||
## CoAP通讯
|
||||
IoT Hub支持设备端通过CoAP协议接入,请参考[CoAP 协议说明](https://cloud.tencent.com/document/product/634/14063)
|
||||
|
||||
编译运行示例程序coap_sample,首先修改CMakeLists.txt确保以下选项存在(以密钥认证设备为例)
|
||||
```
|
||||
set(BUILD_TYPE "release")
|
||||
set(COMPILE_TOOLS "gcc")
|
||||
set(PLATFORM "linux")
|
||||
set(FEATURE_COAP_COMM_ENABLED ON)
|
||||
set(FEATURE_AUTH_MODE "KEY")
|
||||
set(FEATURE_AUTH_WITH_NOTLS OFF)
|
||||
set(FEATURE_DEBUG_DEV_INFO_USED OFF)
|
||||
```
|
||||
编译SDK,将控制台创建的设备信息填入device_info.json中
|
||||
再执行coap_sample
|
||||
```
|
||||
./output/release/bin/coap_sample
|
||||
INF|2019-09-16 23:49:36|device.c|iot_device_info_set(67): SDK_Ver: 3.1.0, Product_ID: S3EUVBRJLB, Device_Name: test_device
|
||||
INF|2019-09-16 23:49:38|coap_client.c|IOT_COAP_Construct(82): coap connect success
|
||||
INF|2019-09-16 23:49:38|coap_client_message.c|coap_message_send(402): add coap message id: 9734 into wait list ret: 0
|
||||
DBG|2019-09-16 23:49:38|coap_client_message.c|_coap_message_handle(295): receive coap piggy ACK message, id 9734
|
||||
INF|2019-09-16 23:49:38|coap_client_auth.c|_coap_client_auth_callback(43): auth token message success, code_class: 2 code_detail: 5
|
||||
DBG|2019-09-16 23:49:38|coap_client_auth.c|_coap_client_auth_callback(53): auth_token_len = 10, auth_token = YWAIGGUGUC
|
||||
DBG|2019-09-16 23:49:38|coap_client_message.c|_coap_message_list_proc(146): remove the message id 9734 from list
|
||||
INF|2019-09-16 23:49:38|coap_client_message.c|_coap_message_list_proc(85): remove node
|
||||
INF|2019-09-16 23:49:38|coap_client.c|IOT_COAP_Construct(91): device auth successfully, connid: Xy9W9
|
||||
INF|2019-09-16 23:49:38|coap_sample.c|main(170): topic name is S3EUVBRJLB/test_device/data
|
||||
INF|2019-09-16 23:49:38|coap_client_message.c|coap_message_send(402): add coap message id: 9735 into wait list ret: 0
|
||||
DBG|2019-09-16 23:49:38|coap_sample.c|main(177): client topic has been sent, msg_id: 9735
|
||||
DBG|2019-09-16 23:49:39|coap_client_message.c|_coap_message_handle(295): receive coap piggy ACK message, id 9735
|
||||
INF|2019-09-16 23:49:39|coap_sample.c|event_handler(78): message received ACK, msgid: 9735
|
||||
DBG|2019-09-16 23:49:39|coap_client_message.c|_coap_message_list_proc(146): remove the message id 9735 from list
|
||||
INF|2019-09-16 23:49:39|coap_client_message.c|_coap_message_list_proc(85): remove node
|
||||
INF|2019-09-16 23:49:39|coap_client.c|IOT_COAP_Destroy(125): coap release!
|
||||
```
|
||||
|
146
components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/door_aircond_sample_设备互通.md
vendored
Normal file
146
components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/door_aircond_sample_设备互通.md
vendored
Normal file
@@ -0,0 +1,146 @@
|
||||
|
||||
# 设备互通
|
||||
本文档根据一个智能家居设备互通的场景, 结合本 SDK 的**aircond_shadow_sample**和**door_mqtt_sample**快速体验基于IoT Hub的消息转发和规则引擎实现设备之间的联动。
|
||||
|
||||
## 一. 控制台创建设备
|
||||
|
||||
#### 1. 场景说明
|
||||
本文档的用户场景请参考腾讯云文档中心的[设备互通](https://cloud.tencent.com/document/product/634/11913)
|
||||
假设一个智能家居的场景,门打开时候触发空调的温度控制,两个设备之间的消息是通过云端规则引擎进行转发的
|
||||
|
||||

|
||||
|
||||
#### 2. 创建产品和设备,配置规则引擎
|
||||
请参考[设备互通](https://cloud.tencent.com/document/product/634/11913) 分别创建空调和门产品,再创建airConditioner1和door1设备,并配置好规则引擎。
|
||||
|
||||
|
||||
## 二. 编译运行示例程序(以**密钥认证设备**为例)
|
||||
|
||||
#### 1. 编译 SDK
|
||||
修改CMakeLists.txt确保以下选项存在
|
||||
```
|
||||
set(BUILD_TYPE "release")
|
||||
set(COMPILE_TOOLS "gcc")
|
||||
set(PLATFORM "linux")
|
||||
set(FEATURE_MQTT_COMM_ENABLED ON)
|
||||
set(FEATURE_MQTT_DEVICE_SHADOW ON)
|
||||
set(FEATURE_AUTH_MODE "KEY")
|
||||
set(FEATURE_AUTH_WITH_NOTLS OFF)
|
||||
set(FEATURE_DEBUG_DEV_INFO_USED OFF)
|
||||
```
|
||||
执行脚本编译
|
||||
```
|
||||
./cmake_build.sh
|
||||
```
|
||||
示例输出aircond_shadow_sample和door_mqtt_sample位于`output/release/bin`文件夹中
|
||||
|
||||
#### 2. 填写设备信息
|
||||
将上面创建的airConditioner1设备的设备信息填写到一个JSON文件aircond_device_info.json中
|
||||
```
|
||||
{
|
||||
"auth_mode":"KEY",
|
||||
"productId":"GYT9V6D4AF",
|
||||
"deviceName":"airConditioner1",
|
||||
"key_deviceinfo":{
|
||||
"deviceSecret":"vXeds12qazsGsMyf5SMfs6OA6y"
|
||||
}
|
||||
}
|
||||
```
|
||||
再将door1设备的设备信息填写到另一个JSON文件door_device_info.json中
|
||||
```
|
||||
{
|
||||
"auth_mode":"KEY",
|
||||
"productId":"S3EUVBRJLB",
|
||||
"deviceName":"door1",
|
||||
"key_deviceinfo":{
|
||||
"deviceSecret":"i92E3QMNmxi5hvIxUHjO8gTdg"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 3. 执行aircond_shadow_sample示例程序
|
||||
因为这个场景涉及到两个sample同时运行,可以先在当前终端console运行空调示例,可以看到示例订阅了 /{productID}/{deviceName}/control 主题,然后就处于循环等待状态
|
||||
```
|
||||
./output/release/bin/aircond_shadow_sample -c ./aircond_device_info.json
|
||||
INF|2019-09-16 23:25:17|device.c|iot_device_info_set(67): SDK_Ver: 3.1.0, Product_ID: GYT9V6D4AF, Device_Name: airConditioner1
|
||||
DBG|2019-09-16 23:25:17|HAL_TLS_mbedtls.c|HAL_TLS_Connect(204): Setting up the SSL/TLS structure...
|
||||
DBG|2019-09-16 23:25:17|HAL_TLS_mbedtls.c|HAL_TLS_Connect(246): Performing the SSL/TLS handshake...
|
||||
DBG|2019-09-16 23:25:17|HAL_TLS_mbedtls.c|HAL_TLS_Connect(247): Connecting to /GYT9V6D4AF.iotcloud.tencentdevices.com/8883...
|
||||
INF|2019-09-16 23:25:18|HAL_TLS_mbedtls.c|HAL_TLS_Connect(269): connected with /GYT9V6D4AF.iotcloud.tencentdevices.com/8883...
|
||||
INF|2019-09-16 23:25:19|mqtt_client.c|IOT_MQTT_Construct(125): mqtt connect with id: Nh9Vc success
|
||||
DBG|2019-09-16 23:25:19|mqtt_client_subscribe.c|qcloud_iot_mqtt_subscribe(138): topicName=$shadow/operation/result/GYT9V6D4AF/airConditioner1|packet_id=56171
|
||||
DBG|2019-09-16 23:25:19|shadow_client.c|_shadow_event_handler(63): shadow subscribe success, packet-id=56171
|
||||
INF|2019-09-16 23:25:19|aircond_shadow_sample.c|event_handler(96): subscribe success, packet-id=56171
|
||||
INF|2019-09-16 23:25:19|shadow_client.c|IOT_Shadow_Construct(172): Sync device data successfully
|
||||
INF|2019-09-16 23:25:19|aircond_shadow_sample.c|main(256): Cloud Device Construct Success
|
||||
DBG|2019-09-16 23:25:19|mqtt_client_subscribe.c|qcloud_iot_mqtt_subscribe(138): topicName=GYT9V6D4AF/airConditioner1/control|packet_id=56172
|
||||
DBG|2019-09-16 23:25:19|shadow_client.c|_shadow_event_handler(63): shadow subscribe success, packet-id=56172
|
||||
INF|2019-09-16 23:25:19|aircond_shadow_sample.c|event_handler(96): subscribe success, packet-id=56172
|
||||
INF|2019-09-16 23:25:19|aircond_shadow_sample.c|main(291): airConditioner state: close
|
||||
INF|2019-09-16 23:25:19|aircond_shadow_sample.c|main(292): currentTemperature: 32.000000, energyConsumption: 0.000000
|
||||
```
|
||||
|
||||
#### 4. 执行door_mqtt_sample示例程序,模拟回家事件
|
||||
这时打开另一个终端console,运行门的示例,可以看到示例往 /{productID}/{deviceName}/event 主题发送了JSON消息{"action": "come_home", "targetDevice": "airConditioner1"},表示将回家的消息通知目标设备airConditioner1,然后程序就退出了
|
||||
|
||||
```
|
||||
./output/release/bin/door_mqtt_sample -c ../devinfo/door_device_info.json -t airConditioner1 -a come_home
|
||||
INF|2019-09-16 23:29:11|device.c|iot_device_info_set(67): SDK_Ver: 3.1.0, Product_ID: S3EUVBRJLB, Device_Name: test_dev_key
|
||||
DBG|2019-09-16 23:29:11|HAL_TLS_mbedtls.c|HAL_TLS_Connect(204): Setting up the SSL/TLS structure...
|
||||
DBG|2019-09-16 23:29:11|HAL_TLS_mbedtls.c|HAL_TLS_Connect(246): Performing the SSL/TLS handshake...
|
||||
DBG|2019-09-16 23:29:11|HAL_TLS_mbedtls.c|HAL_TLS_Connect(247): Connecting to /S3EUVBRJLB.iotcloud.tencentdevices.com/8883...
|
||||
INF|2019-09-16 23:29:11|HAL_TLS_mbedtls.c|HAL_TLS_Connect(269): connected with /S3EUVBRJLB.iotcloud.tencentdevices.com/8883...
|
||||
INF|2019-09-16 23:29:11|mqtt_client.c|IOT_MQTT_Construct(125): mqtt connect with id: d89Wh success
|
||||
INF|2019-09-16 23:29:11|door_mqtt_sample.c|main(229): Cloud Device Construct Success
|
||||
DBG|2019-09-16 23:29:11|mqtt_client_publish.c|qcloud_iot_mqtt_publish(329): publish topic seq=46683|topicName=S3EUVBRJLB/test_dev_key/event|payload={"action": "come_home", "targetDevice": "airConditioner1"}
|
||||
INF|2019-09-16 23:29:11|door_mqtt_sample.c|main(246): Wait for publish ack
|
||||
INF|2019-09-16 23:29:11|door_mqtt_sample.c|event_handler(81): publish success, packet-id=46683
|
||||
INF|2019-09-16 23:29:13|mqtt_client_connect.c|qcloud_iot_mqtt_disconnect(437): mqtt disconnect!
|
||||
INF|2019-09-16 23:29:13|mqtt_client.c|IOT_MQTT_Destroy(186): mqtt release!
|
||||
```
|
||||
|
||||
#### 5. 观察空调设备的消息接收,模拟消息响应
|
||||
这个时候观察aircond_shadow_sample的打印输出,可以看到已经收到door1发送的回家消息,并将空调打开,开始调节温度。
|
||||
```
|
||||
INF|2019-09-16 23:29:11|aircond_shadow_sample.c|main(291): airConditioner state: close
|
||||
INF|2019-09-16 23:29:11|aircond_shadow_sample.c|main(292): currentTemperature: 32.000000, energyConsumption: 0.000000
|
||||
INF|2019-09-16 23:29:12|aircond_shadow_sample.c|on_message_callback(140): Receive Message With topicName:GYT9V6D4AF/airConditioner1/control, payload:{"action":"come_home","targetDevice":"airConditioner1"}
|
||||
INF|2019-09-16 23:29:12|aircond_shadow_sample.c|main(291): airConditioner state: open
|
||||
INF|2019-09-16 23:29:12|aircond_shadow_sample.c|main(292): currentTemperature: 31.000000, energyConsumption: 1.000000
|
||||
INF|2019-09-16 23:29:13|aircond_shadow_sample.c|main(291): airConditioner state: open
|
||||
INF|2019-09-16 23:29:13|aircond_shadow_sample.c|main(292): currentTemperature: 30.000000, energyConsumption: 2.000000
|
||||
```
|
||||
|
||||
#### 6. 执行door_mqtt_sample示例程序,模拟离开事件
|
||||
这时如果再次运行门的示例,更改程序启动参数,可以看到示例往 /{productID}/{deviceName}/event 主题发送了JSON消息{"action": "leave_home", "targetDevice": "airConditioner1"},表示将离开的消息通知目标设备airConditioner1
|
||||
|
||||
```
|
||||
./output/release/bin/door_mqtt_sample -c ../devinfo/door_device_info.json -t airConditioner1 -a leave_home
|
||||
INF|2019-09-16 23:40:35|device.c|iot_device_info_set(67): SDK_Ver: 3.1.0, Product_ID: S3EUVBRJLB, Device_Name: test_dev_key
|
||||
DBG|2019-09-16 23:40:35|HAL_TLS_mbedtls.c|HAL_TLS_Connect(204): Setting up the SSL/TLS structure...
|
||||
DBG|2019-09-16 23:40:35|HAL_TLS_mbedtls.c|HAL_TLS_Connect(246): Performing the SSL/TLS handshake...
|
||||
DBG|2019-09-16 23:40:35|HAL_TLS_mbedtls.c|HAL_TLS_Connect(247): Connecting to /S3EUVBRJLB.iotcloud.tencentdevices.com/8883...
|
||||
INF|2019-09-16 23:40:35|HAL_TLS_mbedtls.c|HAL_TLS_Connect(269): connected with /S3EUVBRJLB.iotcloud.tencentdevices.com/8883...
|
||||
INF|2019-09-16 23:40:35|mqtt_client.c|IOT_MQTT_Construct(125): mqtt connect with id: 3I59W success
|
||||
INF|2019-09-16 23:40:35|door_mqtt_sample.c|main(229): Cloud Device Construct Success
|
||||
DBG|2019-09-16 23:40:35|mqtt_client_publish.c|qcloud_iot_mqtt_publish(329): publish topic seq=39867|topicName=S3EUVBRJLB/test_dev_key/event|payload={"action": "leave_home", "targetDevice": "airConditioner1"}
|
||||
INF|2019-09-16 23:40:35|door_mqtt_sample.c|main(246): Wait for publish ack
|
||||
INF|2019-09-16 23:40:35|door_mqtt_sample.c|event_handler(81): publish success, packet-id=39867
|
||||
INF|2019-09-16 23:40:37|mqtt_client_connect.c|qcloud_iot_mqtt_disconnect(437): mqtt disconnect!
|
||||
INF|2019-09-16 23:40:37|mqtt_client.c|IOT_MQTT_Destroy(186): mqtt release!
|
||||
```
|
||||
|
||||
#### 7. 观察空调设备的消息接收,模拟消息响应
|
||||
这个时候观察aircond_shadow_sample的打印输出,可以看到已经收到door1发送的离开消息,并将空调关闭,温度开始升高。
|
||||
```
|
||||
INF|2019-09-16 23:40:35|aircond_shadow_sample.c|main(291): airConditioner state: open
|
||||
INF|2019-09-16 23:40:35|aircond_shadow_sample.c|main(292): currentTemperature: 26.000000, energyConsumption: 6.000000
|
||||
INF|2019-09-16 23:40:36|aircond_shadow_sample.c|on_message_callback(140): Receive Message With topicName:GYT9V6D4AF/airConditioner1/control, payload:{"action":"leave_home","targetDevice":"airConditioner1"}
|
||||
INF|2019-09-16 23:40:36|aircond_shadow_sample.c|main(291): airConditioner state: close
|
||||
INF|2019-09-16 23:40:36|aircond_shadow_sample.c|main(292): currentTemperature: 26.500000, energyConsumption: 6.000000
|
||||
INF|2019-09-16 23:40:37|aircond_shadow_sample.c|main(291): airConditioner state: close
|
||||
INF|2019-09-16 23:40:37|aircond_shadow_sample.c|main(292): currentTemperature: 27.000000, energyConsumption: 6.000000
|
||||
INF|2019-09-16 23:40:39|aircond_shadow_sample.c|main(291): airConditioner state: close
|
||||
```
|
||||
|
||||
至此,完成了模拟设备互通联动的示例运行。
|
81
components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/dynreg_dev_sample_动态注册.md
vendored
Normal file
81
components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/dynreg_dev_sample_动态注册.md
vendored
Normal file
@@ -0,0 +1,81 @@
|
||||
# 设备接入及动态注册
|
||||
|
||||
关于IoT Hub设备接入认证的详细介绍,请参考 [设备身份认证 ](https://cloud.tencent.com/document/product/634/35272)
|
||||
简单来说,物联网通信平台IoT Hub提供三种设备端接入认证的方案:
|
||||
|
||||
- 证书认证(设备级):为每台设备分配证书 + 私钥,使用非对称加密认证接入,用户需要为每台设备烧录不同的配置信息。
|
||||
- 密钥认证(设备级):为每台设备分配设备密钥,使用对称加密认证接入,用户需要为每台设备烧录不同的配置信息。
|
||||
- 动态注册认证(产品级):为同一产品下的所有设备分配统一密钥,设备通过注册请求获取设备证书/密钥后认证接入,用户可以为同一批设备烧录相同的配置信息。
|
||||
|
||||
使用设备动态注册功能,可以使得同一个产品型号的设备出厂时烧录的是统一的固件,该固件只包含统一的产品ID和产品密钥。设备出厂后判断设备信息为空(判断设备信息为空的逻辑由业务逻辑实现,可参考示例),则触发设备动态注册,从平台申请设备的证书(创建的产品为证书认证产品)或者设备的密钥(创建的产品为密钥认证方式),将获取到的设备信息保存下来之后,后续的设备接入就可以使用。
|
||||
|
||||
## 一. 控制台使能动态注册
|
||||
|
||||
动态注册时,设备名称的生成有两种方式,一种是在控制台使能了动态注册产品的自动创建设备功能,则设备可以自行生成设备名称,但需保证同一产品下没有重复,一般取设备的唯一信息比如CPUID或mac地址。另一种是没有使能动态注册产品的自动创建设备,则需要在控制台预先录入各设备的名称,且设备动态注册时设备要与录入的设备名称一致,此种方式更加安全,便利性有所下降。
|
||||
|
||||
控制台使能动态注册设置如下图示:
|
||||

|
||||
|
||||
将产品密钥ProductSecret保存下来。
|
||||
|
||||
## 二. 编译运行示例程序(以**密钥认证设备**为例)
|
||||
#### 1. 编译 SDK
|
||||
修改CMakeLists.txt确保以下选项存在
|
||||
```
|
||||
set(BUILD_TYPE "release")
|
||||
set(COMPILE_TOOLS "gcc")
|
||||
set(PLATFORM "linux")
|
||||
set(FEATURE_MQTT_COMM_ENABLED ON)
|
||||
set(FEATURE_DEV_DYN_REG_ENABLED ON)
|
||||
set(FEATURE_AUTH_MODE "KEY")
|
||||
set(FEATURE_AUTH_WITH_NOTLS OFF)
|
||||
set(FEATURE_DEBUG_DEV_INFO_USED OFF)
|
||||
```
|
||||
执行脚本编译
|
||||
```
|
||||
./cmake_build.sh
|
||||
```
|
||||
示例输出dynreg_dev_sample位于`output/release/bin`文件夹中
|
||||
|
||||
#### 2. 填写设备信息
|
||||
将控制台获取到的产品信息填写到一个JSON文件dynreg_device_info.json中,其中deviceName字段填写要生成的设备名字,deviceSecret字段保持为"YOUR_IOT_PSK",这样dynreg_dev_sample就会判断设备信息为空,知道这个设备是需要进行动态注册。这部分逻辑可以由用户自行实现,sample仅作示例。
|
||||
```
|
||||
{
|
||||
"auth_mode":"KEY",
|
||||
"productId":"S3EUVBRJLB",
|
||||
"productSecret":"8Xz56tyfgQAZEDCTUGau4snA",
|
||||
"deviceName":"device_1234",
|
||||
"key_deviceinfo":{
|
||||
"deviceSecret":"YOUR_IOT_PSK"
|
||||
}
|
||||
}
|
||||
```
|
||||
#### 3. 运行示例
|
||||
执行设备动态注册例程dynreg_dev_sample:
|
||||
```
|
||||
./output/release/bin/dynreg_dev_sample -c ./dynreg_device_info.json
|
||||
DBG|2019-09-17 11:50:35|dynreg_dev_sample.c|main(80): dev psk not exist!
|
||||
DBG|2019-09-17 11:50:35|dynreg.c|IOT_DynReg_Device(467): sign:ZWM4YTEyMWE2ODUxYzk1M2Q0MDc2OWNmN2FhMTg1ZWM1ODgxMWNkNQ==
|
||||
DBG|2019-09-17 11:50:35|dynreg.c|IOT_DynReg_Device(483): request:{"deviceName":"device_1234","nonce":1439928322,"productId":"S3EUVBRJLB","timestamp":1568692235,"signature":"ZWM4YTEyMWE2ODUxYzk1M2Q0MDc2OWNmN2FhMTg1ZWM1ODgxMWNkNQ=="}
|
||||
DBG|2019-09-17 11:50:35|dynreg.c|IOT_DynReg_Device(485): resbuff len:256
|
||||
DBG|2019-09-17 11:50:35|HAL_TLS_mbedtls.c|_mbedtls_client_init(134): psk/pskid is empty!|psk=(null)|psd_id=(null)
|
||||
DBG|2019-09-17 11:50:35|HAL_TLS_mbedtls.c|HAL_TLS_Connect(204): Setting up the SSL/TLS structure...
|
||||
DBG|2019-09-17 11:50:35|HAL_TLS_mbedtls.c|HAL_TLS_Connect(246): Performing the SSL/TLS handshake...
|
||||
DBG|2019-09-17 11:50:35|HAL_TLS_mbedtls.c|HAL_TLS_Connect(247): Connecting to /gateway.tencentdevices.com/443...
|
||||
INF|2019-09-17 11:50:35|HAL_TLS_mbedtls.c|HAL_TLS_Connect(269): connected with /gateway.tencentdevices.com/443...
|
||||
DBG|2019-09-17 11:50:35|utils_httpc.c|qcloud_http_client_connect(749): http client connect success
|
||||
DBG|2019-09-17 11:50:37|dynreg.c|_parse_devinfo(244): recv: {"code":0,"message":"","len":53,"payload":"eHGRUBar9LBPI+mcaHnVEZsj05mSdoZLPhd54hDJXv/2va2rXSpfddgRy5XE/FIS835NjUr5Mhw1AJSg4yGC/w=="}
|
||||
DBG|2019-09-17 11:50:37|dynreg.c|_parse_devinfo(258): payload:eHGRUBar9LBPI+mcaHnVEZsj05mSdoZLPhd54hDJXv/2va2rXSpfddgRy5XE/FIS835NjUr5Mhw1AJSg4yGC/w==
|
||||
DBG|2019-09-17 11:50:37|dynreg.c|IOT_DynReg_Device(489): request dev info success
|
||||
DBG|2019-09-17 11:50:37|HAL_Device_linux.c|iot_save_devinfo_to_json_file(340): JsonDoc(183):{
|
||||
"auth_mode":"KEY",
|
||||
"productId":"S3EUVBRJLB",
|
||||
"productSecret":"8XzjN8rfgFVGDTNTUGau4snA",
|
||||
"deviceName":"device_1234",
|
||||
"key_deviceinfo":{
|
||||
"deviceSecret":"7WmFArtyFGH5632QwJWtYwio"
|
||||
}
|
||||
}
|
||||
DBG|2019-09-17 11:50:37|dynreg_dev_sample.c|main(99): dynamic register success,productID: S3EUVBRJLB, devName: device_1234, device_secret: 7WmFArtyFGH5632QwJWtYwio
|
||||
```
|
||||
可以看到设备动态注册已经成功,获取到的设备密钥也写入到dynreg_device_info.json文件中了
|
148
components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/gateway_sample_网关功能.md
vendored
Normal file
148
components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/gateway_sample_网关功能.md
vendored
Normal file
@@ -0,0 +1,148 @@
|
||||
# 网关设备快速入门
|
||||
本文档将讲述如何在腾讯IoT Hub控制台申请网关设备并绑定子设备, 并结合本 SDK 的**gateway_sample**快速体验网关设备通过 MQTT 协议连接到腾讯云IoT Hub, 代理子设备上下线,发送和接收消息。
|
||||
|
||||
|
||||
## 一. 控制台创建网关设备
|
||||
|
||||
#### 1. 创建网关产品和设备
|
||||
点击页面**创建新产品**按钮, 创建一个产品。
|
||||
|
||||

|
||||
|
||||
在弹出的产品窗口中,选择节点类型和产品类型,输入产品名称,选择认证方式和数据格式,输入产品描述,然后点击确定创建。普通网关设备,可按下图选择。
|
||||
|
||||

|
||||
|
||||
在生成的产品页面下,点击**设备列表**页面添加新设备。
|
||||
|
||||

|
||||
|
||||
如果产品认证方式为证书认证,输入设备名称成功后,切记点击弹窗中的**下载**按钮,下载所得包中的设备密钥文件和设备证书用于设备连接物联网通信的鉴权。
|
||||
|
||||

|
||||
|
||||
如果产品认证方式为密钥认证,输入设备名称成功后,会在弹窗中显示新添加设备的密钥
|
||||
|
||||

|
||||
|
||||
网关产品,除了自身创建产品和设备,当需要代理子设备进行通讯时,还需要按照普通产品的方式先创建子产品和子设备,并在网关产品页面添加子产品和子设备。需要注意的是子设备是无法直连物联网平台的产品,由网关设备代理连接,所以子设备的认证方式不影响连接,由网关设备来负责认证接入。
|
||||
创建好子产品之后,先到网关产品页面的子产品栏目添加子产品
|
||||
|
||||

|
||||
|
||||
再到网关设备页面的子设备栏目添加子设备
|
||||
|
||||

|
||||
|
||||
#### 2. 创建可订阅可发布的Topic
|
||||
|
||||
进入产品设置页面的后, 点击权限列表,再点击**添加Topic权限**。
|
||||
|
||||

|
||||
|
||||
在弹窗中输入 data, 并设置操作权限为**发布和订阅**,点击创建。
|
||||
|
||||

|
||||
|
||||
随后将会创建出 productID/\${deviceName}/data 的 Topic,在产品页面的权限列表中可以查看该产品的所有权限。
|
||||
|
||||
对于网关产品,除了添加本产品的Topic权限,还需要为子产品添加Topic权限
|
||||
|
||||

|
||||
|
||||
## 二. 编译运行示例程序
|
||||
|
||||
#### 1. 编译 SDK
|
||||
修改CMakeLists.txt确保以下选项存在(以**密钥认证设备**为例)
|
||||
```
|
||||
set(BUILD_TYPE "release")
|
||||
set(COMPILE_TOOLS "gcc")
|
||||
set(PLATFORM "linux")
|
||||
set(FEATURE_MQTT_COMM_ENABLED ON)
|
||||
set(FEATURE_GATEWAY_ENABLED ON)
|
||||
set(FEATURE_AUTH_MODE "KEY")
|
||||
set(FEATURE_AUTH_WITH_NOTLS OFF)
|
||||
set(FEATURE_DEBUG_DEV_INFO_USED OFF)
|
||||
```
|
||||
执行脚本编译
|
||||
```
|
||||
./cmake_build.sh
|
||||
```
|
||||
示例输出位于`output/release/bin`文件夹中
|
||||
|
||||
#### 2. 填写设备信息
|
||||
将上面在腾讯云物联网IoT Hub创建的网关设备和子设备的设备信息(以**密钥认证设备**为例)填写到device_info.json中
|
||||
```
|
||||
{
|
||||
"auth_mode":"KEY",
|
||||
"productId":"NINEPLMEB6",
|
||||
"deviceName":"Gateway-demo",
|
||||
"key_deviceinfo":{
|
||||
"deviceSecret":"vX23qEazsGsMyf5SMfs6OA6y"
|
||||
}
|
||||
|
||||
"subDev":{
|
||||
"sub_productId":"S3EUVBRJLB",
|
||||
"sub_devName":"test_device"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 3. 执行网关示例程序
|
||||
如下日志信息显示示例程序通过MQTT网关代理子设备上下线状态变化,发布和订阅消息成功。
|
||||
```
|
||||
./gateway_sample
|
||||
INF|2019-09-16 14:35:34|device.c|iot_device_info_set(67): SDK_Ver: 3.1.0, Product_ID: NINEPLMEB6, Device_Name: Gateway-demo
|
||||
DBG|2019-09-16 14:35:34|HAL_TLS_mbedtls.c|HAL_TLS_Connect(204): Setting up the SSL/TLS structure...
|
||||
DBG|2019-09-16 14:35:34|HAL_TLS_mbedtls.c|HAL_TLS_Connect(246): Performing the SSL/TLS handshake...
|
||||
DBG|2019-09-16 14:35:34|HAL_TLS_mbedtls.c|HAL_TLS_Connect(247): Connecting to /NINEPLMEB6.iotcloud.tencentdevices.com/8883...
|
||||
INF|2019-09-16 14:35:34|HAL_TLS_mbedtls.c|HAL_TLS_Connect(269): connected with /NINEPLMEB6.iotcloud.tencentdevices.com/8883...
|
||||
INF|2019-09-16 14:35:34|mqtt_client.c|IOT_MQTT_Construct(125): mqtt connect with id: Senw3 success
|
||||
DBG|2019-09-16 14:35:34|mqtt_client_subscribe.c|qcloud_iot_mqtt_subscribe(138): topicName=$gateway/operation/result/NINEPLMEB6/Gateway-demo|packet_id=27802
|
||||
DBG|2019-09-16 14:35:34|gateway_api.c|_gateway_event_handler(23): gateway sub|unsub(3) success, packet-id=27802
|
||||
DBG|2019-09-16 14:35:34|gateway_api.c|IOT_Gateway_Subdev_Online(125): there is no session, create a new session
|
||||
DBG|2019-09-16 14:35:34|mqtt_client_publish.c|qcloud_iot_mqtt_publish(337): publish packetID=0|topicName=$gateway/operation/NINEPLMEB6/Gateway-demo|payload={"type":"online","payload":{"devices":[{"product_id":"S3EUVBRJLB","device_name":"test_device"}]}}
|
||||
INF|2019-09-16 14:35:35|gateway_common.c|_gateway_message_handler(134): client_id(S3EUVBRJLB/test_device), online success. result 0
|
||||
DBG|2019-09-16 14:35:35|mqtt_client_subscribe.c|qcloud_iot_mqtt_subscribe(138): topicName=S3EUVBRJLB/test_device/data|packet_id=27803
|
||||
DBG|2019-09-16 14:35:35|gateway_api.c|_gateway_event_handler(23): gateway sub|unsub(3) success, packet-id=27803
|
||||
INF|2019-09-16 14:35:35|gateway_sample.c|_event_handler(61): subscribe success, packet-id=27803
|
||||
DBG|2019-09-16 14:35:35|mqtt_client_publish.c|qcloud_iot_mqtt_publish(329): publish topic seq=27804|topicName=S3EUVBRJLB/test_device/data|payload={"data":"test gateway"}
|
||||
INF|2019-09-16 14:35:35|gateway_sample.c|_event_handler(88): publish success, packet-id=27804
|
||||
INF|2019-09-16 14:35:35|gateway_sample.c|_message_handler(111): Receive Message With topicName:S3EUVBRJLB/test_device/data, payload:{"data":"test gateway"}
|
||||
DBG|2019-09-16 14:35:36|mqtt_client_publish.c|qcloud_iot_mqtt_publish(337): publish packetID=0|topicName=$gateway/operation/NINEPLMEB6/Gateway-demo|payload={"type":"offline","payload":{"devices":[{"product_id":"S3EUVBRJLB","device_name":"test_device"}]}}
|
||||
INF|2019-09-16 14:35:36|gateway_common.c|_gateway_message_handler(139): client_id(S3EUVBRJLB/test_device), offline success. result 0
|
||||
INF|2019-09-16 14:35:37|mqtt_client_connect.c|qcloud_iot_mqtt_disconnect(437): mqtt disconnect!
|
||||
INF|2019-09-16 14:35:37|mqtt_client.c|IOT_MQTT_Destroy(186): mqtt release!
|
||||
```
|
||||
|
||||
#### 4. 观察子设备上线
|
||||
如下日志信息显示示例程序的网关设备Gateway-demo通过MQTT代理子设备test_device的上线成功:
|
||||
```
|
||||
DBG|2019-09-16 14:35:34|mqtt_client_publish.c|qcloud_iot_mqtt_publish(337): publish packetID=0|topicName=$gateway/operation/NINEPLMEB6/Gateway-demo|payload={"type":"online","payload":{"devices":[{"product_id":"S3EUVBRJLB","device_name":"test_device"}]}}
|
||||
INF|2019-09-16 14:35:35|gateway_common.c|_gateway_message_handler(134): client_id(S3EUVBRJLB/test_device), online success. result 0
|
||||
```
|
||||
|
||||
#### 5. 观察网关发送接收子设备的消息
|
||||
如下日志信息显示示例程序的网关设备Gateway-demo通过MQTT代理子设备test_device的消息发送接收
|
||||
```
|
||||
DBG|2019-09-16 14:35:35|mqtt_client_publish.c|qcloud_iot_mqtt_publish(329): publish topic seq=27804|topicName=S3EUVBRJLB/test_device/data|payload={"data":"test gateway"}
|
||||
INF|2019-09-16 14:35:35|gateway_sample.c|_event_handler(88): publish success, packet-id=27804
|
||||
INF|2019-09-16 14:35:35|gateway_sample.c|_message_handler(111): Receive Message With topicName:S3EUVBRJLB/test_device/data, payload:{"data":"test gateway"}
|
||||
```
|
||||
|
||||
## 三. 代码说明
|
||||
|
||||
gateway_sample示例演示了网关代理一个子设备的情况,如果用户需要增加更多子设备,可以先在控制台添加子设备,然后在代码里面通过创建更多GatewayParam参数实例,并将GatewayParam参数传递给网关各个API,即可以实现网关代理多个子设备进行通讯。
|
||||
```
|
||||
// one GatewayParam only support one sub-device
|
||||
// use more GatewayParam to add more sub-device
|
||||
GatewayParam gw_param1 = DEFAULT_GATEWAY_PARAMS;;
|
||||
gw_param1.product_id = gw_dev_info.gw_info.product_id;
|
||||
gw_param1.device_name = gw_dev_info.gw_info.device_name;
|
||||
|
||||
gw_param1.subdev_product_id = "SUB-PRODUCT1";
|
||||
gw_param1.subdev_device_name = "SUB-DEVICE1";
|
||||
|
||||
IOT_Gateway_Subdev_Online(client, &gw_param1);
|
||||
```
|
||||
|
130
components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/mqtt_sample_快速入门.md
vendored
Normal file
130
components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/mqtt_sample_快速入门.md
vendored
Normal file
@@ -0,0 +1,130 @@
|
||||
|
||||
# 快速开始
|
||||
本文档将讲述如何在腾讯云物联网通信IoT Hub控制台申请设备, 并结合本 SDK 的**mqtt_sample**快速体验设备端通过 MQTT 协议连接到腾讯云IoT Hub, 发送和接收消息。
|
||||
|
||||
## 一. 控制台创建设备
|
||||
|
||||
#### 1. 注册/登录腾讯云账号
|
||||
访问[腾讯云登录页面](https://cloud.tencent.com/login?s_url=https%3A%2F%2Fcloud.tencent.com%2F), 点击[立即注册](https://cloud.tencent.com/register?s_url=https%3A%2F%2Fcloud.tencent.com%2F), 免费获取腾讯云账号,若您已有账号,可直接登录。
|
||||
|
||||
#### 2. 访问物联网通信控制台
|
||||
登录后点击右上角控制台,进入控制台后,鼠标悬停在云产品上,弹出层叠菜单,点击物联网通信。
|
||||
|
||||

|
||||
|
||||
或者直接访问[物联网通信控制台](https://console.qcloud.com/iotcloud)
|
||||
|
||||
#### 3. 创建产品和设备
|
||||
点击页面**创建新产品**按钮, 创建一个产品。
|
||||
|
||||

|
||||
|
||||
在弹出的产品窗口中,选择节点类型和产品类型,输入产品名称,选择认证方式和数据格式,输入产品描述,然后点击确定创建。对于普通直连设备,可按下图选择。
|
||||
|
||||

|
||||
|
||||
在生成的产品页面下,点击**设备列表**页面添加新设备。
|
||||
|
||||

|
||||
|
||||
如果产品认证方式为证书认证,输入设备名称成功后,切记点击弹窗中的**下载**按钮,下载所得包中的设备密钥文件和设备证书用于设备连接物联网通信的鉴权。
|
||||
|
||||

|
||||
|
||||
如果产品认证方式为密钥认证,输入设备名称成功后,会在弹窗中显示新添加设备的密钥
|
||||
|
||||

|
||||
|
||||
#### 4. 创建可订阅可发布的Topic
|
||||
|
||||
按照**第三步**中进入产品设置页面的方法进入页面后, 点击权限列表,再点击**添加Topic权限**。
|
||||
|
||||

|
||||
|
||||
在弹窗中输入 data, 并设置操作权限为**发布和订阅**,点击创建。
|
||||
|
||||

|
||||
|
||||
随后将会创建出 productID/\${deviceName}/data 的 Topic,在产品页面的权限列表中可以查看该产品的所有权限。
|
||||
|
||||
#### 5. 创建消息转发规则
|
||||
消息在设备间的转发需要通过规则引擎进行,具体用法请参考[规则引擎](https://cloud.tencent.com/document/product/634/14446)
|
||||
|
||||
需要注意的是同一个设备,如果想进行自发自收,也需要创建转发规则,对于本示例,可以参考下图设立转发规则(需要将图片中productID以及deviceName部分替换为上面创建的设备信息)
|
||||

|
||||
|
||||
## 二. 编译运行示例程序
|
||||
|
||||
#### 1. 编译 SDK
|
||||
修改CMakeLists.txt确保以下选项存在(以密钥认证设备为例)
|
||||
```
|
||||
set(BUILD_TYPE "release")
|
||||
set(COMPILE_TOOLS "gcc")
|
||||
set(PLATFORM "linux")
|
||||
set(FEATURE_MQTT_COMM_ENABLED ON)
|
||||
set(FEATURE_AUTH_MODE "KEY")
|
||||
set(FEATURE_AUTH_WITH_NOTLS OFF)
|
||||
set(FEATURE_DEBUG_DEV_INFO_USED OFF)
|
||||
```
|
||||
执行脚本编译
|
||||
```
|
||||
./cmake_build.sh
|
||||
```
|
||||
示例输出位于`output/release/bin`文件夹中
|
||||
|
||||
#### 2. 填写设备信息
|
||||
将上面在腾讯云物联网IoT Hub创建的设备的设备信息(以**密钥认证设备**为例)填写到device_info.json中
|
||||
```
|
||||
{
|
||||
"auth_mode":"KEY",
|
||||
"productId":"S3EUVBRJLB",
|
||||
"deviceName":"test_device",
|
||||
"key_deviceinfo":{
|
||||
"deviceSecret":"vX6PQqazsGsMyf5SMfs6OA6y"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 3. 执行 mqtt_sample 示例程序
|
||||
```
|
||||
./output/release/bin/mqtt_sample
|
||||
INF|2019-09-12 21:28:20|device.c|iot_device_info_set(67): SDK_Ver: 3.1.0, Product_ID: S3EUVBRJLB, Device_Name: test_device
|
||||
DBG|2019-09-12 21:28:20|HAL_TLS_mbedtls.c|HAL_TLS_Connect(204): Setting up the SSL/TLS structure...
|
||||
DBG|2019-09-12 21:28:20|HAL_TLS_mbedtls.c|HAL_TLS_Connect(246): Performing the SSL/TLS handshake...
|
||||
DBG|2019-09-12 21:28:20|HAL_TLS_mbedtls.c|HAL_TLS_Connect(247): Connecting to /S3EUVBRJLB.iotcloud.tencentdevices.com/8883...
|
||||
INF|2019-09-12 21:28:20|HAL_TLS_mbedtls.c|HAL_TLS_Connect(269): connected with /S3EUVBRJLB.iotcloud.tencentdevices.com/8883...
|
||||
INF|2019-09-12 21:28:20|mqtt_client.c|IOT_MQTT_Construct(125): mqtt connect with id: p8t0W success
|
||||
INF|2019-09-12 21:28:20|mqtt_sample.c|main(303): Cloud Device Construct Success
|
||||
DBG|2019-09-12 21:28:20|mqtt_client_subscribe.c|qcloud_iot_mqtt_subscribe(138): topicName=$sys/operation/result/S3EUVBRJLB/test_device|packet_id=1932
|
||||
INF|2019-09-12 21:28:20|mqtt_sample.c|_mqtt_event_handler(71): subscribe success, packet-id=1932
|
||||
DBG|2019-09-12 21:28:20|system_mqtt.c|_system_mqtt_sub_event_handler(80): mqtt sys topic subscribe success
|
||||
DBG|2019-09-12 21:28:20|mqtt_client_publish.c|qcloud_iot_mqtt_publish(337): publish packetID=0|topicName=$sys/operation/S3EUVBRJLB/test_device|payload={"type": "get", "resource": ["time"]}
|
||||
DBG|2019-09-12 21:28:20|system_mqtt.c|_system_mqtt_message_callback(63): Recv Msg Topic:$sys/operation/result/S3EUVBRJLB/test_device, payload:{"type":"get","time":1568294900}
|
||||
INF|2019-09-12 21:28:21|mqtt_sample.c|main(316): system time is 1568294900
|
||||
DBG|2019-09-12 21:28:21|mqtt_client_subscribe.c|qcloud_iot_mqtt_subscribe(138): topicName=S3EUVBRJLB/test_device/data|packet_id=1933
|
||||
INF|2019-09-12 21:28:21|mqtt_sample.c|_mqtt_event_handler(71): subscribe success, packet-id=1933
|
||||
DBG|2019-09-12 21:28:21|mqtt_client_publish.c|qcloud_iot_mqtt_publish(329): publish topic seq=1934|topicName=S3EUVBRJLB/test_device/data|payload={"action": "publish_test", "count": "0"}
|
||||
INF|2019-09-12 21:28:21|mqtt_sample.c|_mqtt_event_handler(98): publish success, packet-id=1934
|
||||
INF|2019-09-12 21:28:21|mqtt_sample.c|on_message_callback(195): Receive Message With topicName:S3EUVBRJLB/test_device/data, payload:{"action": "publish_test", "count": "0"}
|
||||
INF|2019-09-12 21:28:22|mqtt_client_connect.c|qcloud_iot_mqtt_disconnect(437): mqtt disconnect!
|
||||
INF|2019-09-12 21:28:22|system_mqtt.c|_system_mqtt_sub_event_handler(98): mqtt client has been destroyed
|
||||
INF|2019-09-12 21:28:22|mqtt_client.c|IOT_MQTT_Destroy(186): mqtt release!
|
||||
```
|
||||
|
||||
#### 4. 观察消息发送
|
||||
如下日志信息显示示例程序通过 MQTT 的 Publish 类型消息, 上报数据到 /{productID}/{deviceName}/data, 服务器已经收到并成功完成了该消息的处理
|
||||
```
|
||||
INF|2019-09-12 21:28:21|mqtt_sample.c|_mqtt_event_handler(98): publish success, packet-id=1934
|
||||
```
|
||||
|
||||
#### 5. 观察消息接收
|
||||
如下日志信息显示该消息因为是到达已被订阅的 Topic, 所以又被服务器原样推送到示例程序, 并进入相应的回调函数
|
||||
```
|
||||
INF|2019-09-12 21:28:21|mqtt_sample.c|on_message_callback(195): Receive Message With topicName:S3EUVBRJLB/test_device/data, payload:{"action": "publish_test", "count": "0"}
|
||||
```
|
||||
|
||||
#### 6. 观察控制台日志
|
||||
可以登录物联网通信控制台, 点击左边导航栏中的**云日志**, 查看刚才上报的消息
|
||||

|
||||
|
||||
|
112
components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/ota_sample_固件升级.md
vendored
Normal file
112
components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/ota_sample_固件升级.md
vendored
Normal file
@@ -0,0 +1,112 @@
|
||||
# OTA设备固件升级
|
||||
|
||||
关于物联平台 OTA 固件升级功能及流程介绍,请参考官网文档[设备固件升级](https://cloud.tencent.com/document/product/634/14674)
|
||||
|
||||
## 一. 上传固件
|
||||
|
||||
进行固件升级,首先要上传固件到物联网后台,可以通过控制台进行上传,如下图示:
|
||||

|
||||
|
||||
## 二. 编译运行示例程序(以**MQTT密钥认证设备**为例)
|
||||
#### 1. 编译 SDK
|
||||
修改CMakeLists.txt确保以下选项存在
|
||||
```
|
||||
set(BUILD_TYPE "release")
|
||||
set(COMPILE_TOOLS "gcc")
|
||||
set(PLATFORM "linux")
|
||||
set(FEATURE_MQTT_COMM_ENABLED ON)
|
||||
set(FEATURE_OTA_COMM_ENABLED ON)
|
||||
set(FEATURE_OTA_SIGNAL_CHANNEL "MQTT")
|
||||
set(FEATURE_AUTH_MODE "KEY")
|
||||
set(FEATURE_AUTH_WITH_NOTLS OFF)
|
||||
set(FEATURE_DEBUG_DEV_INFO_USED OFF)
|
||||
```
|
||||
执行脚本编译
|
||||
```
|
||||
./cmake_build.sh
|
||||
```
|
||||
示例输出ota_mqtt_sample位于`output/release/bin`文件夹中
|
||||
|
||||
#### 2. 填写设备信息
|
||||
将设备信息填写到配置文件device_info.json中
|
||||
```
|
||||
{
|
||||
"auth_mode":"KEY",
|
||||
"productId":"S3EUVBRJLB",
|
||||
"deviceName":"test_device",
|
||||
"key_deviceinfo":{
|
||||
"deviceSecret":"vX6PQqazsGsMyf5SMfs6OA6y"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 3. 运行示例
|
||||
执行OTA MQTT例程ota_mqtt_sample:
|
||||
```
|
||||
./output/release/bin/ota_mqtt_sample
|
||||
INF|2020-03-04 16:50:35|qcloud_iot_device.c|iot_device_info_set(50): SDK_Ver: 3.1.2, Product_ID: S3EUVBRJLB, Device_Name: test_device
|
||||
DBG|2020-03-04 16:50:35|HAL_TLS_mbedtls.c|HAL_TLS_Connect(206): Setting up the SSL/TLS structure...
|
||||
DBG|2020-03-04 16:50:35|HAL_TLS_mbedtls.c|HAL_TLS_Connect(248): Performing the SSL/TLS handshake...
|
||||
DBG|2020-03-04 16:50:35|HAL_TLS_mbedtls.c|HAL_TLS_Connect(249): Connecting to /S3EUVBRJLB.iotcloud.tencentdevices.com/8883...
|
||||
INF|2020-03-04 16:50:35|HAL_TLS_mbedtls.c|HAL_TLS_Connect(271): connected with /S3EUVBRJLB.iotcloud.tencentdevices.com/8883...
|
||||
INF|2020-03-04 16:50:35|mqtt_client.c|IOT_MQTT_Construct(111): mqtt connect with id: BzaMF success
|
||||
INF|2020-03-04 16:50:35|ota_mqtt_sample.c|main(516): Cloud Device Construct Success
|
||||
DBG|2020-03-04 16:50:35|mqtt_client_subscribe.c|qcloud_iot_mqtt_subscribe(141): topicName=$ota/update/S3EUVBRJLB/test_device|packet_id=63333
|
||||
INF|2020-03-04 16:50:35|ota_mqtt_sample.c|_event_handler(77): subscribe success, packet-id=63333
|
||||
DBG|2020-03-04 16:50:35|ota_mqtt.c|_otamqtt_event_callback(117): OTA topic subscribe success
|
||||
INF|2020-03-04 16:50:36|ota_mqtt_sample.c|_get_local_fw_running_version(363): FW running version: 1.0.0
|
||||
DBG|2020-03-04 16:50:36|mqtt_client_publish.c|qcloud_iot_mqtt_publish(334): publish topic seq=63334|topicName=$ota/report/S3EUVBRJLB/test_device|payload={"type": "report_version", "report":{"version":"1.0.0"}}
|
||||
INF|2020-03-04 16:50:36|ota_mqtt_sample.c|_event_handler(89): publish success, packet-id=63334
|
||||
DBG|2020-03-04 16:50:36|ota_mqtt.c|_otamqtt_upgrage_cb(103): topic=$ota/update/S3EUVBRJLB/test_device
|
||||
INF|2020-03-04 16:50:36|ota_mqtt.c|_otamqtt_upgrage_cb(104): len=86, topic_msg={"result_code":0,"result_msg":"success","type":"report_version_rsp","version":"1.0.0"}
|
||||
INF|2020-03-04 16:50:36|ota_client.c|_ota_callback(102): Report version success!
|
||||
INF|2020-03-04 16:50:36|ota_mqtt_sample.c|process_ota(389): wait for ota upgrade command...
|
||||
INF|2020-03-04 16:50:37|ota_mqtt_sample.c|process_ota(389): wait for ota upgrade command...
|
||||
```
|
||||
可以看到设备已经上报了当前的固件版本,并在等待固件升级的命令下发
|
||||
|
||||
#### 4. 执行固件升级命令
|
||||
|
||||
在收到设备上报的固件版本之后,可以选择要升级的新固件版本并执行升级命令,可以通过控制台进行操作,如下图示:
|
||||

|
||||
|
||||
这个时候再观察sample的示例打印,可以看到设备端通过MQTT接收到升级命令,并且通过HTTPS去下载固件并保存到本地
|
||||
```
|
||||
INF|2020-03-04 16:50:38|ota_mqtt_sample.c|process_ota(389): wait for ota upgrade command...
|
||||
DBG|2020-03-04 16:50:39|ota_mqtt.c|_otamqtt_upgrage_cb(103): topic=$ota/update/S3EUVBRJLB/test_device
|
||||
INF|2020-03-04 16:50:39|ota_mqtt.c|_otamqtt_upgrage_cb(104): len=454, topic_msg={"file_size":175436,"md5sum":"ad4615b866c13afb8b293a679bfa5dc4","type":"update_firmware","url":"https://ota-1255858890.cos.ap-guangzhou.myqcloud.com/100008768029_S3EUVBRJLB_1.3.0?sign=q-sign-algorithm%3Dsha1%26q-ak%3DAKIDdO8ldrUa0Uts4H5Gzx6FZ9nfedjpiCd7%26q-sign-time%3D1583311839%3B1583398239%26q-key-time%3D1583311839%3B1583398239%26q-header-list%3D%26q-url-param-list%3D%26q-signature%3D1215yt303628f88f31c9a7734ead8a7fa32ed1b3%00","version":"1.3.0"}
|
||||
|
||||
INF|2020-03-04 16:50:39|ota_mqtt_sample.c|process_ota(389): wait for ota upgrade command...
|
||||
ERR|2020-03-04 16:50:39|ota_mqtt_sample.c|_get_local_fw_info(251): open file ./FW_S3EUVBRJLBtest_device.json failed
|
||||
DBG|2020-03-04 16:50:39|ota_client.c|IOT_OTA_StartDownload(347): to download FW from offset: 0, size: 175436
|
||||
DBG|2020-03-04 16:50:39|ota_fetch.c|ofc_Init(83): head_content:Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
|
||||
Accept-Encoding: gzip, deflate
|
||||
Range: bytes=0-175436
|
||||
|
||||
DBG|2020-03-04 16:50:39|HAL_TLS_mbedtls.c|_mbedtls_client_init(134): psk/pskid is empty!|psk=(null)|psd_id=(null)
|
||||
DBG|2020-03-04 16:50:39|HAL_TLS_mbedtls.c|HAL_TLS_Connect(206): Setting up the SSL/TLS structure...
|
||||
DBG|2020-03-04 16:50:39|HAL_TLS_mbedtls.c|HAL_TLS_Connect(248): Performing the SSL/TLS handshake...
|
||||
DBG|2020-03-04 16:50:39|HAL_TLS_mbedtls.c|HAL_TLS_Connect(249): Connecting to /ota-1255858890.cos.ap-guangzhou.myqcloud.com/443...
|
||||
INF|2020-03-04 16:50:40|HAL_TLS_mbedtls.c|HAL_TLS_Connect(271): connected with /ota-1255858890.cos.ap-guangzhou.myqcloud.com/443...
|
||||
DBG|2020-03-04 16:50:40|utils_httpc.c|qcloud_http_client_connect(747): http client connect success
|
||||
DBG|2020-03-04 16:50:40|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$ota/report/S3EUVBRJLB/test_device|payload={"type": "report_progress", "report": {"progress": {"state":"downloading", "percent":"0", "result_code":"0", "result_msg":""}, "version": "1.3.0"}}
|
||||
DBG|2020-03-04 16:50:41|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$ota/report/S3EUVBRJLB/test_device|payload={"type": "report_progress", "report": {"progress": {"state":"downloading", "percent":"31", "result_code":"0", "result_msg":""}, "version": "1.3.0"}}
|
||||
DBG|2020-03-04 16:50:42|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$ota/report/S3EUVBRJLB/test_device|payload={"type": "report_progress", "report": {"progress": {"state":"downloading", "percent":"59", "result_code":"0", "result_msg":""}, "version": "1.3.0"}}
|
||||
DBG|2020-03-04 16:50:43|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$ota/report/S3EUVBRJLB/test_device|payload={"type": "report_progress", "report": {"progress": {"state":"downloading", "percent":"88", "result_code":"0", "result_msg":""}, "version": "1.3.0"}}
|
||||
DBG|2020-03-04 16:50:43|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$ota/report/S3EUVBRJLB/test_device|payload={"type": "report_progress", "report": {"progress": {"state":"downloading", "percent":"100", "result_code":"0", "result_msg":""}, "version": "1.3.0"}}
|
||||
INF|2020-03-04 16:50:43|ota_client.c|IOT_OTA_Ioctl(638): FW MD5 check: origin=ad4615b866c13afb8b293a679bfa5dc4, now=ad4615b866c13afb8b293a679bfa5dc4
|
||||
INF|2020-03-04 16:50:43|ota_mqtt_sample.c|process_ota(456): The firmware is valid
|
||||
DBG|2020-03-04 16:50:43|mqtt_client_publish.c|qcloud_iot_mqtt_publish(334): publish topic seq=63335|topicName=$ota/report/S3EUVBRJLB/test_device|payload={"type": "report_progress", "report":{"progress":{"state":"done", "result_code":"0", "result_msg":""}, "version":"1.3.0"}}
|
||||
INF|2020-03-04 16:50:44|ota_mqtt_sample.c|_event_handler(89): publish success, packet-id=63335
|
||||
INF|2020-03-04 16:50:44|mqtt_client_connect.c|qcloud_iot_mqtt_disconnect(450): mqtt disconnect!
|
||||
INF|2020-03-04 16:50:44|ota_mqtt.c|_otamqtt_event_callback(135): mqtt client has been destroyed
|
||||
INF|2020-03-04 16:50:44|mqtt_client.c|IOT_MQTT_Destroy(171): mqtt release!
|
||||
```
|
||||
|
||||
## 三. 代码使用说明
|
||||
|
||||
1. 固件升级,支持通过HTTP或者HTTPS来下载固件,可以通过编译选项FEATURE_OTA_USE_HTTPS来选择
|
||||
2. SDK的固件升级,支持断点续传功能,即当固件下载过程因为网络或者其他原因中断了,则再次下载的时候,可以从上一次中断的位置继续下载。
|
||||
3. 在ota_mqtt_sample.c中,process_ota函数为OTA的核心流程,包括了版本上报,等待升级命令,发起下载并保存,校验文件MD5以及回复升级结果的过程,同时为断点续传功能实时保存下载状态。该函数在各个平台适配的时候可以保持不变。而跟固件保存,断点续传状态保存相关的功能函数,则跟平台密切相关,示例中使用了文件操作,在支持标准文件操作的系统比如Linux/Windows上面可以直接使用,对于其他平台则需要进行适配。
|
||||
|
||||
|
113
components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/shadow_sample_设备影子.md
vendored
Normal file
113
components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/shadow_sample_设备影子.md
vendored
Normal file
@@ -0,0 +1,113 @@
|
||||
# 设备影子
|
||||
本文档介绍设备影子功能,并结合 SDK 的**shadow_sample**展示影子的数据流和功能。
|
||||
|
||||
## 设备影子介绍
|
||||
|
||||
设备影子本质上是一份在服务器端缓存的设备数据(JSON 形式),主要用于保存:
|
||||
|
||||
- 设备的当前配置
|
||||
- 设备的当前状态
|
||||
|
||||
作为中介,设备影子可以有效实现设备和用户应用之间的数据双向同步:
|
||||
|
||||
- 对于设备配置,用户应用不需要直接修改设备,只需要修改服务器端的设备影子,由设备影子同步到设备。即使当时设备不在线,设备上线后仍能从设备影子同步到最新配置。
|
||||
- 对于设备状态,设备将状态上报到设备影子,用户应用查询时,只需查询设备影子即可。这样可以有效减少设备和服务器端的网络交互,尤其是低功耗设备。
|
||||
|
||||
关于设备影子的详细介绍,请参考[设备影子详情](https://cloud.tencent.com/document/product/634/11918)
|
||||
|
||||
## 编译运行示例程序(以**密钥认证设备**为例)
|
||||
|
||||
#### 1. 编译 SDK 及示例
|
||||
修改CMakeLists.txt确保以下选项存在
|
||||
```
|
||||
set(BUILD_TYPE "release")
|
||||
set(COMPILE_TOOLS "gcc")
|
||||
set(PLATFORM "linux")
|
||||
set(FEATURE_MQTT_COMM_ENABLED ON)
|
||||
set(FEATURE_MQTT_DEVICE_SHADOW ON)
|
||||
set(FEATURE_AUTH_MODE "KEY")
|
||||
set(FEATURE_AUTH_WITH_NOTLS OFF)
|
||||
set(FEATURE_DEBUG_DEV_INFO_USED OFF)
|
||||
```
|
||||
执行脚本编译
|
||||
```
|
||||
./cmake_build.sh
|
||||
```
|
||||
示例输出shadow_sample位于`output/release/bin`文件夹中
|
||||
|
||||
#### 2. 填写设备信息
|
||||
将设备信息填写到配置文件device_info.json中
|
||||
```
|
||||
{
|
||||
"auth_mode":"KEY",
|
||||
"productId":"S3EUVBRJLB",
|
||||
"deviceName":"test_device",
|
||||
"key_deviceinfo":{
|
||||
"deviceSecret":"vX6PQqazsGsMyf5SMfs6OA6y"
|
||||
}
|
||||
}
|
||||
```
|
||||
#### 3. 第一次执行shadow_sample示例程序
|
||||
示例首先订阅了$shadow/operation/result/{productID}/{deviceName}主题,然后通过向$shadow/operation/{productID}/{deviceName}主题发送shadow GET命令来获取云端缓存的设备状态,然后就循环更新updateCount变量并执行shadow UPDATE。
|
||||
假设在updateCount=3的时候停止示例运行。
|
||||
|
||||
```
|
||||
./output/release/bin/shadow_sample
|
||||
INF|2019-09-17 12:49:59|device.c|iot_device_info_set(67): SDK_Ver: 3.1.0, Product_ID: S3EUVBRJLB, Device_Name: test_device
|
||||
DBG|2019-09-17 12:49:59|HAL_TLS_mbedtls.c|HAL_TLS_Connect(204): Setting up the SSL/TLS structure...
|
||||
DBG|2019-09-17 12:49:59|HAL_TLS_mbedtls.c|HAL_TLS_Connect(246): Performing the SSL/TLS handshake...
|
||||
DBG|2019-09-17 12:49:59|HAL_TLS_mbedtls.c|HAL_TLS_Connect(247): Connecting to /S3EUVBRJLB.iotcloud.tencentdevices.com/8883...
|
||||
INF|2019-09-17 12:49:59|HAL_TLS_mbedtls.c|HAL_TLS_Connect(269): connected with /S3EUVBRJLB.iotcloud.tencentdevices.com/8883...
|
||||
INF|2019-09-17 12:50:00|mqtt_client.c|IOT_MQTT_Construct(125): mqtt connect with id: bph30 success
|
||||
DBG|2019-09-17 12:50:00|mqtt_client_subscribe.c|qcloud_iot_mqtt_subscribe(138): topicName=$shadow/operation/result/S3EUVBRJLB/test_device|packet_id=46510
|
||||
DBG|2019-09-17 12:50:00|shadow_client.c|_shadow_event_handler(63): shadow subscribe success, packet-id=46510
|
||||
INF|2019-09-17 12:50:00|shadow_client.c|IOT_Shadow_Construct(172): Sync device data successfully
|
||||
DBG|2019-09-17 12:50:00|shadow_client.c|IOT_Shadow_Get(383): GET Request Document: {"clientToken":"S3EUVBRJLB-0"}
|
||||
DBG|2019-09-17 12:50:00|mqtt_client_publish.c|qcloud_iot_mqtt_publish(337): publish packetID=0|topicName=$shadow/operation/S3EUVBRJLB/test_device|payload={"type":"get", "clientToken":"S3EUVBRJLB-0"}
|
||||
DBG|2019-09-17 12:50:00|shadow_client_manager.c|_on_operation_result_handler(278): type:get
|
||||
DBG|2019-09-17 12:50:00|shadow_client.c|_update_ack_cb(114): requestAck=0
|
||||
DBG|2019-09-17 12:50:00|shadow_client.c|_update_ack_cb(117): Received Json Document={"clientToken":"S3EUVBRJLB-0","payload":{"state":{"reported":{}},"timestamp":1568695800,"version":0},"result":0,"timestamp":1568695800,"type":"get"}
|
||||
DBG|2019-09-17 12:50:00|shadow_client.c|IOT_Shadow_Update(317): UPDATE Request Document: {"state":{"reported":{"updateCount":0}}, "clientToken":"S3EUVBRJLB-1"}
|
||||
DBG|2019-09-17 12:50:00|mqtt_client_publish.c|qcloud_iot_mqtt_publish(337): publish packetID=0|topicName=$shadow/operation/S3EUVBRJLB/test_device|payload={"type":"update", "state":{"reported":{"updateCount":0}}, "clientToken":"S3EUVBRJLB-1"}
|
||||
DBG|2019-09-17 12:50:01|shadow_client_manager.c|_on_operation_result_handler(278): type:update
|
||||
INF|2019-09-17 12:50:01|shadow_sample.c|OnShadowUpdateCallback(49): recv shadow update response, response ack: 0
|
||||
DBG|2019-09-17 12:50:01|shadow_client.c|IOT_Shadow_Update(317): UPDATE Request Document: {"state":{"reported":{"updateCount":1}}, "clientToken":"S3EUVBRJLB-2"}
|
||||
DBG|2019-09-17 12:50:01|mqtt_client_publish.c|qcloud_iot_mqtt_publish(337): publish packetID=0|topicName=$shadow/operation/S3EUVBRJLB/test_device|payload={"type":"update", "state":{"reported":{"updateCount":1}}, "clientToken":"S3EUVBRJLB-2"}
|
||||
DBG|2019-09-17 12:50:02|shadow_client_manager.c|_on_operation_result_handler(278): type:update
|
||||
INF|2019-09-17 12:50:02|shadow_sample.c|OnShadowUpdateCallback(49): recv shadow update response, response ack: 0
|
||||
DBG|2019-09-17 12:50:02|shadow_client.c|IOT_Shadow_Update(317): UPDATE Request Document: {"state":{"reported":{"updateCount":2}}, "clientToken":"S3EUVBRJLB-3"}
|
||||
DBG|2019-09-17 12:50:02|mqtt_client_publish.c|qcloud_iot_mqtt_publish(337): publish packetID=0|topicName=$shadow/operation/S3EUVBRJLB/test_device|payload={"type":"update", "state":{"reported":{"updateCount":2}}, "clientToken":"S3EUVBRJLB-3"}
|
||||
DBG|2019-09-17 12:50:03|shadow_client_manager.c|_on_operation_result_handler(278): type:update
|
||||
INF|2019-09-17 12:50:03|shadow_sample.c|OnShadowUpdateCallback(49): recv shadow update response, response ack: 0
|
||||
DBG|2019-09-17 12:50:04|shadow_client.c|IOT_Shadow_Update(317): UPDATE Request Document: {"state":{"reported":{"updateCount":3}}, "clientToken":"S3EUVBRJLB-4"}
|
||||
DBG|2019-09-17 12:50:04|mqtt_client_publish.c|qcloud_iot_mqtt_publish(337): publish packetID=0|topicName=$shadow/operation/S3EUVBRJLB/test_device|payload={"type":"update", "state":{"reported":{"updateCount":3}}, "clientToken":"S3EUVBRJLB-4"}
|
||||
```
|
||||
#### 4. 查看云端设备影子状态变化并修改状态
|
||||
从控制台的虚拟设备,可以看到该设备的updateCount已经更新为3,即便设备已经离线,仍然可以通过这份缓存来获取设备离线之前的最新状态。
|
||||

|
||||
|
||||
这个时候如果点击修改,则可以改变影子状态,这个操作相当于模拟设备离线期间,通过云API修改设备的目标状态,比如将updateCount更改为5
|
||||
|
||||

|
||||
|
||||
确定修改之后,再次运行shadow_sample
|
||||
|
||||
#### 5. 第二次执行shadow_sample示例程序
|
||||
这时候可以看到当执行shadow GET命令来获取云端缓存的设备状态,updateCount已经变为云端最新的状态。
|
||||
```
|
||||
./output/release/bin/shadow_sample
|
||||
INF|2019-09-17 12:59:01|device.c|iot_device_info_set(67): SDK_Ver: 3.1.0, Product_ID: S3EUVBRJLB, Device_Name: test_device
|
||||
DBG|2019-09-17 12:59:01|HAL_TLS_mbedtls.c|HAL_TLS_Connect(204): Setting up the SSL/TLS structure...
|
||||
DBG|2019-09-17 12:59:01|HAL_TLS_mbedtls.c|HAL_TLS_Connect(246): Performing the SSL/TLS handshake...
|
||||
DBG|2019-09-17 12:59:01|HAL_TLS_mbedtls.c|HAL_TLS_Connect(247): Connecting to /S3EUVBRJLB.iotcloud.tencentdevices.com/8883...
|
||||
INF|2019-09-17 12:59:01|HAL_TLS_mbedtls.c|HAL_TLS_Connect(269): connected with /S3EUVBRJLB.iotcloud.tencentdevices.com/8883...
|
||||
INF|2019-09-17 12:59:01|mqtt_client.c|IOT_MQTT_Construct(125): mqtt connect with id: hY8DA success
|
||||
DBG|2019-09-17 12:59:01|mqtt_client_subscribe.c|qcloud_iot_mqtt_subscribe(138): topicName=$shadow/operation/result/S3EUVBRJLB/test_device|packet_id=63420
|
||||
DBG|2019-09-17 12:59:01|shadow_client.c|_shadow_event_handler(63): shadow subscribe success, packet-id=63420
|
||||
INF|2019-09-17 12:59:01|shadow_client.c|IOT_Shadow_Construct(172): Sync device data successfully
|
||||
DBG|2019-09-17 12:59:01|shadow_client.c|IOT_Shadow_Get(383): GET Request Document: {"clientToken":"S3EUVBRJLB-0"}
|
||||
DBG|2019-09-17 12:59:01|mqtt_client_publish.c|qcloud_iot_mqtt_publish(337): publish packetID=0|topicName=$shadow/operation/S3EUVBRJLB/test_device|payload={"type":"get", "clientToken":"S3EUVBRJLB-0"}
|
||||
DBG|2019-09-17 12:59:01|shadow_client_manager.c|_on_operation_result_handler(278): type:get
|
||||
DBG|2019-09-17 12:59:01|shadow_client.c|_update_ack_cb(114): requestAck=0
|
||||
DBG|2019-09-17 12:59:01|shadow_client.c|_update_ack_cb(117): Received Json Document={"clientToken":"S3EUVBRJLB-0","payload":{"state":{"reported":{"updateCount":5}},"timestamp":1568696289949,"version":5},"result":0,"timestamp":1568696341,"type":"get"}
|
||||
```
|
Reference in New Issue
Block a user