Openwrt(LUCI相关记录1)

Openwrt Luci界面开发

总结:

make menuconfig 选择的的luci:
Luci--- >Collections--->luci

源码位置::

\192.168.1.223\share\openwrt\openwrt_1\feeds\luci\modules\luci-mod-admin-full\luasrc


image.png

Openwrt已经提供了一个很强大的web管理界面Luci,可以方便的管理路由器。我们在开发智能路由器时,一般就需要在OpenWrt的WEB界面增加内容。

1.Luci简介

LuCI是OpenWrt上的Web管理界面,LuCI采用了MVC三层架构,使用Lua脚本开发,所以开发LuCI的配置界面不需要编辑任何的Html代码,除非想自己单独去创建网页(View层),否则我们基本上只需要修改Model层就可以了。

2. 添加选项Test

接下来介绍如何在“System”添加Test选项卡。

在文件系统目录,源码路径(\feeds\luci\modules\luci-mod-admin-full\luasrc\view\admin_mqtt)
“/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  

/etc/init.d/uhttpd restart 重启http服务之后,刷新界面之后(有时候因为缓存,界面没有及时变化,rm -rf /tmp/luci-* 删除缓存就可以了),界面变成


image.png

test.lua中 entry表示添加一个新的模块入口,entry的定义如下,其中后两项都是可以为空:

entry(path, target, title=nil, order=nil)  

“path”是访问的路径,路径是按字符串数组给定的,比如路径按如下方式写“{"admin", "test", "control"}”,那么就可以在浏览器里访问“http://192.168.1.1/cgi-bin/luci/admin/test/control”来访问这个脚本。其中的“admin”表示为管理员添加脚本,“test”即为一级菜单名,“control”为菜单项名。系统会自动在对应的菜单中生成菜单项。比如想在“System”菜单下创建一个菜单项,那么一级菜单名可以写为“system”。
“target”为调用目标,调用目标分为三种,分别是执行指定方法(Action)、访问指定页面(Views)以及调用CBI Module。
第一种可以直接调用指定的函数,比如点击菜单项就直接重启路由器等等,比如写为“call("function_name")”,然后在该lua文件下编写名为function_name的函数就可以调用了。
第二种可以访问指定的页面,比如写为“template("myapp/mymodule")”就可/usr/lib/lua/luci/model/cbi以调用/usr/lib/lua/luci/view/myapp/mymodule.htm文件了。
第三种主要应用在配置界面,比如写为“cbi("myapp/mymodule")”就可以调用/usr/lib/lua/luci/model/cbi/myapp/mymodule.lua文件了。
title和order是针对管理员菜单的,其中的title即是显示在网页上的内容。这里我们创建“/usr/lib/lua/luci/controller/admin/test.lua”文件,定义我们的入口为“test”。

3添加cbi脚本

由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"  

该脚本表示读取/etc/config下的test文件,因此我们需要在/etc/config/中添加test文件。并在文件中添加:config controlboard

重启uhttpd服务后,刷新后界面为:


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容

  • www/cbi-bin/luci run方法的主要任务就是在安全的环境中打开开始页面(登录页面),在run中,最主...
    hades2013阅读 3,336评论 0 1
  • 摘要:Lua作为一门方便嵌入(其它应用程序)并可扩展的轻量级脚本语言来设计的,因此她一直遵从着简单、小巧、可移植、...
    Masukio阅读 65,416评论 5 41
  • 在uHTTPd上安装LuCI 这是安装Web用户界面LuCI的要点。运行"opkg update && opkg ...
    3c937c88e6c0阅读 12,865评论 0 2
  • 5点的闹钟响了,身体有点儿疲惫就这样顺势侧卧开始冥想,昨日种种看着它流过,清晰透彻起来.那个一环扣一环的线...
    lanfang阅读 278评论 0 1
  • 大学刚毕业,入职1个月,谈下来公司第一个合作项目。 与台湾英语教父赖世雄联合打造月销售2000+,收益12W的线上...
    李雷雷雷阅读 214评论 0 0