Skip to content

Commit

Permalink
fix&doc:
Browse files Browse the repository at this point in the history
1. fix function _mqtt_yield_thread local variable redefine bug.
2. add dynamic register doc
  • Loading branch information
yougaliu committed Mar 10, 2021
1 parent 74b8325 commit 810ac68
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 9 deletions.
17 changes: 11 additions & 6 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ set(FEATURE_SYSTEM_COMM_ENABLED OFF)
# 是否使能日志上报云端功能
set(FEATURE_LOG_UPLOAD_ENABLED OFF)

# 是否打开 WIFI 配网功能
set(FEATURE_WIFI_CONFIG_ENABLED OFF)

# 使用SDK AT组件实现通用TCP模组网络读写需要配置 --->begin
# 是否打开AT模组TCP功能
Expand All @@ -81,9 +83,6 @@ set(FEATURE_AT_OS_USED OFF)
# 是否打开AT模组调试功能
set(FEATURE_AT_DEBUG OFF)

# 是否打开 WIFI 配网功能
set(FEATURE_WIFI_CONFIG_ENABLED ON)

# 使用SDK AT组件实现通用TCP模组网络读写需要配置 <---end

######################CONFIG END######################################
Expand Down Expand Up @@ -139,6 +138,7 @@ if(${FEATURE_OTA_COMM_ENABLED} STREQUAL "ON")
option(OTA_MQTT_CHANNEL "Enable OTA_MQTT_CHANNEL" ON)
endif()


option(DEV_DYN_REG_ENABLED "Enable DEV_DYN_REG" ${FEATURE_DEV_DYN_REG_ENABLED})
option(GATEWAY_ENABLED "Enable GATEWAY" ${FEATURE_GATEWAY_ENABLED})
option(GATEWAY_DYN_BIND_SUBDEV_ENABLED "Enable GATEWAY_DYN_BIND_SUBDEV" ${FEATURE_GATEWAY_DYN_BIND_SUBDEV_ENABLED})
Expand All @@ -159,10 +159,15 @@ else()
option(OTA_USE_HTTPS "Enable OTA_USE_HTTPS" ${FEATURE_OTA_USE_HTTPS})
endif()

if(${FEATURE_GATEWAY_ENABLED} STREQUAL "ON")
option(MULTITHREAD_ENABLED "Enable MULTITHREAD" ON)
if(${FEATURE_AUTH_WITH_NOTLS} STREQUAL "ON" )
option(OTA_USE_HTTPS "Enable OTA_USE_HTTPS" OFF)
else()
option(MULTITHREAD_ENABLED "Enable MULTITHREAD" ${FEATURE_MULTITHREAD_ENABLED})
option(OTA_USE_HTTPS "Enable OTA_USE_HTTPS" ${FEATURE_OTA_USE_HTTPS})
endif()


if(${FEATURE_ASR_ENABLED} STREQUAL "ON" AND ${FEATURE_OTA_USE_HTTPS} STREQUAL "OFF")
message(FATAL_ERROR "Error! ASR NEED HTTPS ENABLE")
endif()

if(AT_TCP_ENABLED STREQUAL "ON")
Expand Down
2 changes: 1 addition & 1 deletion docs/Device_Auth设备接入认证.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
物联网平台提供以下三种认证方案:
- 证书认证(设备级):为每台设备分配证书 + 私钥,使用非对称加密认证接入,用户需要为每台设备烧录不同的配置信息。
- 密钥认证(设备级):为每台设备分配设备密钥,使用对称加密认证接入,用户需要为每台设备烧录不同的配置信息。
- 动态注册认证(产品级):为同一产品下的所有设备分配统一密钥,设备通过注册请求获取设备证书/密钥后认证接入,用户可以为同一批设备烧录相同的配置信息。IoT Explorer平台暂不支持动态注册认证。
- 动态注册认证(产品级):为同一产品下的所有设备分配统一密钥,设备通过注册请求获取设备证书/密钥后认证接入,用户可以为同一批设备烧录相同的配置信息。

三种方案在易用性、安全性和对设备资源要求上各有优劣,您可以根据自己的业务场景综合评估选择。方案对比如下:

