From ba663a7dab9c132695da3ff949cbedc516817a13 Mon Sep 17 00:00:00 2001 From: Aki Date: Mon, 15 Jan 2024 00:33:32 +0100 Subject: Implemented naive scheduling --- wakeup.lua | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) (limited to 'wakeup.lua') diff --git a/wakeup.lua b/wakeup.lua index 9239fe1..9b5b6a4 100644 --- a/wakeup.lua +++ b/wakeup.lua @@ -61,18 +61,52 @@ function wakeup:sendout (interval, times, after) end +function wakeup:now () + local time = rtctime.epoch2cal(rtctime.get()) + time.year = nil + time.sec = nil + return time +end + + +local +function compare (time, pattern) + for key, value in pairs(pattern) do + if time[key] ~= value then + return false + end + end + return true +end + + function wakeup:init () gpio.write(4, gpio.HIGH) gpio.mode(4, gpio.OUTPUT) self.data = magic_packet(self.mac) wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function () - gpio.write(4, gpio.LOW) - - self:sendout(500, 5, function () - wifi.setmode(wifi.NULLMODE, false) - gpio.write(4, gpio.HIGH) - end) + sntp.sync( + self.sntp, + function () + if compare(self:now(), self.when) then + gpio.write(4, gpio.LOW) + self:sendout(500, 5, function () + wifi.setmode(wifi.NULLMODE, false) + gpio.write(4, gpio.HIGH) + end) + else + print("Not yet time") + wifi.setmode(wifi.NULLMODE, false) + tmr.create():alarm(25000, tmr.ALARM_SINGLE, function () + self:run() + end) + end + end, + function (code, err) + print("SNTP sync failed", code, err) + node.restart() + end) end) end -- cgit v1.1