diff options
-rw-r--r-- | +wakeup.example.lua | 6 | ||||
-rw-r--r-- | wakeup.lua | 46 |
2 files changed, 45 insertions, 7 deletions
diff --git a/+wakeup.example.lua b/+wakeup.example.lua index e65c8a6..8672fc6 100644 --- a/+wakeup.example.lua +++ b/+wakeup.example.lua @@ -12,7 +12,11 @@ return { addr="255.255.255.255", --- Wake-on-LAN port. port=9, - --- Not yet implemented time description of when to wake up the device. + --- Not yet implemented time description of when to wake up the device. Currently: + --- + --- {hour=23, min=0} + --- + --- Will send wakeup packets each day on 23:00 UTC. when=nil, --- Wi-Fi configuration same as passed to wifi.config(). It won't be used if left as nil. In this case user is --- expected to manually configure and persist AP in the flash. @@ -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 |