【技术干货】夏令时-概念、实现与问题分析

Wi-Fi 设备、Wi-Fi 低功耗设备、Wi-Fi BLE 双模设备、Ethernet设备、Ethernet+Wi-Fi设备等
Post Reply
愚者千虑必有一得
Posts: 499

什么是夏令时
夏令时,表示为了节约能源,人为规定时间的意思。也叫夏时制,夏令时(Daylight Saving Time:DST),又称“日光节约时制”和“夏令时间”,在这一制度实行期间所采用的统一时间称为“夏令时间”。一般在天亮早的夏季人为将时间调快一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。各个采纳夏时制的国家具体规定不同。全世界有近110个国家每年要实行夏令时。

涂鸦夏令时服务
涂鸦的设备在全球各地被使用,支持各种与时间相关的服务,比如本地定时之类的。为了让用户有更好的使用体验,需要跟随当地的时间政策,自动的切换夏令时。

当前的设备的实现中,主要的逻辑是这样的:

企业微信截图_16655616823504.png
  • 设备激活的时候会获得时区和夏令时配置

企业微信截图_16655686967838.png
  • 每次上下电、每24小时获取一次时区、夏令时配置,确保在夏令时配置有更新的时候,能够获取到,最多有一天的误差。

  • 使用UTC时间戳(每次设备和云端交互,会同步UTC时间戳)+/- 时区 + 夏令时得到本地时间,用于设备本地的定时任务、时间显示、日志记录等服务使用,设备和云端交互使用UTC时间戳。

开发的时候如何避免夏令时的问题
UTC时间是不变的,夏令时影响的是本地时间,我们在使用时间服务的时候,只要明确好功能是本地服务,使用正确的接口,即可避免夏令时打来的困扰。

  • 获取UTC时间:

Code: Select all

/**
 * @brief get UTC time in posix time format
 * 
 * @param[out] tm the UTC time in posix time format
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h   
*/ OPERATE_RET tal_time_get(OUT POSIX_TM_S *tm);
  • 获取本地时间:

Code: Select all

/**
 * @brief get local time (local, contains the time zone and summer time zone)
 * 
 * @param[in] in_time the time need translate
 * @param[out] tm the local time in posix format
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 *
 * @note if in_time is 0, return the local time, otherwise, translate the in_time to
 * local time
 */
OPERATE_RET tal_time_get_local_time_custom(IN TIME_T in_time, OUT POSIX_TM_S *tm);

FAQ

  1. Q: 如何判断设备是否有夏令时问题

A: 判断设备是否存在夏令时问题有三种方法

  • 如果是调试阶段,直接查看设备输出的日志,看看日志打印的时间和本地时间是否一致。如果时间一致的,说明没有问题。

  • 给设备配置一个定时任务,看看设备的定时任务有没有正确的执行,定时任务依赖本地时间,如果执行的时间和配置的时间是一致的,说明夏令时没有问题。

  • 查看设备上报的信号量,设备信号量每隔1个小时上报一次,可以在IoT平台的“设备日志”页面,选择“设备信号量”

企业微信截图_20d8f419-fe19-4849-8ffd-4f98588046ae.png
41b16e5e-93c6-486a-ab97-c2a5f47dd5ef.png
企业微信截图_16655433071489(1).png
  • Q: 如何修复设备夏令时问题

A:涂鸦夏令时服务是比较完善的,但也不排除一些设备真的有各种奇怪的问题导致了夏令时无法工作,如果发现的确存在夏令时问题,可以通过设备重置,然后重新配网来解决。因为重新配网激活会从云端获取时区、夏令时服务配置。如果是一些功能没有正常使用接口导致的,那么就需要重新更新固件,通过固件OTA的方式来进行问题修复了。


Tags:
Post Reply