设备重置

更新时间:2023-09-06 10:40:14

设备重置是把设备恢复到配网前状态的操作,本文档将介绍 TuyaOS 设备重置功能。

背景信息

根据触发源不同,可以分为本地重置和 App 重置。根据重置后设备所处的状态,又可分为:

  • 普通重置(解除绑定):仅解除设备与云端的绑定关系,云端和设备本地都保留数据,设备重新激活后,跟绑定前的数据是一致的,无需重新添加子设备和配置智能场景等。

  • 恢复出厂重置(解绑并清除数据):除了解除设备与云端的绑定关系,还清空云端和设备本地的数据,相当于全新的设备。

实现方法

App 重置时,无需调用接口。本地重置时,您需要主动调用重置接口:

  • 普通重置(解除绑定)tuya_iot_wf_gw_unactive
  • 恢复出厂重置(解绑并清除数据)tuya_iot_wf_gw_reset

重置时 TuyaOS 会处理内部的数据,应用无需关心这块逻辑,如果应用有其自定义的行为,可以通过 tuya_iot_reg_gw_app_cb 接口注册 TY_GW_APP_CBS_S -> gw_reset_cb 重置通知回调,在回调中执行自定义的行为(如清空应用的数据)。

实现示例

/**
 * @brief 设备重置回调
 * @note 您可以根据实际开发需求,在回调中执行自定义的行为
 *
 * @param[in] type 重置类型
 */
VOID __gw_reset_cb(GW_RESET_TYPE_E type)
{
    if (type == GW_LOCAL_UNACTIVE) { // 本地调用普通重置(解除绑定)接口
        // TODO
    } else if (type == GW_LOCAL_RESET_FACTORY) { // 本地调用恢复出厂重置(解绑并清除数据)接口
        // TODO
    } else if (type == GW_REMOTE_UNACTIVE) { // App 执行普通重置(解除绑定)
        // TODO
    } else if (type == GW_REMOTE_RESET_FACTORY) { // App 执行恢复出厂重置(解绑并清除数据)
        // TODO
    } else if (type == GW_RESET_DATA_FACTORY) { // 激活时数据重置
        /**
         * App 执行 `解绑并清除数据` 重置时,或者重新配网的 App 账户与原 App 账户不是同一个家庭账号,则
         * 激活时会收到该类型,设备不能重启
         */
    	// TODO
    }
    
    if (type != GW_RESET_DATA_FACTORY) {
    	tal_system_reset();
    }
}

// 初始化时注册重置回调
int test_init()
{
    TY_GW_APP_CBS_S gw_app_cbs = {
        .gw_reset_cb = __gw_reset_cb,
    };
    
    tuya_iot_reg_gw_app_cb(&gw_app_cbs);
}

// 本地普通重置
void test_local_unactive()
{
    TUYA_CALL_ERR_LOG(tuya_iot_wf_gw_unactive());
}

// 本地恢复出厂重置
void test_local_reset()
{
    TUYA_CALL_ERR_LOG(tuya_iot_wf_gw_reset());
}

数据类型

GW_RESET_TYPE_E

typedef enum {
    GW_LOCAL_RESET_FACTORY = 0,    // 本地恢复出厂重置
    GW_REMOTE_UNACTIVE,            // App 普通重置(解除绑定)
    GW_LOCAL_UNACTIVE,             // 本地普通重置(解除绑定)
    GW_REMOTE_RESET_FACTORY,       // App 恢复出厂重置
    GW_RESET_DATA_FACTORY,         // 激活时数据重置
} GW_RESET_TYPE_E;

回调接口

GW_APP_RESET_CB

/**
 * @brief reset callback function
 * 
 * @param[in] type reset type
 * 
 * @return VOID
 */
typedef VOID (*GW_APP_RESET_CB)(GW_RESET_TYPE_E type);

API 说明

本地普通重置(解除绑定)

/**
 * @brief local inactive
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */
OPERATE_RET tuya_iot_wf_gw_unactive(VOID);

本地恢复出厂重置(解绑并清除数据)

/**
 * @brief local reset factory
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */
OPERATE_RET tuya_iot_wf_gw_reset(VOID);

注册应用回调

/** 
 * @brief register application callback functions
 *
 * @param[in] cbs callback functions, see TY_GW_APP_CBS_S
 * 
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h   
 */
OPERATE_RET tuya_iot_reg_gw_app_cb(CONST TY_GW_APP_CBS_S *cbs);