Пишу скрипт для перезагрузки роутера. Но столкнулся с проблемой, скрипт выполняет проверку соединения 85 раз потом вызывает исключение:
Собственно скрипт:
Код:
PANIC: unprotected error in call to Lua API (stdin:13: out of memory)
Код:
watchdog = tmr.create()
checks_counter = 5 -- число неудачных проверок до перезагрузки роутера
result = 0 -- для результатов dns запросов
test_passed = 0 -- для подсчета выполненных dns запросов
function connected(a)
print("connected to WiFi")
print("SSID", a.SSID)
print("BSSID", a.BSSID)
print("channel", a.channel)
end
function got_ip_cb(a)
print("ip recived")
print("IP", a.IP)
print("network", a.netmask)
print("gateway", a.gateway)
end
function reboot_router()
print ("REBOOT!!!")
checks_counter = 5
watchdog:interval(120000)
watchdog:start()
end
wdfunction2 = coroutine.create(function()
while 1 do
print ("RESULT ",result)
if (result ~= 0) then
print("connection OK")
checks_counter = 5
else
print("connection lost")
checks_counter = checks_counter - 1
print(checks_counter)
end
if (checks_counter==0) then reboot_router() end
watchdog:start()
coroutine.yield()
end
end)
wdfunction = function ()
watchdog:stop()
watchdog:interval(10000)
print("Check connection") -- Вылетает где-то после этой строки
result = 0
test_passed = 0
net.dns.resolve("www.google.com", function(sk, ip)
if (ip ~= nil) then result = result + 1
end
test_passed = test_passed + 1
if (test_passed==3) then coroutine.resume(wdfunction2) end
end)
net.dns.resolve("www.yandex.ru", function(sk, ip)
if (ip ~= nil) then result = result + 1
end
test_passed = test_passed + 1
if (test_passed==3) then coroutine.resume(wdfunction2) end
end)
net.dns.resolve("www.amazon.com", function(sk, ip)
if (ip ~= nil) then result = result + 1
end
test_passed = test_passed + 1
if (test_passed==3) then coroutine.resume(wdfunction2) end
end)
end
wifi.setmode(wifi.STATION)
cfg={}
cfg.ssid="MyWiFi"
cfg.pwd="secret"
cfg.auth=wifi.WPA2_PSK
cfg.connect_cb=connected
cfg.got_ip_cb=got_ip_cb
cfg.auto=true
wifi.sta.config(cfg)
watchdog:register(10000, tmr.ALARM_AUTO, function() wdfunction() end)
watchdog:start()