OpenWrt_Luci_Lua/updateWifi.lua

1084 lines
36 KiB
Lua
Raw Normal View History

2015-06-17 15:01:44 +00:00
===========================================================
--function: 定时wifi开关
--author rh_Jameson
function smart_wifi_shutdown()
local wnet = 'mt7628.network1'
local table = {}
--get para
--local close_time = luci.http.formvalue("close_time")
--local open_time = luci.http.formvalue("open_time")
--test normal
--local close_time = os.time() + 5
--local restart_time = os.time() + 10
--test exception
local close_time = os.time() - 5
local restart_time = os.time() - 10
--para err manage
if close_time < os.time() or restart_time < close_time then
table["err"] = true
luci.http.write_json(table)
return
end
--do close
while true do
if os.time() ~= close_time then
posix.sleep(1)
else
wifi_shutdown(wnet)
table["close"] = true
luci.http.write_json(table)
break
end
end
--do restart
while true do
if os.time() ~= restart_time then
posix.sleep(1)
else
wifi_reconnect(wnet)
table["restart"] = true
luci.http.write_json(table)
break
end
end
end
============================================================
-----------------------api/index.lua------------------------------
set_smart_wifi_updown = nwfs.set_smart_wifi_updown
set_wifi_up = nwfs.set_wifi_up
set_wifi_down = nwfs.set_wifi_down
set_smart_wifi_update = nwfs.set_smart_wifi_update
set_smart_wifi_stop = nwfs.set_smart_wifi_stop
--rh
page = entry({"api", "wifiUp"}, call("set_wifi_up"), nil)
page.leaf = true
page = entry({"api", "wifiDown"}, call("set_wifi_down"), nil)
page.leaf = true
page = entry({"api", "setSmartWifiUpdate"}, call("set_smart_wifi_update"), nil)
page.leaf = true
page = entry({"api", "setSmartWifiStop"}, call("set_smart_wifi_stop"), nil)
page.leaf = true
page = entry({"api", "setSmartWifiUpdown"}, call("set_smart_wifi_updown"), nil)
page.leaf = true
------------------------meizu/nwfs.lua----------------------------
function set_wifi_up()
--local cmd = "/sbin/wifi up".. wnet
local cmd = "/sbin/wifi up ".. "mt7628"
exec_cmd_in_sh(cmd)
luci.http.write_json("true")
end
function set_wifi_down()
local cmd = "/sbin/wifi down ".."mt7628"
--local cmd = "/sbin/wifi down"..wnet
exec_cmd_in_sh(cmd)
luci.http.write_json("true")
end
function set_smart_wifi_stop()
local pid = luci.http.formvalue("pid")
--exception manage
if(close_time == nil or open_time == nil) then
luci.http.write_json("smart_wifi not set")
return
end
if(pid == nil) then
luci.http.write_json("pid err")
end
--到点关闭前
if os.time() < close_time then
local cmd = "kill "..pid
--到点关闭后,到点启动前
elseif os.time() >= close_time and os.time() <= open_time then
local cmd = "kill "..pid.."; /sbin/wifi up"
--到点启动后
else
luci.http.write_json("smart wifi has finishedcan not stop")
return
end
exec_cmd_in_sh(cmd)
luci.http.write_json("true")
end
function set_smart_wifi_update()
local pid = luci.http.formvalue("pid")
--exception manage
if(close_time == nil or open_time == nil) then
luci.http.write_json("smart_wifi not set")
return
end
if(pid == nil) then
luci.http.write_json("pid err")
end
--到点关闭前
if os.time() < close_time then
local cmd = "kill "..pid
--到点关闭后,到点启动前
elseif os.time() >= close_time and os.time() <= open_time then
local cmd = "kill "..pid.."; /sbin/wifi up"
--到点启动后
end
exec_cmd_in_sh(cmd)
--get para
--close_time = os.time(lucimZhttp.formvalue("close_time"))
--open_time = os.time(luci.http.formvalue("open_time"))
--test normal
close_time = os.time() + 5
restart_time = os.time() + 10
--test exception
--close_time = os.time() - 5
--restart_time = os.time() - 10
set_smart_wifi_updown(close_time, restart_time)
end
function fork_smart_wifi_updown( wnet, close_time, open_time)
local close_interval = close_time - os.time()
local open_interval = open_time - os.time()
local cmd = string.format("sleep 15;/sbin/wifi down "..wnet.."; sleep 15; /sbin/wifi up "..wnet)
return exec_cmd_in_sh(cmd)
--exec_cmd_in_sh(cmd)
end
--function: 定时wifi开关shell形式
--author rh_Jameson
function set_smart_wifi_updown()
local wnet = 'mt7628'
local info = {}
--get para
--close_time = lucimZhttp.formvalue("close_time")
--open_time = luci.http.formvalue("open_time")
--test normal
close_time = os.time() + 5
restart_time = os.time() + 10
--test exception
--close_time = os.time() - 5
--restart_time = os.time() - 10
--para err manage
if close_time < os.time() or restart_time < close_time then
info["SUCCESS"] = false
else
info["SUCCESS"] = true
end
local pid = fork_smart_wifi_updown(wnet, close_time, restart_time)
info["PID"] = pid
luci.http.write_json(info)
end
--重载
function set_smart_wifi_updown(close_time,restart_time)
local wnet = 'mt7628'
local info = {}
--para err manage
if close_time < os.time() or restart_time < close_time then
info["SUCCESS"] = false
else
info["SUCCESS"] = true
end
local pid = fork_smart_wifi_updown(wnet, close_time, restart_time)
info["PID"] = pid
luci.http.write_json(info)
end
-------------------------------bfs.lua--line_92-------------------------------
function exec_cmd_in_sh(command)
local nio = require("nixio")
require "MZLog".log(3, command)
local pid = nio.fork()
if pid > 0 then
return pid
elseif pid == 0 then
nio.chdir("/")
local null = nio.open("/dev/null", "w+")
if null then
nio.dup(null, nio.stderr)
nio.dup(null, nio.stdout)
nio.dup(null, nio.stdin)
if null:fileno() > 2 then
null:close()
end
end
nio.exec("/bin/sh", "-c", command)
end
end
-------------------------UTC-CODE-字符串形式UTC时间转时间戳------------------------
local lue = require("luci.util").exec
local t = lue([[date -d "2010-10-10 10:10:10" +%s]])
print(tonumber(t))
local lue = require("luci.util").exec
--local t = lue('date -d "2010-10-10 10:10:10" +%s')
local t = lue([[date -d "2010-10-10 10:10:10" +%s]])
print(tonumber(t))
print(t)
----------------------------Lua-多线程回调函数实现---------------------------------
--回调
function fork_exec_in_lua(func)
local nio = require("nixio")
-- require "MZLog".log(3, command)
local pid = nio.fork()
if pid > 0 then
print(pid)
return
elseif pid == 0 then
func()
end
end
--主调
local bfs = require("meizu.bfs")
function test()
local i = 1
while(i < 10) do
print(i)
i = i + 1
end
end
bfs.fork_exec_in_lua(test)
----------------------------Lua-函数不可以重载-----------------------------------
--test
function fun()
print("11111")
end
function fun(str)
print(str)
end
fun()
fun("2222")
fun()
--result
nil
2222
nil
----------------------------crontabs & crond------------------------------------
crontab -u //cron服务root用户在执行这个命令的时候需要此参数
crontab -l //cron服务的详细内容
crontab -r //cron服务
crontab -e //cron服务
:
1. crontab -l
crontab任务
2. crontab -d
crontab任务
3. crontab -e (solaris5.8 crontab -r)
crontab任务,ctrl_D结束
4. crontab filename
filename做为crontab的任务列表文件并载入
/**/
crond start //
crond stop //
crond restart //
crond reload //
--openwrt设置/etc/crontabs/root:
* * * * * echo "hello" >> /cron.txt
--每次做修改时使用crontab /etc/crondtabs/root
--crontabs/root文件下写的定时任务是多线程运行不按顺序执行
Sed命令
sed -n '/hello/p' cron.txt hello关键字
sed '/hello/d' cron.txt hello的行
sed -i '/hello/d' cron.txt
--[[non-repeat任务]]--
* * * * * echo "flag non-repeat">> /cron.txt; sed -i '/sed/d' /etc/crontabs/root
--[[repeat任务]]--
--添加定时任务exam
echo "* * * * * date >>/cron.txt">>/etc/crontabs/root;flag >/dev/null 2>/
--删除定时任务exam
sed -i '/hello/d' /etc/crontabs/root
--修改定时任务exam
==================================-TEST================================
echo '* * * * non-repeat /sbin/wifi down mt7628; sed -i "/* * * * non-repeat/d" etc/crontabs/root' >> /etc/crontabs/root; crontab /etc/crontabs/root;
* * * * * /sbin/wifi down mt7628; sed -i '/sed/d' etc/crontabs/root; crontab /etc/crontabs/root;
* * * * * date >>/cron.txt; sed -i '/sed/d' /etc/crontabs/root
--non-repeat任务
echo "$1 $2 * * $3 /sbin/wifi down mt7628;
sleep 4;
sed -i '/$1$2$3/d' /etc/crontabs/root;
crontab /etc/crontab/root;
$1$2$3 >/dev/null 2>/dev/null " >> /etc/crontabs/root; crontab /etc/crontabs/root;
bin cron.txt * * dev /sbin/wifi down mt7628;sleep 4; sed -i '/bincron.txtdev/d' /etc/crontabs/root; crontab /etc/crontab/root; bincron.txtdev >/dev/null 2>/dev/null
--non-repeate任务
if week_repeat == "non-repeat" then
week_repeat = "0,1,2,3,4,5,6"
close_min = "40"
Segmentation fault
cmd = "/sbin/smart@OpenWrt:/usr/lib/lua/meizu# e_hour.." "..week_repeat
else
cmd = "echo '"..close_min.." "..close_hour.." * * "..week_repeat.." /sbin/wifi down "..wnet.."' >> /etc/crontabs/root; crontab /etc/cronta
..close_min..close_hour..open_hour..open_min..week_repeat.." >/dev/null 2>/dev/null"
--cmd = "echo '"..open_min.." "..open_hour.." * * "..week_repeat.." /sbin/wifi up "..wnet.."' >> /etc/crontabs/root; crontab /etc/crontabs
end
luci.http.write_json(cmd)
exec_cmd_in_sh(cmd)
luci.http.write_json(true)
if week_repeat == "non-repeat" then
week_repeat = "*"
cmd_close = "/sbin/smart_wifi "..close_hour.." "..close_min.." "..week_repeat
--cmd_open = "echo '"..close_min.." "..close_hour.." * * "..week_repeat.." /sbin/wifi down "..wnet
-- .."; sed -i '/"..close_min..close_hour..open_hour..open_min..week_repeat
-- .."/d' etc/crontabs/root >> /etc/crontabs/root; crontab /etc/crontabs/root; "
-- ..close_min..close_hour..open_hour..open_min..week_repeat.." >/dev/null 2>/dev/null"
else
cmd_close = "echo '"..close_min.." "..close_hour.." * * "..week_repeat.." /sbin/wifi down "..wnet
.."' >> /etc/crontabs/root; crontab /etc/crontabs/root; "
..close_min..close_hour..open_hour..open_min..week_repeat.." >/dev/null 2>/dev/null"
--cmd_open = "echo '"..open_min.." "..open_hour.." * * "..week_repeat.." /sbin/wifi up "..wnet.."' >> /etc/crontabs/root; crontab /etc/crontabs/root; "..close_min..close_hour..open_hour..open_min..week_repeat.." >/dev/null 2>/dev/null"
end
luci.http.write_json(cmd_close)
--luci.http.write_json(cmd_open)
exec_cmd_in_sh(cmd_close)
--exec_cmd_in_sh(cmd_open)
luci.http.write_json(true)
===============================================================-succeed====================================================
-------------------------./package/base-files/files/sbin/smart_wifi----------------------------------
#!/bin/sh
echo "" >> /etc/crontabs/root;
echo "$1 $2 * * $3 /sbin/wifi down mt7628;sleep 4; sed -i '/$1$2$3/d' /etc/crontabs/root; crontab /etc/crontab/root; $1$2$3 >/dev/null 2>/dev/null " >> /etc/crontabs/root; crontab /etc/crontabs/root;
echo "" >> /etc/crontabs/root;
------------------------------------------------nwfs.lua code-------------------------------------
------------------------------------------------set smart wifi------------------------------------
function fork_smart_wifi_updown(wnet, close_hour, close_min, open_hour, open_min, week_repeat)
if week_repeat == "non-repeat" then
week_repeat = "0,1,2,3,4,5,6" --"1,2,3,4,5,6,0 is error,可能会误删repeat的数据"
cmd_close = "/sbin/smart_wifi "..close_min.." "..close_hour.." "..week_repeat
cmd_open = "/sbin/smart_wifi "..open_min.." "..open_hour.." "..week_repeat
else
cmd_close = "echo '"..close_min.." "..close_hour.." * * "..week_repeat.." /sbin/wifi down "..wnet..";"
..close_min..close_hour..open_min..open_hour..week_repeat
..">/dev/null 2>/dev/null' >> /etc/crontabs/root; crontab /etc/crontabs/root;"
cmd_open = "echo '"..open_min.." "..open_hour.." * * "..week_repeat.." /sbin/wifi up "..wnet..";"
..close_min..close_hour..open_min..open_hour..week_repeat
..">/dev/null 2>/dev/null' >> /etc/crontabs/root; echo '' >> /etc/crontabs/root; crontab /etc/crontabs/root;"
end
luci.http.write_json(cmd_close)
luci.http.write_json(cmd_open)
exec_cmd_in_sh(cmd_close)
posix.sleep(1)
exec_cmd_in_sh(cmd_open)
end
-----------------------------------------------stop smart wifi------------------------------------
function set_smart_wifi_stop(update_flag)
local cmd = "sed -i '/"..update_flag.."/d' /etc/crontabs/root; crontab /etc/crontabs/root"
exec_cmd_in_sh(cmd)
luci.http.write_json(cmd)
end
--------------------------------------------update smart wifi-------------------------------------
--(stop + set) smartwifi
----------------------------------------------smart wifi api--------------------------------------
--function: 定时wifi开关shell形式
--author rh_Jameson
function set_smart_wifi_updown()
--get para
--wnet = luci.http.formvalue("wnet")
--close_hour = luci.http.formvalue("close_hour")
--close_min = luci.http.formvalue("close_min")
--open_hour = luci.http.formvalue("open_hour")
--open_min = luci.http.formvalue("open_min")
--repeat_var_from_http = luci.http.formvalue("repeat_var")
--func = luci.http.formvalue("func")
--test
local wnet = 'mt7628'
local close_hour = "07"
local close_min = "25"
local open_hour = "07"
local open_min = "26"
local repeat_var_from_http = "1111111"
local func = luci.http.formvalue("func")
--para err manage
if string.len(repeat_var_from_http) ~= 7 then
luci.http.write_json("len error")
return
end
--get repeat
local week_repeat = ""
for i = 0, #repeat_var_from_http do
tmp = string.sub(repeat_var_from_http, i, i)
if tmp == "1" then
if i == #repeat_var_from_http then
week_repeat = week_repeat..0
break
end
week_repeat = week_repeat..tostring(i)..","
end
end
if week_repeat == "" then
week_repeat = "non-repeat"
end
--exec
if func == "set" then
fork_smart_wifi_updown(wnet, close_hour, close_min, open_hour, open_min, week_repeat)
elseif func == "stop" or func == "update" then
local update_flag = luci.http.formvalue("flag")
set_smart_wifi_stop(update_flag)
if func == "update" then
posix.sleep(1)
fork_smart_wifi_updown(wnet, close_hour, close_min, open_hour, open_min, week_repeat)
end
end
end
-----------------------api/index.lua------------------------------
set_smart_wifi_updown = nwfs.set_smart_wifi_updown
set_wifi_up = nwfs.set_wifi_up
set_wifi_down = nwfs.set_wifi_down
set_smart_wifi_update = nwfs.set_smart_wifi_update
set_smart_wifi_stop = nwfs.set_smart_wifi_stop
--rh
page = entry({"api", "wifiUp"}, call("set_wifi_up"), nil)
page.leaf = true
page = entry({"api", "wifiDown"}, call("set_wifi_down"), nil)
page.leaf = true
page = entry({"api", "setSmartWifiUpdate"}, call("set_smart_wifi_update"), nil)
page.leaf = true
page = entry({"api", "setSmartWifiStop"}, call("set_smart_wifi_stop"), nil)
page.leaf = true
page = entry({"api", "setSmartWifiUpdown"}, call("set_smart_wifi_updown"), nil)
page.leaf = true
-----------------------第三版阉割代码--------------------------------
off功能
sed -n '/hello/p' /etc/crontabs/root >> /tmp/wifi_cron_off.txt; sed -i '/hello/d' /etc/crontabs/root
on功能
sed -n '/timer0/p' /tmp/wifi_cron_off.txt >> /etc/crontabs/root; sed -i '/timer0/d' /tmp/wifi_cron_off.txt
get match
11 08 * * 1,2,3,4,5,6,0 /sbin/wifi down mt7628; #110812081,2,3,4,5,6,0; up_timer0
cmd_close = "echo '"..close_min.." "..close_hour.." * * "..week_repeat.." /sbin/wifi down "..wnet.."; #"
..close_min..close_hour..open_min..open_hour..week_repeat.."~ down_"..time_flag
.."' >> /etc/crontabs/root; crontab /etc/crontabs/root;"
cmd_open = "echo '"..open_min.." "..open_hour.." * * "..week_repeat.." /sbin/wifi up "..wnet.."; #"
..close_min..close_hour..open_min..open_hour..week_repeat.."~ up_"..time_flag
.."' >> /etc/crontabs/root; echo ''>>/etc/crontabs/root; crontab /etc/crontabs/root;"
cmd_close = "echo '"..close_min.." "..close_hour.." * * "..week_repeat.." /sbin/wifi down "..wnet.."; #"
..close_min..close_hour..open_min..open_hour..week_repeat
.."' >> /etc/crontabs/root; crontab /etc/crontabs/root;"
cmd_open = "echo '"..open_min.." "..open_hour.." * * "..week_repeat.." /sbin/wifi up "..wnet.."; #"
..close_min..close_hour..open_min..open_hour..week_repeat
.."' >> /etc/crontabs/root; echo ''>>/etc/crontabs/root; crontab /etc/crontabs/root;"
http://192.168.232.1/cgi-bin/luci/api/setSmartWifiUpdown?func=set;flag=timer0
http://192.168.232.1/cgi-bin/luci/api/setSmartWifiUpdown?func=stop;flag=timer0
192.168.232.1/cgi-bin/luci/api/setSmartWifiUpdown?func=update;flag=timer0;new_flag=timer0
--get para
wnet = luci.http.formvalue("wnet")
close_hour = luci.http.formvalue("close_hour")
close_min = luci.http.formvalue("close_min")
open_hour = luci.http.formvalue("open_hour")
open_min = luci.http.formvalue("open_min")
repeat_var_from_http = luci.http.formvalue("repeat_var")
func = luci.http.formvalue("func")
flag = luci.http.formvalue("flag")
--test normal
local wnet = 'mt7628'
local close_hour = "08"
local close_min = "11"
local open_hour = "08"
local open_min = "12"
local repeat_var_from_http = "1111111"
local func = luci.http.formvalue("func")
local time_flag = luci.http.formvalue("flag")
--update
local new_flag = luci.http.formvalue("new_flag")
fork_smart_wifi_updown(wnet, close_hour, close_min, open_hour, open_min, week_repeat, time_flag)
192.168.232.1/cgi-bin/luci/api/setSmartWifiUpdown?func=update;flag=timer0;new_flag=timer0
on & off只要flag
http://192.168.232.1/cgi-bin/luci/api/setSmartWifiOff?flag=timer0
http://192.168.232.1/cgi-bin/luci/api/setSmartWifiOn?flag=timer0
---------------------------------------------------------------------------------------
update:
http://192.168.232.1/cgi-bin/luci/api/setSmartWifiUpdown?func=update;flag=timer1;new_flag=timer0
stop:
http://192.168.232.1/cgi-bin/luci/api/setSmartWifiUpdown?func=stop;flag=timer2
set:
192.168.232.1/cgi-bin/luci/api/setSmartWifiUpdown?func=set;flag=timer2
on:
http://192.168.232.1/cgi-bin/luci/api/setSmartWifiUpdown?func=on;flag=timer1
off:
http://192.168.232.1/cgi-bin/luci/api/setSmartWifiUpdown?func=off;flag=timer1
get:
http://192.168.232.1/cgi-bin/luci/api/getSmartWifiInfo
------------------------------------第三版update-------------------------------------------------
--set
function fork_smart_wifi_updown(wnet, close_hour, close_min, open_hour, open_min, week_repeat, time_flag)
if week_repeat == "non-repeat" then
week_repeat = "0,1,2,3,4,5,6"
cmd_close = "/usr/sbin/wifi_cron_switch "..close_min.." "..close_hour.." "..week_repeat.. " "..time_flag
.." "..wnet.." down"
cmd_open = "/usr/sbin/wifi_cron_switch "..open_min.." "..open_hour.." "..week_repeat.." "..time_flag
.." "..wnet.." up"
else
cmd_close = "echo '"..close_min.." "..close_hour.." * * "..week_repeat.." /sbin/wifi down "..wnet.."; #"
..close_min..close_hour..open_min..open_hour..week_repeat.."~ down_"..time_flag
.."' >> /etc/crontabs/root; crontab /etc/crontabs/root;"
cmd_open = "echo '"..open_min.." "..open_hour.." * * "..week_repeat.." /sbin/wifi up "..wnet.."; #"
..close_min..close_hour..open_min..open_hour..week_repeat.."~ up_"..time_flag
.."' >> /etc/crontabs/root; echo ''>>/etc/crontabs/root; crontab /etc/crontabs/root;"
end
luci.http.write_json(cmd_close)
luci.http.write_json(cmd_open)
require "MZLog".log(3, cmd_close)
require "MZLog".log(3, cmd_open)
exec_cmd_in_sh(cmd_close)
posix.sleep(1)
exec_cmd_in_sh(cmd_open)
end
--stop(del)
function set_smart_wifi_stop(update_flag)
local cmd = "sed -i '/"..update_flag.."/d' /etc/crontabs/root; crontab /etc/crontabs/root"
require "MZLog".log(3, cmd)
exec_cmd_in_sh(cmd)
luci.http.write_json(cmd)
end
--off
function set_smart_wifi_off(update_flag)
--local update_flag = luci.http.formvalue("flag")
local cmd = "sed -n '/"..update_flag.."/p' /etc/crontabs/root >> /tmp/wifi_cron_off.txt; sed -i '/"
..update_flag.."/d' /etc/crontabs/root; crontab /etc/crontabs/root"
require "MZLog".log(3, cmd)
exec_cmd_in_sh(cmd)
luci.http.write_json(cmd)
end
--on
function set_smart_wifi_on(update_flag)
--local update_flag = luci.http.formvalue("flag")
local cmd = "sed -n '/"..update_flag.."/p' /tmp/wifi_cron_off.txt >> /etc/crontabs/root; sed -i '/"
..update_flag.."/d' /tmp/wifi_cron_off.txt; crontab /etc/crontabs/root"
require "MZLog".log(3, cmd)
exec_cmd_in_sh(cmd)
luci.http.write_json(cmd)
end
--get
function get_smart_wifi_info()
--exec_cmd_in_sh("echo '' >> /etc/crontabs/root", "r")
local smart_wifi_info = io.open("/etc/crontabs/root", "r")
local res = {}
if smart_wifi_info == nil then
luci.http.write_json("false")
return
end
for line in smart_wifi_info:lines() do
idx,_ = string.find(line, "up_timer")
if line and idx then
time_idx_begin = string.find(line, "#") + 1
time_idx_end = string.find(line, "~") - 1
local item = {}
item["close_min"] = string.sub(line, time_idx_begin, time_idx_begin + 1)
item["close_hour"] = string.sub(line, time_idx_begin + 2, time_idx_begin + 3)
item["open_min"] = string.sub(line, time_idx_begin + 4, time_idx_begin + 5)
item["open_hour"] = string.sub(line, time_idx_begin + 6, time_idx_begin + 7)
item["repeat"] = string.sub(line, time_idx_begin + 8, time_idx_end)
item["switch"] = 1
table.insert(res,item)
end
end
exec_cmd_in_sh("echo '' >> /tmp/wifi_cron_off.txt")
smart_wifi_info = io.input("/tmp/wifi_cron_off.txt")
for line in smart_wifi_info:lines() do
idx,_ = string.find(line, "up_timer")
if line and idx then
time_idx_begin = string.find(line, "#") + 1
time_idx_end = string.find(lind, "~") - 1
local item = {}
item["close_min"] = string.sub(line, time_idx_begin, time_idx_begin + 1)
item["close_hour"] = string.sub(line, time_idx_begin + 2, time_idx_begin + 3)
item["open_min"] = string.sub(line, time_idx_begin + 4, time_idx_begin + 5)
item["open_hour"] = string.sub(line, time_idx_begin + 6, time_idx_begin + 7)
item["repeat"] = string.sub(line, time_idx_begin + 8, time_idx_end)
item["switch"] = 0
table.insert(res,item)
end
end
require "MZLog".log(3, res)
smart_wifi_info:close()
luci.http.write_json(res)
end
--function: 定时wifi开关shell形式
--author rh_Jameson
function set_smart_wifi_updown()
--get para
--wnet = luci.http.formvalue("wnet")
--close_hour = luci.http.formvalue("close_hour")
--close_min = luci.http.formvalue("close_min")
--open_hour = luci.http.formvalue("open_hour")
--open_min = luci.http.formvalue("open_min")
--repeat_var_from_http = luci.http.formvalue("repeat_var")
--func = luci.http.formvalue("func")
--flag = luci.http.formvalue("flag")
--test normal
local wnet = 'mt7628'
local close_hour = "08"
local close_min = "11"
local open_hour = "08"
local open_min = "12"
local repeat_var_from_http = "1111111"
local func = luci.http.formvalue("func")
local time_flag = luci.http.formvalue("flag")
--para err manage
if string.len(repeat_var_from_http) ~= 7 then
luci.http.write_json("len error")
return
end
--get repeat
local week_repeat = ""
for i = 0, #repeat_var_from_http do
tmp = string.sub(repeat_var_from_http, i, i)
if tmp == "1" then
if i == #repeat_var_from_http then
week_repeat = week_repeat..0
break
end
week_repeat = week_repeat..tostring(i)..","
end
end
if week_repeat == "" then
week_repeat = "non-repeat"
end
--exec
if func == "set" then
fork_smart_wifi_updown(wnet, close_hour, close_min, open_hour, open_min, week_repeat, time_flag)
elseif func == "stop" or func == "update" then
set_smart_wifi_stop(time_flag)
if func == "update" then
local new_flag = luci.http.formvalue("new_flag")
posix.sleep(1)
fork_smart_wifi_updown(wnet, close_hour, close_min, open_hour, open_min, week_repeat, new_flag)
end
elseif func == "on" then
set_smart_wifi_on(time_flag)
elseif func == "off" then
set_smart_wifi_off(time_flag)
end
end
-----------------------------wifi第三版 无多余tmp文件------------------------------
--getsmartwifiinfo
for line in smart_wifi_info:lines() do
idx,_ = string.find(line, "up_timer")
if line and idx then
time_idx_begin = string.find(line, "#") + 1
time_idx_end = string.find(line, "~") - 1
local item = {}
item["close_min"] = string.sub(line, time_idx_begin, time_idx_begin + 1)
item["close_hour"] = string.sub(line, time_idx_begin + 2, time_idx_begin + 3)
item["open_min"] = string.sub(line, time_idx_begin + 4, time_idx_begin + 5)
item["open_hour"] = string.sub(line, time_idx_begin + 6, time_idx_begin + 7)
item["repeat"] = string.sub(line, time_idx_begin + 8, time_idx_end)
item["switch"] = string.sub(line, 1, 1) == "#" and 0 or 1
table.insert(res,item)
end
end
--off
function set_smart_wifi_off(update_flag)
--local update_flag = luci.http.formvalue("flag")
--local cmd = "sed -n '/"..update_flag.."/p' /etc/crontabs/root >> /tmp/wifi_cron_off.txt; sed -i '/"
---------------------------中继转dhcp-----------------------------
r, msg = pcall(function() db:rows(sqlStr) end)
if r == false then
require "MZLog".log(3, "r false")
return result
end
-- ..update_flag.."/d' /etc/crontabs/root; crontab /etc/crontabs/root"
local cmd = "sed -i '/"..update_flag.."/s/^/#/' /etc/crontabs/root; crontab /etc/crontabs/root"
require "MZLog".log(3, cmd)
exec_cmd_in_sh(cmd)
luci.http.write_json(cmd)
end
--on
function set_smart_wifi_on(update_flag)
--local update_flag = luci.http.formvalue("flag")
--local cmd = "sed -n '/"..update_flag.."/p' /tmp/wifi_cron_off.txt >> /etc/crontabs/root; sed -i '/"
-- ..update_flag.."/d' /tmp/wifi_cron_off.txt; crontab /etc/crontabs/root"
local cmd = "sed -i '/"..update_flag.."/s/^#//' /etc/crontabs/root; crontab /etc/crontabs/root"
require "MZLog".log(3, cmd)
exec_cmd_in_sh(cmd)
luci.http.write_json(cmd)
end
-----------------------------------------smart wifi updown 4th single switch------------------------------------------------
--set
function fork_smart_wifi_updown(wnet, close_hour, close_min, open_hour, open_min, week_repeat, time_flag, switch)
local wifi_status = (switch == tostring(0) and "#" or "")
if week_repeat == "non-repeat" then
week_repeat = "0,1,2,3,4,5,6"
cmd_close = "/usr/sbin/wifi_cron_switch "..close_min.." "..close_hour.." "..week_repeat.. " "..time_flag
.." "..wnet.." down"
cmd_open = "/usr/sbin/wifi_cron_switch "..open_min.." "..open_hour.." "..week_repeat.." "..time_flag
.." "..wnet.." up"
else
cmd_close = "echo '"..wifi_status..close_min.." "..close_hour.." * * "..week_repeat.." /sbin/wifi down "..wnet.."; #"
..close_min..close_hour..open_min..open_hour..week_repeat.."~ down_"..time_flag
.."' >> /etc/crontabs/root; crontab /etc/crontabs/root;"
cmd_open = "echo '"..wifi_status..open_min.." "..open_hour.." * * "..week_repeat.." /sbin/wifi up "..wnet.."; #"
..close_min..close_hour..open_min..open_hour..week_repeat.."~ up_"..time_flag
.."' >> /etc/crontabs/root; echo ''>>/etc/crontabs/root; crontab /etc/crontabs/root;"
end
require "MZLog".log(3, cmd_close)
require "MZLog".log(3, cmd_open)
exec_cmd_in_sh(cmd_close)
posix.sleep(1)
exec_cmd_in_sh(cmd_open)
end
--stop(del)
function set_smart_wifi_stop(update_flag)
local cmd = "sed -i '/"..update_flag.."/d' /etc/crontabs/root; crontab /etc/crontabs/root"
require "MZLog".log(3, cmd)
exec_cmd_in_sh(cmd)
end
--off
function set_smart_wifi_off(update_flag)
local cmd = "sed -i '/"..update_flag.."/s/^/#/' /etc/crontabs/root; crontab /etc/crontabs/root"
require "MZLog".log(3, cmd)
exec_cmd_in_sh(cmd)
end
--on
function set_smart_wifi_on(update_flag)
local cmd = "sed -i '/"..update_flag.."/s/^#//' /etc/crontabs/root; crontab /etc/crontabs/root"
require "MZLog".log(3, cmd)
exec_cmd_in_sh(cmd)
end
--get
function get_smart_wifi_info()
local smart_wifi_info = io.open("/etc/crontabs/root", "r")
local res = {}
if smart_wifi_info == nil then
luci.http.write_json("false")
return
end
for line in smart_wifi_info:lines() do
idx,_ = string.find(line, "up_timer")
if line and idx then
time_idx_begin = string.find(line, "#", 2) + 1
time_idx_end = string.find(line, "~") - 1
local item = {}
item["close_min"] = string.sub(line, time_idx_begin, time_idx_begin + 1)
item["close_hour"] = string.sub(line, time_idx_begin + 2, time_idx_begin + 3)
item["open_min"] = string.sub(line, time_idx_begin + 4, time_idx_begin + 5)
item["open_hour"] = string.sub(line, time_idx_begin + 6, time_idx_begin + 7)
local tmp_rep = string.sub(line, time_idx_begin + 8, time_idx_end)
local repeat_var = "0000000"
for i = 1, #tmp_rep, 2 do
idx = string.sub(tmp_rep, i, i)
if idx ~= tostring(0) then
repeat_var = string.sub(repeat_var, 0, idx - 1) .. tostring(1) .. string.sub(repeat_var, idx + 1, #repeat_var)
else
repeat_var = string.sub(repeat_var, 1, #repeat_var - 1) .. tostring(1)
end
require "MZLog".log(3, repeat_var)
end
item["repeat"] = repeat_var
item["switch"] = string.sub(line, 1, 1) == "#" and 0 or 1
table.insert(res,item)
end
end
require "MZLog".log(3, res)
smart_wifi_info:close()
luci.http.write_json(res)
end
function set_smart_wifi_updown()
local info = {}
--get para
wnet = luci.http.formvalue("wnet")
close_hour = luci.http.formvalue("close_hour")
close_min = luci.http.formvalue("close_min")
open_hour = luci.http.formvalue("open_hour")
open_min = luci.http.formvalue("open_min")
repeat_var_from_http = luci.http.formvalue("repeat_var")
func = luci.http.formvalue("func")
time_flag = luci.http.formvalue("flag")
switch = luci.http.formvalue("switch")
--test normal
-- local wnet = 'mt7628'
-- local close_hour = "08"
-- local close_min = "11"
-- local open_hour = "08"
-- local open_min = "12"
-- local repeat_var_from_http = "1111111"
-- local func = luci.http.formvalue("func")
-- local time_flag = luci.http.formvalue("flag")
-- local switch = luci.http.formvalue("switch")
--para err manage
if string.len(repeat_var_from_http) ~= 7 then
info["res"] = false
luci.http.write_json(info)
require "MZLog".log(3, "len error")
return
end
--get repeat
local week_repeat = ""
require "MZLog".log(3, repeat_var_from_http)
for i = 0, #repeat_var_from_http do
tmp = string.sub(repeat_var_from_http, i, i)
if tmp == "1" then
if i == #repeat_var_from_http then
week_repeat = week_repeat..0
break
end
week_repeat = week_repeat..tostring(i)..","
end
end
if week_repeat == "" then
week_repeat = "non-repeat"
end
--exec
if func == "set" then
set_smart_wifi_stop(time_flag)
posix.sleep(1)
fork_smart_wifi_updown(wnet, close_hour, close_min, open_hour, open_min, week_repeat, time_flag, switch)
elseif func == "stop" or func == "update" then
set_smart_wifi_stop(time_flag)
if func == "update" then
local new_flag = luci.http.formvalue("new_flag")
posix.sleep(1)
fork_smart_wifi_updown(wnet, close_hour, close_min, open_hour, open_min, week_repeat, new_flag)
end
elseif func == "on" then
-- set_smart_wifi_on(time_flag)
set_smart_wifi_stop(time_flag)
posix.sleep(1)
fork_smart_wifi_updown(wnet, close_hour, close_min, open_hour, open_min, week_repeat, time_flag, switch)
elseif func == "off" then
-- set_smart_wifi_off(time_flag)
set_smart_wifi_stop(time_flag)
posix.sleep(1)
fork_smart_wifi_updown(wnet, close_hour, close_min, open_hour, open_min, week_repeat, time_flag, switch)
end
info["res"] = true
luci.http.write_json(info)
end