谷动谷力

 找回密码
 立即注册
查看: 2766|回复: 1
打印 上一主题 下一主题
收起左侧

Openwrt Luci界面开发

[复制链接]
跳转到指定楼层
楼主
发表于 2022-7-28 18:52:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
Openwrt Luci界面开发

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

准备工作

编译源码前须运行脚本安装luci相关库
./scripts/feeds update luci
./scripts/feeds install -a -p luci
make menuconfig 开记luci
LuCI  --->
        1. Collections  --->
                <*> luci................... LuCI interface with Uhttpd as Webserver (default)

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

2. 添加选项Test
接下来介绍如何在“System”添加Test选项卡。
在文件系统目录“/usr/lib/lua/luci/controller/admin”下创建test.lua文件,文件内容如下:
  1. module("luci.controller.admin.test", package.seeall)
  2. function index()  
  3.     entry({"admin", "test"}, alias("admin", "test", "test"), _("Test1"), 30).index = true  
  4.     entry({"admin", "test", "control"}, cbi("admin_test/control"), _("ControlTest"), 1)  
  5. end
复制代码

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

test.lua中 entry表示添加一个新的模块入口,entry的定义如下,其中后两项都是可以为空:
  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”。
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文件,添加内容
  1. require("luci.sys")
  2. require("luci.sys.zoneinfo")
  3. require("luci.tools.webadmin")
  4. require("luci.fs")
  5. require("luci.config")

  6. local m, s, o

  7. m = Map("test", translate("Test"), translate("This is simple test."))
  8. m:chain("luci")

  9. s = m:section(TypedSection, "controlboard", translate("Control Board"))
  10. s.anonymous = true
  11. s.addremove = false


  12. s:tab("led", translate("Control LED"))
  13. s:tab("beep", translate("Control Beep"))
  14. --s:tab("adc", translate("Control Adc"))

  15. --
  16. -- LED
  17. --
  18. o = s:taboption("led", ListValue, "lednum", translate("LED NUM:"))
  19. o.default = 0
  20. o.datatype = "uinteger"
  21. o:value(0, translate("LED0"))
  22. o:value(1, translate("LED1"))
  23. o:value(2, translate("LED2"))

  24. o = s:taboption("led", ListValue, "ledstatus", translate("LED STATUS:"))
  25. o.default = 1    --off status
  26. o.datatype = "uinteger"
  27. o:value(0, translate("LED ON"))
  28. o:value(1, translate("LED OFF"))


  29. --
  30. -- BEEP
  31. --
  32. o = s:taboption("beep", ListValue, "beepstatus", translate("BEEP STATUS:"))
  33. o.default = 1    --off status
  34. o.datatype = "uinteger"
  35. o:value(0, translate("ON"))
  36. o:value(1, translate("OFF"))

  37. o = s:taboption("beep", Value, "beepfreq", translate("BEEP FREQ:"))
  38. o.datatype = "uinteger"
复制代码

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

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



+10
回复

使用道具 举报

沙发
 楼主| 发表于 2022-7-28 18:53:06 | 只看该作者
OpenWRT 安装 LUCI

每次ssh登陆OpenWRT安装新软件时,都必须更新opkg

opkg update

安装LUCI
opkg install luci
安装luci中文语言包, 不同OpenWRT版本中语言包的名称并不相同,比如15.05.1版本中。 进入 https://downloads.openwrt.org/ch ... nand/packages/luci/ 查找语言包的ipk 为 'luci-i18n-ahcp-zh-cngit-16.018.33482-3201903-1_all.ipk' ,所以可以通过以下命令安装:

opkg install luci-i18n-ahcp-zh-cn
其他版本类似。 opkg安装源的url位置可以在 /etc/opkg.conf 中看到。

启动LUCI
/etc/init.d/uhttpd enable   将uhttpd加入开机启动
/etc/init.d/uhttpd start    启动uhttpd服务
此时既可以在浏览器中进行路由器配置。

打开 http://192.168.1.1 试下吧

配置网络
在浏览器中输入 http://192.168.1.1,点击浏览。将会出现如下界面:

OpenWRT管理页面-wizju.com

用户名:root

密码:上一节#配置root密码 所设置的密码

点击登录,如果密码输入正确则进入管理后台。如下图所示

OpenWRT管理后台首页

开始网络配置,如上图所示,请从上方导航条中选择 【网络】->【接口】,进入接口设置页面。

OpenWRT LuCI接口设置

如上图,因为我们已经通过命令行设置了网络连接,所以接口可以看到有LAN、WAN以及WAN6。

LAN是设置局域网内的相关属性,可以设置内网的IP,桥接的端口。比如我们默认使用192.168.1.1访问,可以修改为172.168.1.1,生效后内网的ip就会变掉。LAN口的协议为【静态地址】

OpenWRT Luci Lan口设定

OpenWRT Luci Lan口设定

WAN就是设置联网的主要设定,(当然lan、wan这些名称都是可以修改的。为了表示清晰还是不要修改的好)。WAN口的协议为根据接入方式的不同一般为【PPPoe(拨号上网方式)】或【静态地址(已经分配了静态地址)】或【DHCP客户端】这几种。上一节中命令行配置为拨号上网方式.显示如下

OpenWRT LuCI WAN口配置

简单来说,LuCI的配合方式同一般路由器的web管理页面的网络配置功能类似。如果经常配置路由器上网的话,LuCI的配置上手也很快。

参考:
https://wiki.openwrt.org/doc/howto/luci.secure

+10
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-12-28 00:41 , Processed in 0.090866 second(s), 41 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表