То, что я видел и в настоящее время реализовал в своих сценариях Lua, работающих на моем WiFi-модуле ESP8266, опрашивает страницу сервера каждые несколько секунд, а затем проверяет, изменилось ли значение или нет. Если значение изменилось, предпримите какие-либо действия.
Вот мой код
tmr.alarm(1,10000, 1, function()
if (wifi.sta.getip() == nil) then
print("IP unavaiable, Waiting...")
else
tmr.stop(1)
tmr.alarm(1,10000, 1, function()
event_driven_func()
end)
end
end)
function event_driven_func()
print("Inside event_driven_func function"..node.heap());
conn = nil
conn=net.createConnection(net.TCP,0)
conn:on("receive", function(conn, payload)
-- local buf = "";
startRead = false
Data = ""
print("payload : "..payload)
for i = 1, #payload do
c = payload:sub(i,i)
if (c=="{") then
startRead=true
end
if (startRead) then
Data=Data..c
end
if (c=="}") then
startRead=false
print("json string detected Do something now ...");
end
end
conn:close()
collectgarbage("collect");
end)
conn:connect(80,"my_server.co.in")
conn:on("connection", function(conn, payload)
conn:send("GET /xyz.php HTTP/1.0\r\nHost: my_server.co.in\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n")
end)
end
Но это крайне неэффективно.
Как реализовать или улучшить псевдокод, код, управляемый событиями, где всякий раз, когда значение изменяется, происходит прерывание кода, а затем выполняется event_driven_func?
Или любой более эффективный способ.
Пример приложения:
Скажем, у меня есть количество подписчиков YouTube, отображаемых на странице сервера, всякий раз, когда подписчики меняются, он должен делать веб-запрос «POST» на одну из моих страниц json xyz.php (это будет сделано с использованием IFTTT), а затем событие будет выполняться функцию в коде Lua, чтобы это значение было отражено.
event_driven_func()
, кромеconn:connect(80,"my_server.co.in")
(и распечатки), должно быть выполнено только один раз, нет необходимости делать это каждый раз. - person Marcel Stör   schedule 01.06.2017connect
так часто, как хотите. - person Marcel Stör   schedule 06.06.2017