NodeMCU基于时区的SNTP同步

时间:2017-05-24 18:51:28

标签: lua esp8266 nodemcu

我有一个ESP8266 NodeMCU板。我已经在其上加载了基于NodeMCU Lua的固件,并且需要准确的时间来保留少量功能。我使用他们的云服务使用以下模块构建了二进制文件:rtctimesntpcron等。

如何使用sntp模块设置本地时间?我当地的时间偏离了UTC的19800(5.5小时IST)。

我无法在sntp.setoffset(offset)调用

中设置此偏移量
> sntp.setoffset(19800)
> sntp.getoffset()
88
>

为什么getoffset打印88

更新:在rtctime.set(seconds_since_unix_epoch)的成功回调中使用sntp.sync()将RTC设置为本地时间正常。

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

此外,我在故障回调中递归调用相同的函数,直到成功同步没有发生。

由于

1 个答案:

答案 0 :(得分:2)

似乎很奇怪。
19800(01001101 01011000)的最低有效字节为88(01011000)。

我不熟悉Lua并且它与C绑定,但我查看了源代码,发现setoffsetgetoffsetvariable the_offest which is defined as uint8_t一起使用。

因为the docs说,偏移是以秒为单位而一个字节太小,我会说这是一个错误。

正如MarcelStör的评论中所解释的那样,sntp.setoffset不适用于时区偏移,这意味着不支持大偏移。
您应该使用tz module来处理时区。