Lua 基于NodeMCU时区的SNTP同步

Lua 基于NodeMCU时区的SNTP同步,lua,esp8266,nodemcu,Lua,Esp8266,Nodemcu,我有一个ESP8266 NodeMCU板。我已经加载了基于NodeMCU-Lua的固件,需要精确的计时来安排一些功能。我使用他们的云服务和以下模块构建了二进制文件:rtctime、sntp、cron 如何使用sntp模块设置本地时间?我的本地时间与UTC的偏移量为19800(IST为5.5小时) 我无法在sntp中设置此偏移量。setoffset(offset)call > sntp.setoffset(19800) > sntp.getoffset() 88 > 为什么ge

我有一个ESP8266 NodeMCU板。我已经加载了基于NodeMCU-Lua的固件,需要精确的计时来安排一些功能。我使用他们的云服务和以下模块构建了二进制文件:
rtctime
sntp
cron

如何使用
sntp
模块设置本地时间?我的本地时间与UTC的偏移量为19800(IST为5.5小时)

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

> 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
我还在失败回调中递归调用同一个函数,直到没有成功同步为止

谢谢

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

我对Lua及其与C的绑定不太熟悉,但我检查了源代码,发现和可以使用

因为偏移量是以秒为单位的,一个字节太小,所以我认为这是一个bug

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

您应该使用来处理时区。

Woah,对19800和88*掌声*@gre_gor之间的相关性进行了聪明的分析,感谢您指出了88个原因。是否您的5.5h的巨大偏移量表明您正在(ab)使用SNTP偏移量来处理时区?如果是,请看一个例子。是的,你是对的。我这样做是为了处理时区。但是我看到您在成功回调中添加了时区偏移量(在链接的答案中),那么这是否意味着RTC将与UTC而不是时区同步?或者我还必须在成功回调中执行
rtctime.set(现在+tz.getoffset(现在))
?我不知道,但我认为应该让SNTP和rtctime单独处理UTC内部事务。时区调整,即UTC到时区的转换,应该在我们在示例中提出的模块之外进行(我在回答中重复了这些模块)。@MarcelStör谢谢。我想每次我使用RTC安排某些事情时,我都必须添加偏移量。我将更新问题并将其标记为重复。