没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
1 Openwrt Luci 界面开发
Openwrt 已经提供了一个很强大的 web 管理界面 Luci,可以方便的管理路由器。我们在开发智能
路由器时,一般就需要在 OpenWrt 的 WEB 界面增加内容。
1.1 1.Luci 简介
LuCI 是 OpenWrt 上的 Web 管理界面,LuCI 采用了 MVC 三层架构,使用 Lua 脚本开发,所以开
发 LuCI 的配置界面不需要编辑任何的 Html 代码,除非想自己单独去创建网页(View 层),否则我
们基本上只需要修改 Model 层就可以了。
1.2 2. 添加选项 Test
接下来介绍如何在“System”添加 Test 选项卡。
在文件系统目录“/usr/lib/lua/luci/controller/admin”下创建 test.lua 文件,文件内容如下:
[html] view plain copy
1. module("luci.controller.admin.test", package.seeall)
2.
3. function index()
4. entry({"admin", "test"}, alias("admin", "test", "test"), _("Test1"), 30).index = true
5. entry({"admin", "test", "control"}, cbi("admin_test/control"), _("ControlTest"), 1)
6. end
/etc/init.d/uhttpd restart 重启 http 服务之后,刷新界面之后(有时候因为缓存,界面没有及时变化,rm -rf /tmp/luci-*
删除缓存就可以了),界面变成
test.lua 中 entry 表示添加一个新的模块入口,entry 的定义如下,其中后两项都是可以为空:
[html] view plain copy
1. 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”。
1.3 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 文件,添加内容
[html] view plain copy
1. require("luci.sys")
2. require("luci.sys.zoneinfo")
3. require("luci.tools.webadmin")
4. require("luci.fs")
5. require("luci.config")
6.
7. local m, s, o
8.
9. m = Map("test", translate("Test"), translate("This is simple test."))
10. m:chain("luci")
11.
12. s = m:section(TypedSection, "controlboard", translate("Control Board"))
13. s.anonymous = true
14. s.addremove = false
15.
16.
17. s:tab("led", translate("Control LED"))
18. s:tab("beep", translate("Control Beep"))
19. --s:tab("adc", translate("Control Adc"))
20.
21. --
22. -- LED
23. --
24. o = s:taboption("led", ListValue, "lednum", translate("LED NUM:"))
25. o.default = 0
26. o.datatype = "uinteger"
27. o:value(0, translate("LED0"))
28. o:value(1, translate("LED1"))
29. o:value(2, translate("LED2"))
30.
31. o = s:taboption("led", ListValue, "ledstatus", translate("LED STATUS:"))
32. o.default = 1 --off status
33. o.datatype = "uinteger"
34. o:value(0, translate("LED ON"))
35. o:value(1, translate("LED OFF"))
36.
37.
38. --
39. -- BEEP
40. --
41. o = s:taboption("beep", ListValue, "beepstatus", translate("BEEP STATUS:"))
42. o.default = 1 --off status
43. o.datatype = "uinteger"
44. o:value(0, translate("ON"))
45. o:value(1, translate("OFF"))
46.
47. o = s:taboption("beep", Value, "beepfreq", translate("BEEP FREQ:"))
48. o.datatype = "uinteger"
[html] view plain copy
1. <span style="color: rgb(92, 92, 92); font-family: Consolas, monospace; letter-spacing: 0.100000001490116px;
line-height: 1.3;">return m</span><span style="color: rgb(92, 92, 92); font-family: Consolas, monospace; lett
er-spacing: 0.100000001490116px; line-height: 1.3;">return m</span>
该脚本表示读取/etc/config 下的 test 文件,因此我们需要在/etc/config/中添加 test 文件。并在文件
中添加:config controlboard
重启 uhttpd 服务后,刷新后界面为:
版权声明:本文为博主原创文章,未经博主允许不得转载。
2 OpenWRT 之 LuCI 入门开发
2.1.1 LuCI 基础篇
Controller 位于: /usr/lib/lua/luci/controller/ 下——定义模块的入口
Model 位于: /usr/lib/lua/luci/model/cbi/ 下——配置模块实际的代码
第一步:定义模块入口:
eg:
module("luci.controller.控制器名/路径", package.seeall)
function index()
entry(路径, 调用目标, _("显示名称"), 显示顺序)
end
控制器名
/
路径
: 不带路径的控制器名默认存在于/usr/lib/lua/luci/controller/下,否则以
controller/为根目录
entry 表示添加一个新的模块入口,官方给出了 entry 的定义,其中后两项都是可以为空的:
entry(path, target, title=nil, order=nil)
path:如果这样写{“click”, “here”, “now”},那么就可以在浏览器里访问
“http://192.168.x.1/cgi-bin/luci/click/here/now”来访问这个脚本。我们也可以根据需要按如下方式编
写{“admin”, “一级菜单名”, “菜单项名”},系统会自动在对应的菜单中生成菜单项。比如想在“网
络”菜单下创建一个菜单项,那么一级菜单名可以写为“network”。
target:
调用目标分为三种,分别是执行指定方法 Action、访问指定页面 Views 以及调用 CBI Module
� 第一种可以直接调用指定的函数,比如点击菜单项就直接重启路由器等等,比如写为
call(“function_name”),然后在 lua 文件下编写名为 function_name 的函数就可以调用了。
� 第二种可以访问指定的页面,比如写为 template(“myapp/mymodule”)就可以调用
/usr/lib/lua/luci/view/myapp/mymodule.htm 文件了
� 而如果要编写配置页面,那么使用第三种方法无非是最方便的,比如写为
cbi(“myapp/mymodule”)就可以调用/usr/lib/lua/luci/model/cbi/myapp/mymodule.lua 文件了。
title 和 order
module("luci.controller.LuoYeLuCI", package.seeall)
function index()
entry({"admin", "network", "LuoYeconfig"}, cbi("LuoYeCBI"), _("LuoYeTest"),
100)
end
第二步:配置 CBI Module
1.首先要需要映射与存储文件的关系
m = Map("配置文件文件名", "配置页面标题", "配置页面说明")
第一个参数即为配置文件存储的文件名,不包含路径.
第二与第三个参数则是用在来页面上显示的
2.接下来需要创建与配置文件中对应的 Section
Section 分为两种,NamedSection 和 TypedSection,前者根据配置文件中的 Section 名,而后者根
据配置文件中的 Section 类型 http://luci.subsignal.org/trac/wiki/Documentation/CBI
3.创建配置文件
剩余56页未读,继续阅读
资源评论
Just810
- 粉丝: 10
- 资源: 18
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- Highlight Plus v20.0.1
- 基于MIC+NE555光敏电阻的声光控电路Multisim仿真原理图
- python tkinter-08-盒子模型.ev4.rar
- Doozy UI Manager 2023
- 基于matlab实现夜间车牌识别程序(1).rar
- 基于matlab实现无线传感器网络无需测距定位算法matlab源代码 包括apit,dv-hop,amorphous在内的共7个
- 基于python的yolov5实现的旋转目标检测
- 基于matlab实现无线传感器网络 CAB定位仿真程序 这是无线传感器节点定位CAB算法的仿真程序,由matlab完成.rar
- 基于matlab实现图像处理,本程序使用背景差分法对来往车辆进行检测和跟踪.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功