失败时调用的成功回调函数。可能的错误?
Success callback function called on failure. Possible bug?
我正在做一个小项目,使用带有 NodeMCU 和 Lua 的 ESP8266。我怀疑我发现了一个错误,但由于我是 Lua(以及其他两个!)的新手,我希望得到一些帮助来确认我是否正确,或者我是否已经错过了一些东西(更有可能!)。
NodeMCU 固件包含一个内置的 SNTP 客户端模块,可将同步时间更新为系统时钟(rtctime 模块)。成功回调函数似乎在 NTP 同步失败时(或可能之前)被调用。例如,如果未连接 wifi,或者有时在启动后的第一次同步尝试(已连接 wifi)时,就会发生这种情况。根据 doco,如果当前时间不可用,rtctime.get() returns 为零;这是我得到的结果,进一步表明 NTP 同步没有成功。我无法弄清楚为什么此时调用成功函数,先于失败函数,或者代替失败函数(如我所料)。
我所指的 sntp 模块在这里 - 不幸的是,C 源代码有点让我头疼:https://nodemcu.readthedocs.io/en/master/en/modules/sntp/
我的(最小)代码:
-- Define callback function for ntp sync success
function ntpSyncSuccess (sec, usec, server, info)
print('SNTP time sync successful!')
print("rtctime.get() returns: ", rtctime.get())
end
-- Configure and start NTP time sync with auto repeat enabled
sntp.sync("0.au.pool.ntp.org",
ntpSyncSuccess(sec, usec, server, info), --success callback
function() -- error callback
print('SNTP time sync failed!')
end,
1 -- enable autorepeat (SNTP sync every 1000 seconds (~17 min))
)
启动设备时的串行输出结果和运行代码(注意最后第二行和第三行):
NodeMCU custom build by frightanic.com
branch: master
commit: 11592951b90707cdcb6d751876170bf4da82850d
SSL: false
modules: cron,file,gpio,i2c,net,node,rotary,rtctime,sntp,struct,tmr,uart,wifi
build created on 2019-01-16 03:11
powered by Lua 5.1.4 on SDK 2.2.1(6ab97e9)
lua: cannot open init.lua
> print(uart.setup(0, 115200, 8, 0, 1, 1 ))
115200
> dofile("ntpTest.lua")
SNTP time sync successful!
rtctime.get() returns: 0 0 0
> SNTP time sync failed!
这样我们就可以 "close" 这个问题(一旦你接受了答案)。它必须是函数引用而不是函数调用。
sntp.sync("0.au.pool.ntp.org",
ntpSyncSuccess, -- no (), no parameters
function() -- error callback
我正在做一个小项目,使用带有 NodeMCU 和 Lua 的 ESP8266。我怀疑我发现了一个错误,但由于我是 Lua(以及其他两个!)的新手,我希望得到一些帮助来确认我是否正确,或者我是否已经错过了一些东西(更有可能!)。
NodeMCU 固件包含一个内置的 SNTP 客户端模块,可将同步时间更新为系统时钟(rtctime 模块)。成功回调函数似乎在 NTP 同步失败时(或可能之前)被调用。例如,如果未连接 wifi,或者有时在启动后的第一次同步尝试(已连接 wifi)时,就会发生这种情况。根据 doco,如果当前时间不可用,rtctime.get() returns 为零;这是我得到的结果,进一步表明 NTP 同步没有成功。我无法弄清楚为什么此时调用成功函数,先于失败函数,或者代替失败函数(如我所料)。
我所指的 sntp 模块在这里 - 不幸的是,C 源代码有点让我头疼:https://nodemcu.readthedocs.io/en/master/en/modules/sntp/
我的(最小)代码:
-- Define callback function for ntp sync success
function ntpSyncSuccess (sec, usec, server, info)
print('SNTP time sync successful!')
print("rtctime.get() returns: ", rtctime.get())
end
-- Configure and start NTP time sync with auto repeat enabled
sntp.sync("0.au.pool.ntp.org",
ntpSyncSuccess(sec, usec, server, info), --success callback
function() -- error callback
print('SNTP time sync failed!')
end,
1 -- enable autorepeat (SNTP sync every 1000 seconds (~17 min))
)
启动设备时的串行输出结果和运行代码(注意最后第二行和第三行):
NodeMCU custom build by frightanic.com
branch: master
commit: 11592951b90707cdcb6d751876170bf4da82850d
SSL: false
modules: cron,file,gpio,i2c,net,node,rotary,rtctime,sntp,struct,tmr,uart,wifi
build created on 2019-01-16 03:11
powered by Lua 5.1.4 on SDK 2.2.1(6ab97e9)
lua: cannot open init.lua
> print(uart.setup(0, 115200, 8, 0, 1, 1 ))
115200
> dofile("ntpTest.lua")
SNTP time sync successful!
rtctime.get() returns: 0 0 0
> SNTP time sync failed!
这样我们就可以 "close" 这个问题(一旦你接受了答案)。它必须是函数引用而不是函数调用。
sntp.sync("0.au.pool.ntp.org",
ntpSyncSuccess, -- no (), no parameters
function() -- error callback