summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2024-01-15 00:33:32 +0100
committerAki <please@ignore.pl>2024-01-15 00:33:32 +0100
commitba663a7dab9c132695da3ff949cbedc516817a13 (patch)
tree75909941afbb927e7b1c70076a2bb2ec9b01bbfc
parent8e04a77a96eccb86f775f7aa2bbc14ad587c313a (diff)
downloadnodemcu-wakeup-ba663a7dab9c132695da3ff949cbedc516817a13.zip
nodemcu-wakeup-ba663a7dab9c132695da3ff949cbedc516817a13.tar.gz
nodemcu-wakeup-ba663a7dab9c132695da3ff949cbedc516817a13.tar.bz2
Implemented naive scheduling
-rw-r--r--+wakeup.example.lua6
-rw-r--r--wakeup.lua46
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.
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