--[[ @object-name: timer @object-desc: This is the API related to timer Internet access. --]] local uci = require "uci" local fs = require "oui.fs" local ERR_TIMER_PARAM_MISSING = -1 local M = {} --[[ @method-name: set_led @method-desc: Set led config. @in bool enable led定时器状态,true:开启 false:关闭. @in string turnon_hour led定时器设定的led开启时间(时) @in string turnon_min led定时器设定的led开启时间(分) @in string turnoff_hour led定时器设定的led关闭时间(时) @in string turnoff_min led定时器设定的led关闭时间(分) @in array week 一个星期中那些天进行重启操作 @out number ?err_code Error code,-1;parameter error. @out string ?err_msg Error message @in-example: {\"jsonrpc\":\"2.0\",\"method\":\"call\",\"params\":[\"\",\"timer\",\"set_led\",{\"enable\":true,\"turnon_hour\":\"07\",\"turnon_min\":\"00\",\"turnoff_hour\":\"22\",\"turnoff_min\":\"00\"}],\"id\":1} @out-example: {\"jsonrpc\": \"2.0\", \"id\": 1, \"result\": {}} --]] M.set_led = function(params) local enable = params.enable local turnon_hour = params.turnon_hour local turnon_min = params.turnon_min local turnoff_hour = params.turnoff_hour local turnoff_min = params.turnoff_min local week = params.week if enable then if not turnon_hour or turnon_hour == "" or not turnon_min or turnon_min == "" or not turnoff_hour or turnoff_hour == "" or not turnoff_min or turnoff_min == "" or not week then return { err_code = ERR_TIMER_PARAM_MISSING, err_msg = "parameter missing" } end end local c = uci.cursor() if enable then c:set("gl_timer", "led", "enable", "1") c:set("gl_timer", "led", "turnon_hour", turnon_hour) c:set("gl_timer", "led", "turnon_min", turnon_min) c:set("gl_timer", "led", "turnoff_hour", turnoff_hour) c:set("gl_timer", "led", "turnoff_min", turnoff_min) local tmp = "" for k,v in ipairs(week) do if k == 1 then tmp = v else tmp = tmp .. " " .. v end end c:set("gl_timer", "led", "week", tmp) else c:set("gl_timer", "led", "enable", "0") end c:commit("gl_timer") fs.sync() ngx.pipe.spawn({"/etc/init.d/gl_timer", "restart"}) end --[[ @method-name: get_led @method-desc: Get config of LED. @out bool enable led定时器状态,true:开启 false:关闭. @out string turnon_hour led定时器设定的led开启时间(时) @out string turnon_min led定时器设定的led开启时间(分) @out string turnoff_hour led定时器设定的led关闭时间(时) @out string turnoff_min led定时器设定的led关闭时间(分) @out array week 一个星期中那些天进行重启操作 @in-example: {\"jsonrpc\":\"2.0\",\"method\":\"call\",\"params\":[\"\",\"timer\",\"get_led\",{}],\"id\":1} @out-example: {"id":1,"jsonrpc":"2.0","result":{"turnon_hour":"07","turnoff_min":"00","turnon_min":"00","enable":true,"turnoff_hour":"22"}} --]] M.get_led = function() local c = uci.cursor() local res = {} if c:get("gl_timer", "led", "enable") == "1" then res.enable = true else res.enable = false end res.turnon_hour = c:get("gl_timer", "led", "turnon_hour") or "00" res.turnon_min = c:get("gl_timer", "led", "turnon_min") or "00" res.turnoff_hour = c:get("gl_timer", "led", "turnoff_hour") or "00" res.turnoff_min = c:get("gl_timer", "led", "turnoff_min") or "00" local week = {} local tmp = c:get("gl_timer", "led", "week") or "0 1 2 3 4 5 6" for day in tmp:gmatch("%d+") do week[#week + 1] = tonumber(day) end res.week = week return res end --[[ @method-name: set_reboot @method-desc: Set reboot config. @in bool enable 定时重启状态,true:开启 false:关闭. @in string hour 重启时间(时) @in string min 重启时间(分) @in array week 一个星期中那些天进行重启操作 @out number ?err_code Error code,-1;parameter error. @out string ?err_msg Error message @in-example: {\"jsonrpc\":\"2.0\",\"method\":\"call\",\"params\":[\"\",\"timer\",\"set_reboot\",{\"enable\":true,\"hour\":\"03\",\"min\":\"00\",\"week\":[0,1,2,3,4,5,6]}],\"id\":1} @out-example: {\"jsonrpc\": \"2.0\", \"id\": 1, \"result\": {}} --]] M.set_reboot = function(params) local hour = params.hour local min = params.min local week = params.week local enable = params.enable if enable then if not hour or hour == "" or not min or min == "" or not week then return { err_code = ERR_TIMER_PARAM_MISSING, err_msg = "parameter missing" } end end local c = uci.cursor() if enable then c:set("gl_timer", "reboot", "enable", "1") c:set("gl_timer", "reboot", "hour", hour) c:set("gl_timer", "reboot", "min", min) local tmp = "" for k,v in ipairs(week) do if k == 1 then tmp = v else tmp = tmp .. " " .. v end end c:set("gl_timer", "reboot", "week", tmp) else c:set("gl_timer", "reboot", "enable", "0") end c:commit("gl_timer") fs.sync() ngx.pipe.spawn({"/etc/init.d/gl_timer", "restart"}) end --[[ @method-name: get_reboot @method-desc: Get config of reboot. @out bool enable 定时重启状态,true:开启 false:关闭. @out string hour 重启时间(时) @out string min 重启时间(分) @out array week 一个星期中那些天进行重启操作 @in-example: {\"jsonrpc\":\"2.0\",\"method\":\"call\",\"params\":[\"\",\"timer\",\"get_reboot\",{}],\"id\":1} @out-example: {"id":1,"jsonrpc":"2.0","result":{"enable":false,"week":[0,1,2,3,4,5,6],"hour":"07","min":"00"}} --]] M.get_reboot = function() local c = uci.cursor() local res = {} if c:get("gl_timer", "reboot", "enable") == "1" then res.enable = true else res.enable = false end res.hour = c:get("gl_timer", "reboot", "hour") or "00" res.min = c:get("gl_timer", "reboot", "min") or "00" local week = {} local tmp = c:get("gl_timer", "reboot", "week") or "0 1 2 3 4 5 6" for day in tmp:gmatch("%d+") do week[#week + 1] = tonumber(day) end res.week = week return res end local function get_timer_name_by_wifi(wifi) local c = uci.cursor() local name = nil c:foreach("gl_timer", "timer", function(s) if wifi.func == s.func and wifi.band == s.band and tonumber(wifi.guest) == tonumber(s.guest) then name = s[".name"] end end) return name end --[[ @method-name: set_wifi @method-desc: Set wifi config. @in array wifi 对象数组,wifi定时器的数据 @in bool wifi.enable wifi定时器状态,true:开启 false:关闭 @in string wifi.band wifi频段,2G or 5G. @in number wifi.guest 访客wifi, 1:表示为访客wifi,0:表示为主wifi @in string wifi.func wifi定时器功能,turn_onoff表示定时器控制wifi开启/关闭,power_switch表示定时器控制wifi功率切换/恢复 @in string wifi.turnon_hour wifi定时器设定的wifi开启时间(时),wifi定时器功能为turn_onoff时需要该参数 @in string wifi.turnon_min wifi定时器设定的wifi开启时间(分),wifi定时器功能为turn_onoff时需要该参数 @in string wifi.turnoff_hour wifi定时器设定的wifi关闭时间(时),wifi定时器功能为turn_onoff时需要该参数 @in string wifi.turnoff_min wifi定时器设定的wifi关闭时间(分),wifi定时器功能为turn_onoff时需要该参数 @in string wifi.switch_hour wifi定时器设定的切换功率时间(时),wifi定时器功能为power_switch时需要该参数 @in string wifi.switch_min wifi定时器设定的切换功率时间(分),wifi定时器功能为power_switch时需要该参数 @in string wifi.restore_hour wifi定时器设定的恢复功率时间(时),wifi定时器功能为power_switch时需要该参数 @in string wifi.restore_min wifi定时器设定的恢复功率时间(分),wifi定时器功能为power_switch时需要该参数 @in string wifi.switch_power wifi定时器设定的切换目标功率,可选Max High Medium Low,wifi定时器功能为power_switch时需要该参数 @in string wifi.restore_power wifi定时器设定的恢复目标功率,可选Max High Medium Low,wifi定时器功能为power_switch时需要该参数 @in array wifi.week wifi定时器执行日期(星期日~星期六) @out string ?err_msg Error message @out number ?err_code Error code,-1;parameter error. @in-example: {"jsonrpc":"2.0","method":"call","params":["","timer","set_wifi",{"wifi":[{"band":"5G","turnoff_min":"11","enable":false,"func":"turn_onoff","turnoff_hour":"11","guest":"0","week":[0,1],"turnon_min":"11","turnon_hour":"11"},{"band":"5G","turnoff_min":"11","enable":false,"func":"turn_onoff","turnoff_hour":"11","guest":"1","week":[0,1],"turnon_min":"11","turnon_hour":"11"}]}],"id":1} @out-example: {\"jsonrpc\": \"2.0\", \"id\": 1, \"result\": {}} --]] M.set_wifi = function(params) local wifi = params.wifi local c = uci.cursor() for i = 1, #wifi do local name = get_timer_name_by_wifi(wifi[i]) if name then for k,v in pairs(wifi[i]) do if k == "week" then local week = "" for wk,wv in pairs(v) do if wk == 1 then week = wv else week = week .. " " .. wv end end c:set("gl_timer", name, "week", week) else if k == "func" then c:set("gl_timer", "global", wifi[i].band .. "_func", tostring(v)) end if k == "enable" then if tostring(v) == "true" then c:set("gl_timer", name, k, "1") else c:set("gl_timer", name, k, "0") end else c:set("gl_timer", name, k, tostring(v)) end end end else return { err_code = ERR_TIMER_PARAM_MISSING, err_msg = "parameter err" } end end c:commit("gl_timer") fs.sync() ngx.pipe.spawn({"/etc/init.d/gl_timer", "restart"}) end --[[ @method-name: get_wifi @method-desc: Get config of wifi. @out string wifi_func_2g 当前2.4g wifi定时器功能,turn_onoff 表示控制wifi定制开关,power_switch 表示控制wifi发射功率切换 @out string wifi_func_5g 当前5g wifi定时器功能,turn_onoff 表示控制wifi定制开关,power_switch 表示控制wifi发射功率切换 @out array wifi 对象数组,wifi定时器的数据 @out bool wifi.enable wifi定时器状态,true:开启 false:关闭 @out string wifi.band wifi频段,2G or 5G. @out number wifi.guest 访客wifi, 1:表示为访客wifi,0:表示为主wifi @out string wifi.turnon_hour wifi定时器设定的wifi开启时间(时) @out string wifi.turnon_min wifi定时器设定的wifi开启时间(分) @out string wifi.turnoff_hour wifi定时器设定的wifi关闭时间(时) @out string wifi.turnoff_min wifi定时器设定的wifi关闭时间(分) @out string wifi.switch_hour wifi定时器设定的切换功率时间(时) @out string wifi.switch_min wifi定时器设定的切换功率时间(分) @out string wifi.restore_hour wifi定时器设定的恢复功率时间(时) @out string wifi.restore_min wifi定时器设定的恢复功率时间(分) @out string wifi.switch_power wifi定时器设定的切换目标功率,可选Max High Medium Low @out string wifi.restore_power wifi定时器设定的恢复目标功率,可选Max High Medium Low @in-example: {\"jsonrpc\":\"2.0\",\"method\":\"call\",\"params\":[\"\",\"timer\",\"get_wifi\",{}],\"id\":1} @out-example: {"id":null,"jsonrpc":"2.0","result":{"wifi":[{"band":"5G","turnoff_min":"11","enable":1,"func":"turn_onoff","turnoff_hour":"11","guest":0,"week":[0,1],"turnon_min":"11","turnon_hour":"11"},{"band":"2G","turnoff_min":"00","enable":1,"func":"turn_onoff","turnoff_hour":"22","guest":0,"week":[0,1,2,3,4,5,6],"turnon_min":"00","turnon_hour":"07"},{"band":"5G","turnoff_min":"11","enable":1,"func":"turn_onoff","turnoff_hour":"11","guest":1,"week":[0,1],"turnon_min":"11","turnon_hour":"11"},{"band":"2G","turnoff_min":"00","enable":1,"func":"turn_onoff","turnoff_hour":"22","guest":1,"week":[0,1,2,3,4,5,6],"turnon_min":"00","turnon_hour":"07"},{"band":"5G","switch_hour":"22","restore_min":"00","enable":1,"func":"power_switch","guest":0,"week":[0,1,2,3,4,5,6],"restore_power":"Max","restore_hour":"07","switch_power":"Low","switch_min":"00"},{"band":"2G","switch_hour":"22","restore_min":"00","enable":1,"func":"power_switch","guest":0,"week":[0,1,2,3,4,5,6],"restore_power":"Max","restore_hour":"07","switch_power":"Low","switch_min":"00"}],"wifi_func_5g":"turn_onoff","wifi_func_2g":"turn_onoff"}} --]] M.get_wifi = function() local c = uci.cursor() local wifi = {} c:foreach("gl_timer", "timer", function(s) local name = s[".name"] if string.find(name, "wifi") then local week = {} local tmp = s.week or "0 1 2 3 4 5 6" for day in tmp:gmatch("%d+") do week[#week + 1] = tonumber(day) end local func = s.func if func == "turn_onoff" then wifi[#wifi +1] = { enable = tonumber(s.enable) == 1 and true or false, func = s.func, band = s.band, guest = tonumber(s.guest), turnon_hour = s.turnon_hour, turnon_min = s.turnon_min, turnoff_hour = s.turnoff_hour, turnoff_min = s.turnoff_min, week = week } end if func == "power_switch" then wifi[#wifi +1] = { enable = tonumber(s.enable) == 1 and true or false, func = s.func, band = s.band, guest = tonumber(s.guest), switch_hour = s.switch_hour, switch_min = s.switch_min, switch_power = s.switch_power, restore_hour = s.restore_hour, restore_min = s.restore_min, restore_power = s.restore_power, week = week } end end end) local res = {} res.wifi = wifi res.wifi_func_2g = c:get("gl_timer", "global", "2G_func") res.wifi_func_5g = c:get("gl_timer", "global", "5G_func") return res end --[[ @method-name: set_disk @method-desc: Set disk config. @in bool enable disk定时器状态,true:开启 false:关闭. @in string turnon_hour disk定时器设定的disk开启时间(时) @in string turnon_min disk定时器设定的disk开启时间(分) @in string turnoff_hour disk定时器设定的disk关闭时间(时) @in string turnoff_min disk定时器设定的disk关闭时间(分) @in array week 一个星期中那些天进行重启操作 @out number ?err_code Error code,-1;parameter error. @out string ?err_msg Error message @in-example: {\"jsonrpc\":\"2.0\",\"method\":\"call\",\"params\":[\"\",\"timer\",\"set_led\",{\"enable\":true,\"turnon_hour\":\"07\",\"turnon_min\":\"00\",\"turnoff_hour\":\"22\",\"turnoff_min\":\"00\"}],\"id\":1} @out-example: {\"jsonrpc\": \"2.0\", \"id\": 1, \"result\": {}} --]] M.set_disk = function(params) local enable = params.enable local turnon_hour = params.turnon_hour local turnon_min = params.turnon_min local turnoff_hour = params.turnoff_hour local turnoff_min = params.turnoff_min local week = params.week if enable then if not turnon_hour or turnon_hour == "" or not turnon_min or turnon_min == "" or not turnoff_hour or turnoff_hour == "" or not turnoff_min or turnoff_min == "" or not week then return { err_code = ERR_TIMER_PARAM_MISSING, err_msg = "parameter missing" } end end local c = uci.cursor() if enable then c:set("gl_timer", "disk", "enable", "1") c:set("gl_timer", "disk", "turnon_hour", turnon_hour) c:set("gl_timer", "disk", "turnon_min", turnon_min) c:set("gl_timer", "disk", "turnoff_hour", turnoff_hour) c:set("gl_timer", "disk", "turnoff_min", turnoff_min) local tmp = "" for k,v in ipairs(week) do if k == 1 then tmp = v else tmp = tmp .. " " .. v end end c:set("gl_timer", "disk", "week", tmp) else c:set("gl_timer", "disk", "enable", "0") end c:commit("gl_timer") fs.sync() ngx.pipe.spawn({"/etc/init.d/gl_timer", "restart"}) end --[[ @method-name: get_disk @method-desc: Get config of disk. @out bool enable disk定时器状态,true:开启 false:关闭. @out string turnon_hour disk定时器设定的disk开启时间(时) @out string turnon_min disk定时器设定的disk开启时间(分) @out string turnoff_hour disk定时器设定的disk关闭时间(时) @out string turnoff_min disk定时器设定的disk关闭时间(分) @out array week 一个星期中那些天进行重启操作 @in-example: {\"jsonrpc\":\"2.0\",\"method\":\"call\",\"params\":[\"\",\"timer\",\"get_led\",{}],\"id\":1} @out-example: {"id":1,"jsonrpc":"2.0","result":{"turnon_hour":"07","turnoff_min":"00","turnon_min":"00","enable":true,"turnoff_hour":"22"}} --]] M.get_disk = function() local c = uci.cursor() local res = {} if c:get("gl_timer", "disk", "enable") == "1" then res.enable = true else res.enable = false end res.turnon_hour = c:get("gl_timer", "disk", "turnon_hour") or "00" res.turnon_min = c:get("gl_timer", "disk", "turnon_min") or "00" res.turnoff_hour = c:get("gl_timer", "disk", "turnoff_hour") or "00" res.turnoff_min = c:get("gl_timer", "disk", "turnoff_min") or "00" local week = {} local tmp = c:get("gl_timer", "disk", "week") or "0 1 2 3 4 5 6" for day in tmp:gmatch("%d+") do week[#week + 1] = tonumber(day) end res.week = week return res end return M