Функция обратного вызова при успешном вызове. Возможная ошибка? - PullRequest
0 голосов
/ 22 января 2019

Я работаю над небольшим проектом, использующим ESP8266 с NodeMCU и Lua. Я подозреваю, что нашел ошибку, но так как я новичок в Lua (и двух других тоже!), Я надеюсь на некоторую помощь в подтверждении, прав ли я, или я что-то пропустил (больше скорее всего!).

Микропрограмма NodeMCU содержит встроенный клиентский модуль SNTP, который обновляет синхронизированное время на системные часы (модуль rtctime). Кажется, что функция обратного вызова успеха вызывается, когда (или, возможно, раньше) происходит сбой синхронизации NTP. Это происходит, например, если Wi-Fi не подключен, или иногда при первой попытке синхронизации после загрузки (с подключенным Wi-Fi). Согласно документу, rtctime.get () возвращает ноль, если текущее время недоступно; это результат, который я получаю, еще раз показывая, что синхронизация 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))
)

Результат последовательного вывода при загрузке устройства и выполнении кода (обратите внимание на 2-ю и 3-ю последние строки):

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!

1 Ответ

0 голосов
/ 23 января 2019

Только для того, чтобы мы могли «закрыть» этот вопрос здесь (как только вы примете ответ).Это должна быть ссылка на функцию, а не вызов функции.

sntp.sync("0.au.pool.ntp.org",
    ntpSyncSuccess,     -- no (), no parameters
    function()          -- error callback
...