【Zigbee】TuyaOS zigbee低功耗传感电池电量逻辑介绍

Zigbee 子设备开发


Post Reply
kb-cyf
Posts: 3

TuyaOS Zigbee传感低功耗电池电量逻辑说明

概念说明

1.首次采集时间:设备在刚上电、入网时,会有较多任务要处理,耗电较高,此时采集电量会得到偏低值;因此设备会延迟一段时间等待电池回升到稳定值时再进行采集,上报真实的电量值。默认首次采集时间为20min(可配置)。

2.采集等待静默时间:电量采集会选在没有射频收发时进行,如果采集时正处于射频收发,则顺延静默时间再进行采集。注:TuyaOS暂不支持该功能,为预留功能选项,后续增加。

3.最大采集周期:设备会在这个间隔内进行一次电量采集。

逻辑介绍

1.功能启动与停止:电池电量逻辑在入网、在网重上电时启动;在本地离网、远程离网时停止。

2.功能逻辑:

​ 1)启动时,立即上报100%电量,刷新APP面板显示。

​ 2)开启定时器,延迟首次采集时间,采集真实电量值并上报,APP显示真实值。

​ 3)每隔最大采集周期采集一次电量,暂存于RAM中。

​ 4)到达心跳上报时间时,上报RAM中的电量值,并更新到属性。

​ 5)不可充电电池电量不允许回升。

​ 6)当电量在一个心跳上报周期内下降超过20%时,当次心跳只上报下降20%,剩余的等下个周期上报。

​ 7)当实际电量低于20%时,心跳周期时间降低至25%,加快低电量上报。

3.流程图

Image

使用说明

初始化:

Code: Select all

/**
 * @description: oem init
 * @param [in] none
 * @return: none
 */
STATIC VOID_T app_oem_init(VOID_T)
{
	...
	
#if APP_BATTERY_SUPPORT
    TBL_BATTERY_INFO_T bat_info = TBL_BATTERY_INIT_INFO;
    tbl_battery_config_init(&bat_info, NULL, 0);
#endif
}

逻辑启动:

Code: Select all

/**
 * @brief zigbee network network change callback(user can rewrite this API)
 * 
 * @param[in]   status: network status
 * @return VOID_T
 */
VOID_T tal_zg_nwk_status_changed_callback(TAL_ZG_NWK_STATUS_E status)
{
    STATIC BOOL_T power_on_rejoin = TRUE;

    switch (status)
    {
        ...
        
        case TAL_ZG_NWK_JOIN_OK:
        {
            USER_PR_DEBUG("nwk_join_ok---\r\n");

#if APP_BATTERY_SUPPORT
            tbl_battery_start();
#endif
            break;
        }
        case TAL_ZG_NWK_REJOIN_OK:
        {
            USER_PR_DEBUG("nwk_rejoin_ok---\r\n");
            if (power_on_rejoin == FALSE) {
                //Normal rejoin, sleep dev don't need care.
                break;
            }

			...

#if APP_BATTERY_SUPPORT
            tbl_battery_start();
#endif

            power_on_rejoin = FALSE;
            break;
        }
        ...
                case TAL_ZG_NWK_REMOTE_LEAVE:
        {
#if APP_BATTERY_SUPPORT
            tbl_battery_stop();
#endif
            break;
        }
        case TAL_ZG_NWK_LOCAL_LEAVE:
        {
            USER_PR_DEBUG("nwk_local_leave---\r\n");
#if APP_BATTERY_SUPPORT
            tbl_battery_stop();
#endif

            break;
        }
        ...
        
    }
}
Post Reply