Expand Down
53 changes: 53 additions & 0 deletions docs/动态注册使用说明.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
### 动态注册使用说明
- 对于一机一密的场景,需要在生产环节将为每一个设备烧录由平台生成的唯一设备信息。
- 对于一型一密场景,同一产品类型的设备只要预置产品级密钥,可省去工厂的设备信息烧录。设备出厂后,在第一次开机且成功联网的情况下,可发起动态注册,通过产品密钥鉴权,从平台获取设备信息,然后存在本地,达成和工厂烧录一样的效果。


### 使用步骤
- 1、在[控制台使能](https://cloud.tencent.com/document/product/1081/47494)产品的动态注册功能。
>! 使能动态注册后才有产品密钥。
![](https://main.qcloudimg.com/raw/d615cf031e5d3d8b06c56cb4caeec383.png)

- 2 、选择是否使能自动设备创建。这个选项决定动态注册的时候的设备名,是设备自定义的(需要保证统一产品下设备名唯一),还是使用平台预定义的设备名。

- 3、将产品密钥预置在设备侧。设备信息获取接口`HAL_GetDevInfo` 获取设备信息时会获取产品密钥,可通过设备信息设置接口`HAL_SetDevInfo`设置产品密钥。

- 4、判断是否触发动态注册。一般的方法是,设备启动,在动态注册使能的情况下,通过设备信息获取接口`HAL_GetDevInfo` 获取设备信息,判断设备密钥是否是默认值,如果是,则调用SDK的动态注册接口`IOT_DynReg_Device`发起动态注册,若动态注册成功,则通过设备信息设置接口`HAL_SetDevInfo`保存返回设备信息。后续设备即可按一机一密启动流程正常使用。

- 5、SDK设备动态注册示例`dynreg_dev_sample.c`说明:
- 判断设备密钥是否为空,是否触发动态注册
```
memset((char *)&sDevInfo, 0, sizeof(DeviceInfo));
ret = HAL_GetDevInfo(&sDevInfo);
/* just demo the PSK is empty */
if (!strcmp(sDevInfo.device_secret, QCLOUD_IOT_NULL_DEVICE_SECRET)) {
Log_d("dev psk not exist!");
infoNullFlag = true;
} else {
Log_d("dev psk exist");
}
```

- 发起动态注册,并保存动态注册的设备信息
```
/* device cert/key files or PSK is empty, do dynamic register to fetch */
if (infoNullFlag) {
if (QCLOUD_RET_SUCCESS == IOT_DynReg_Device(&sDevInfo)) {
ret = HAL_SetDevInfo(&sDevInfo);
if (QCLOUD_RET_SUCCESS != ret) {
Log_e("devices info save fail");
} else {
Log_d(
"dynamic register success,productID: %s, devName: %s, "
"device_secret: %s",
sDevInfo.product_id, sDevInfo.device_name, sDevInfo.device_secret);
}
} else {
Log_e("%s dynamic register fail", sDevInfo.device_name);
}
}
```

- 6、重复注册说明。一般情况动态注册只要执行一次,后续使用保存的设备信息即可。如果设备动态注册成功,但未激活(和平台成功建立过连接),则可重复注册。若已激活,则需要在控制台删除设备,才可以再次注册。不建议通过更换设备名的方式多次动态注册,相当于一个设备消耗多个设备的资源,对于运营管理也会带来麻烦。
1 change: 1 addition & 0 deletions include/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,4 @@
/* #undef GATEWAY_DYN_BIND_SUBDEV_ENABLED */
#define ASR_ENABLED
#define RESOURCE_UPDATE_ENABLED
/* #undef WIFI_CONFIG_ENABLED */
2 changes: 1 addition & 1 deletion make.settings
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,6 @@ FEATURE_AT_OS_USED = y
FEATURE_AT_DEBUG = y

# 是否打开WIFI配网功能
FEATURE_WIFI_CONFIG_ENABLED = y
FEATURE_WIFI_CONFIG_ENABLED = n


2 changes: 1 addition & 1 deletion sdk_src/protocol/mqtt/mqtt_client.c
Original file line number Diff line number Diff line change
Expand Up @@ -263,7 +263,7 @@ static void _mqtt_yield_thread(void *ptr)

Log_d("start mqtt_yield_thread...");
while (mqtt_client->yield_thread_running) {
int rc = qcloud_iot_mqtt_yield(mqtt_client, 200);
rc = qcloud_iot_mqtt_yield(mqtt_client, 200);

#ifdef LOG_UPLOAD
/* do instant log uploading if MQTT communication error */
Expand Down

0 comments on commit 810ac68

Please sign in to comment.