NodeMCU 基于时区的 SNTP 同步

我有一个 ESP8266 NodeMCU 开发板。我已经加载了 NodeMCU 基于 Lua 的固件,并需要准确的时间来安排几个功能。我使用他们的云服务构建了二进制文件,并加载了以下模块:rtctimesntpcron 等。

如何使用 sntp 模块设置本地时间?我的本地时间与 UTC 相差 19800(印度标准时间 5.5 小时)。

我无法在 sntp.setoffset(offset) 调用中设置此偏移量。

> sntp.setoffset(19800)
> sntp.getoffset()
88
>

为什么 getoffset 打印了 88

更新:在 sntp.sync() 的成功回调中使用 rtctime.set(自 Unix 纪元以来的秒数) 将 RTC 设置为本地时间有效。

function sntp_sync_time()
  sntp.sync(nil, function(sec, usec, server, info) rtctime.set(sec + 19800) end, sntp_sync_time, 1)
end

同样,我在失败回调中递归调用相同的函数,直到成功同步为止。

谢谢

点赞
用户794749
用户794749

似乎很奇怪。

19800(01001101 01011000)的最不重要字节为88(01011000)。

我不太熟悉Lua及其与C的绑定,但我查看了源代码,并发现setoffsetgetoffset使用的变量the_offset被定义为uint8_t(请参阅此处)。

因为文档说,偏移是以秒为单位的,而一个字节太小了,所以我认为这是个 bug。

正如Marcel Stör在评论中所解释的那样,sntp.setoffset不是用于时区偏移的,这意味着不支持大的偏移。

您应该使用tz模块来处理时区。

2017-05-25 16:52:18