功耗管理

更新时间:2023-05-12 08:08:02

功耗管理是 NB-IoT 产品的重要特性,本文将介绍 TuyaOS 中 NB-IoT 设备的功耗管理。

背景信息

NB-IoT 业务规模发展与承载业务模型密切相关,其适用场景是小流量、上报为主、长期休眠、功耗敏感、低移动性应用。NB-IoT 支持三种省电模式:

  • PSM (Power Saving Mode,省电模式)
  • DRX(Discontinuous Reception,不连续接收模式)
  • eDRX(Extended DRX,扩展不连续接收模式)

为了实现 NB-IoT 网络承载海量的低功耗设备,最为重要的技术为 PSM 和 eDRX。

功耗管理

PSM 模式

终端非业务期间深度休眠,不接收下行数据。只有终端主动发送上行数据(MO Data)时,才可接收 涂鸦 IoT 开发平台 缓存的下行数据。

在该状态下,终端射频关闭,相当于关机状态。但是核心网侧还保留用户上下文,用户进入空闲态/连接态时无需再附着 PDN 建立。

适合对下行数据无时延要求的业务。终端设备功耗低,采取电池供电方式,如抄表业务。

功耗管理

  • Active:模块处于活动状态,所有功能正常可用,可以进行数据发送和接收。模块在此模式下可切换到 Idle 模式或 PSM 模式。

  • Idle:模块处于浅睡眠状态,模块处于网络连接状态,可接收寻呼消息。模块在此模式下可切换至 Active 或 PSM 模式。

  • PSM:模块处于深睡眠状态,内部只有 RTC 工作,网络处于非连接状态,不可接收寻呼消息。当定时器超时后,模块将被唤醒,也可通过拉低 PSM_EINT 引脚从唤醒模块。

    长时间无消息收发
    Active timer 超时
    上行数据 Mo Data 或周期性位置更新 Periodic TAU
    Connetcted State
    Idle State
    PSM State

eDRX 模式

终端设备兼顾低功耗和对时延有一定要求的业务。在每个 eDRX 周期内,只有在设置的寻呼时间窗口内,终端可接收下行数据,其余时间终端处于休眠状态,不接收下行数据。该模式可在下行业务时延和功耗之间取得平衡,如远程关闭煤气业务。

功耗管理

每个 eDRX 周期内,有一个寻呼时间窗口 PTW( Paging Time Window ),终端在 PTW 内按照 DRX 周期(DRX 周期时间短,可以认为终端不休眠、一直可达)监听寻呼信道,以便接收下行数据,其余时间终端处于休眠状态。

eDRX 模式可以认为终端设备随时可达,但时延较大,时延取决于 eDRX 周期配置,可以在低功耗与时延之间取得平衡。

DRX 模式

可以认为下行业务随时可达终端设备,在每个 DRX 周期,终端都会检测一次是否有下行业务到达,适用于对时延有高要求的业务。终端设备一般采取供电的方式,如路灯业务。

功耗管理

由于 DRX 周期短( 1.28s,2.56s,5.12s 或者 10.24s,由运营商网络侧设置决定——SIM 卡办理 APN 业务),可认为下行业务随时可达,时延小。

适用于对时延有高要求的业务,但功耗相对较高,终端设备一般采用市电供电方式。

实现示例

// 设置设备工作模式
tuya_user_api_sim_mode_set("PSM");
// 设置 lifetime 时间
tuya_user_api_lifetime_set(600);

API 说明

设置当前设备的工作模式

函数原型 OPERATE_RET tuya_user_api_sim_mode_set (IN char* mode)
参数 mode:待设置的 SIM 卡低功耗模式,具体请参照下文详细说明
功能 设置当前设备的工作模式(PSMDRXEDRX)
头文件 #include <tuya_user_api.h>
返回值
  • OPRT_OK:正常
  • 其它:异常,不可取

参数 mode 取值范围:“psm”,“drx”,“edrx”,或者"PSM",“DRX”,“EDRX”,禁止"Psm"这类大小写混用的情况(此类传入无效)。字符串字面意思即表示设置的功耗模式。

获取当前设备的工作模式(功耗模式)

函数原型 nbiot_mode_t tuya_user_api_sim_mode_get (void)
参数
功能 获取当前设备的工作模式(功耗模式)
头文件 #include <tuya_user_api.h>
返回值 返回此时的设备的工作模式(功耗模式),具体请参照枚举nbiot_mode_t

详细说明

枚举 nbiot_mode_t:

typedef enum {
  NBIoT_MODE_PSM,      //PSM 模式
  NBIoT_MODE_DRX,      //DRX 模式
  NBIoT_MODE_EDRX      //EDRX 模式
} nbiot_mode_t;

禁止当前设备进入睡眠模式

函数原型 void tuya_user_api_psm_disable (void)
参数
功能 禁止当前设备进入睡眠模式
头文件 #include <tuya_user_api.h>
返回值

允许当前设备进入睡眠模式

函数原型 void tuya_user_api_psm_enable (void)
参数
功能 允许当前设备进入睡眠模式
头文件 #include <tuya_user_api.h>
返回值

立刻释放睡眠锁允许当前设备进入睡眠模式

函数原型 void tuya_user_api_enter_psm (void)
参数
功能 立刻释放睡眠锁,允许当前设备进入睡眠模式
头文件 #include <tuya_user_api.h>
返回值

更多详细信息,请参考 NB-IoT 通用方案介绍