Openwrt已经提供了一个很强大的web管理界面Luci,可以方便的管理路由器。我们在开发智能路由器时,一般就需要在OpenWrt的WEB界面增加内容。
LuCI是OpenWrt上的Web管理界面,LuCI采用了MVC三层架构,使用Lua脚本开发,所以开发LuCI的配置界面不需要编辑任何的Html代码,除非想自己单独去创建网页(View层),否则我们基本上只需要修改Model层就可以了。
接下来介绍如何在“System”添加Test选项卡。
在文件系统目录“/usr/lib/lua/luci/controller/admin”下创建test.lua文件,文件内容如下:
module("luci.controller.admin.test", package.seeall)
function index()
entry({"admin", "test"}, alias("admin", "test", "test"), _("Test1"), 30).index = true
entry({"admin", "test", "control"}, cbi("admin_test/control"), _("ControlTest"), 1)
end
test.lua中 entry表示添加一个新的模块入口,entry的定义如下,其中后两项都是可以为空:
entry(path, target, title=nil, order=nil)
由test.lua中cbi指示的目录,在“/usr/lib/lua/luci/model/cbi/admin_test”目录下有control.lua脚本。
1.在/usr/lib/lua/luci/model/cbi在新建admin_test目录
2.在admin_test中新建control.lua文件,添加内容
require("luci.sys")
require("luci.sys.zoneinfo")
require("luci.tools.webadmin")
require("luci.fs")
require("luci.config")
local m, s, o
m = Map("test", translate("Test"), translate("This is simple test."))
m:chain("luci")
s = m:section(TypedSection, "controlboard", translate("Control Board"))
s.anonymous = true
s.addremove = false
s:tab("led", translate("Control LED"))
s:tab("beep", translate("Control Beep"))
--s:tab("adc", translate("Control Adc"))
--
-- LED
--
o = s:taboption("led", ListValue, "lednum", translate("LED NUM:"))
o.default = 0
o.datatype = "uinteger"
o:value(0, translate("LED0"))
o:value(1, translate("LED1"))
o:value(2, translate("LED2"))
o = s:taboption("led", ListValue, "ledstatus", translate("LED STATUS:"))
o.default = 1 --off status
o.datatype = "uinteger"
o:value(0, translate("LED ON"))
o:value(1, translate("LED OFF"))
--
-- BEEP
--
o = s:taboption("beep", ListValue, "beepstatus", translate("BEEP STATUS:"))
o.default = 1 --off status
o.datatype = "uinteger"
o:value(0, translate("ON"))
o:value(1, translate("OFF"))
o = s:taboption("beep", Value, "beepfreq", translate("BEEP FREQ:"))
o.datatype = "uinteger"
return mreturn m
该脚本表示读取/etc/config下的test文件,因此我们需要在/etc/config/中添加test文件。并在文件中添加:config controlboard
重启uhttpd服务后,刷新后界面为: