设备重置

更新时间:2024-09-13 07:26:03下载pdf

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

背景信息

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

  • 普通重置(解除绑定):仅解除设备与云端的绑定关系,云端和设备本地都保留数据。设备重新激活后,与绑定前的数据是一致的。

  • 恢复出厂重置(解绑并清除数据):除了解除设备与云端的绑定关系,还清空云端和设备本地的数据(您需要手动把本地的 DB 文件删除),相当于全新的设备。

实现方法

  • App 重置时,无需调用接口。
  • 本地重置时,您需要主动调用重置接口:
    • 普通重置(解除绑定):tuya_iot_wf_gw_unactive
    • 恢复出厂重置(解绑并清除数据):tuya_iot_wf_gw_reset

ty_sdk_app_reset_cb 回调函数是注册在 TuyaOS SDK 里面,进行重置类型的接收。只要完成了回调函数的注册,不管是哪种重置方式,TuyaOS SDK 都会触发上述回调函数。您可以在该回调函数中执行自定义的行为,例如清空应用的数据、删除 tuya_user.dbtuya_user.db_bak 文件等。

实现示例


#include <string.h>
#include <stdio.h>
#include "tuya_iot_wifi_api.h"

/**
 * @brief  SDK 适配层移除回调
 * @param  [GW_RESET_TYPE_E] type -> 重置的原因
 * @return [*]
 */
VOID ty_sdk_app_reset_cb(GW_RESET_TYPE_E type)
{
    printf(" gw reset success. please restart the %d\n", type);
    switch (type) {
        case GW_LOCAL_RESET_FACTORY:     //本地恢复出厂设置
             //删除 DB 文件,清除必要数据
            //注意:最后设备要重启,才能重新进入配网模式
            break;
        case GW_REMOTE_RESET_FACTORY:   //App 下发移除设备并清除数据
            //删除 DB 文件,清除必要数据
            //注意:最后设备要重启,才能重新进入配网模式
            break;
        case GW_LOCAL_UNACTIVE:   //本地重置
            //您自行在业务上实现逻辑,例如灯效,声音等
           //注意:最后设备要重启,才能重新进入配网模式
            break;
        case GW_REMOTE_UNACTIVE: //App 重置
            //您自行在业务上实现逻辑,例如灯效,声音等
           //注意:最后设备要重启,才能重新进入配网模式
            break;
        case GW_RESET_DATA_FACTORY:// 激活时数据重置
        /**
         * App 执行解绑并清除数据重置时,或者重新配网的 App 账户与原 App 账户不是同一个家庭账号,则
         * 激活时会收到该类型,设备不能重启
         * 您可以实现一些业务上的逻辑
         */
        break;

        default:
            break;
    }
    return;
    /***您根据收到的重置类型,通过事件的形式发送出去,在业务上建立独立任务处理。不要在回调里做复杂事情****/
}

   /**
* @brief main 初始化
* @param [*]
* @return [*]
*/
OPERATE_RET main(void)
{
    TY_IOT_CBS_S iot_cbs = {0};
    iot_cbs.gw_reset_cb     = ty_sdk_app_reset_cb;           //App 移除配网回调 注册给 TuyaOS SDK
    /****具体实现请参考 Demo*****/
   /****具体实现请参考 Demo*****/
   return 0;
}

// 本地普通重置
OPERATE_RET test_local_unactive(void)
{
    OPERATE_RET rt = OPRT_OK;
    TUYA_CALL_ERR_LOG(tuya_iot_wf_gw_unactive()); //可以使用按键组合的方式,将设备移除,该接口不会清除云端信息
    return rt; //再次配网后,设备 ID 不变,清扫记录、楼层地图依然存在
}

// 本地恢复出厂重置
OPERATE_RET test_local_reset(void)
{
    OPERATE_RET rt = OPRT_OK;
   TUYA_CALL_ERR_LOG(tuya_iot_wf_gw_reset()); //可以使用按键组合的方式,将设备恢复初始状态,该接口会清除云端保存的该设备信息
    return rt; //例如,清扫记录、楼层地图、设备 ID 等。注意本地也要清除相关信息
}

数据类型

GW_RESET_TYPE_E

/* tuya sdk gateway reset type */
typedef enum {
    GW_LOCAL_RESET_FACTORY = 0,
    GW_REMOTE_UNACTIVE,
    GW_LOCAL_UNACTIVE,
    GW_REMOTE_RESET_FACTORY,
    GW_RESET_DATA_FACTORY, //need clear local data when active
} GW_RESET_TYPE_E;

API 说明

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

/**
 * @brief tuya_iot_wf_gw_unactive
 *
 * @return OPERATE_RET
 */
OPERATE_RET tuya_iot_wf_gw_unactive(VOID);

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

/**
 * @brief tuya_iot_wf_gw_reset
 *
 * @return OPERATE_RET
 */
OPERATE_RET tuya_iot_wf_gw_reset(VOID);

常见问题

如何改变设备 ID?

可以通过以下两种方式处理后,再重新配网,就会变成全新的设备 ID。

  • 手机 App 下发 解绑并清除数据,设备收到指令后,还需要删除 tuya_user.dbtuya_user.db_bak 文件。
  • 本地恢复出厂重置,同时需要本地删除 tuya_user.dbtuya_user.db_bak 文件。