设备重置

更新时间:2025-02-05 03:20:15下载pdf

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

重置类型

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

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

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

实现方法

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

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

实现示例


#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()); //可以使用按键组合的方式,将设备移除,该接口不会清除云端信息,再次配网后,设备 ID 不变,清扫记录、楼层地图依然存在
    return rt; 
}

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

数据类型

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 下发 解绑并清除数据,解绑成功后,重新配网,会分配新的设备 ID。
  • 本地恢复出厂重置,重新配网,会分配新的设备 ID。

配网账号切换的时候,如何实现 App 端的清扫记录与总清扫时间、总清扫面积、总清扫次数对齐?

如果配网有切换账号的行为,TuyaOS SDK 会通过 iot_cbs.gw_reset_cb 回调通知业务 GW_RESET_DATA_FACTORY 状态。开发者拿到该状态后,删除本地的总清扫时间、总清扫面积、总清扫次数的 DP 值,并将这些 DP 上报云端与 App 端同步即可。