我有一个ESP8266 NodeMCU板。我已经在其上加载了基于NodeMCU Lua的固件,并且需要准确的时间来保留少量功能。我使用他们的云服务使用以下模块构建了二进制文件:rtctime
,sntp
,cron
等。
如何使用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
此外,我在故障回调中递归调用相同的函数,直到成功同步没有发生。
由于
答案 0 :(得分:2)
似乎很奇怪。
19800(01001101 01011000)的最低有效字节为88(01011000)。
我不熟悉Lua并且它与C绑定,但我查看了源代码,发现setoffset
和getoffset
与variable the_offest
which is defined as uint8_t
一起使用。
因为the docs说,偏移是以秒为单位而一个字节太小,我会说这是一个错误。
正如MarcelStör的评论中所解释的那样,sntp.setoffset
不适用于时区偏移,这意味着不支持大偏移。
您应该使用tz module来处理时区。