Bootstrap

普通路由器openwrt安装luci下配置各种想要的插件,相关步骤和问题解决办法总结

普通路由器openwrt安装luci下配置各种想要的插件,相关步骤和问题解决办法总结。

在这里插入图片描述

tty228 / luci-app-serverchanGoto GithubPK
View Code? Open in Web Editor NEW
1.1K 27.0 374.0 1.01 MB
A plugin for OpenWRT routers to send various information notifications to a mobile phone via WeChat or Telegram.

License: GNU General Public License v2.0

Makefile1.69% Shell60.84% JavaScript37.47%
Introduction · People · Discuss

可否把推送的负载改成或增加个CPU使用率?

两个L大的固件都增加了CPU使用率这个项目啦!可否把负载改成增加CPU使用率供用户选择?

负载我一直没搞明白是啥,CPU使用率还看明白点啦!

[功能请求]是否可以发布预编译ipk?
简单看了一下,似乎没有受限于硬件架构的功能,完全可以在GitHub上顺便发布预编译版本。
劳烦repo多费一下心直接提供ipk,方便大家使用。

提供一些与未被合并到官方源的OpenWrt组件编译版本发布思路:

luci-app-adguardhome
只提供luci与启动脚本,核心二进制文件由脚本直接从其官网下载。

smartdns
前后端分离,前端luci全平台通用,后端二进制分架构打包。

OpenClash
luci-app.ipk全平台通用,clash核心可以在luci内自动下载安装,也可以单独下载二进制手动拷贝。

lede X86 推送没反应
日志:
Tue Mar 10 12:06:12 2020 daemon.err uhttpd[2010]: Command failed: Not found
Tue Mar 10 12:06:17 2020 daemon.err uhttpd[2010]: cat: can’t open ‘/sys/class/thermal/thermal_zone*/temp’: No such file or directory
Tue Mar 10 12:06:18 2020 daemon.err uhttpd[2010]: sh: cbi.apply: not found
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: curl: no URL specified!
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: curl: try ‘curl --help’ for more information
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: BusyBox v1.30.0 () multi-call binary.
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]:
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: Usage: grep [-HhnlLoqvsriwFE] [-m N] [-A/B/C N] PATTERN/-e PATTERN…/-f FILE [FILE]…
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]:
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: Search for PATTERN in FILEs (or stdin)
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]:
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: -H Add ‘filename:’ prefix
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: -h Do not add ‘filename:’ prefix
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: -n Add ‘line_no:’ prefix
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: -l Show only names of files that match
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: -L Show only names of files that don’t match
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: -c Show only count of matching lines
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: -o Show only the matching part of line
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: -q Quiet. Return 0 if PATTERN is found, 1 otherwise
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: -v Select non-matching lines
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: -s Suppress open and read errors
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: -r Recurse
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: -i Ignore case
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: -w Match whole words only
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: -x Match whole lines only
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: -F PATTERN is a literal (not regexp)
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: -E PATTERN is an extended regexp
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: -m N Match up to N times per file
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: -A N Print N lines of trailing context
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: -B N Print N lines of leading context
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: -C N Same as ‘-A N -B N’
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: -e PTRN Pattern to match
Tue Mar 10 12:06:23 2020 daemon.err uhttpd[2010]: -f FILE Read pattern from file
小白一枚,请见谅

请教温度sensors命令,如何集成?
请教如何设置脚本,读取温度?
命令输出结果如下:
root@OpenWrt:~# sensors
coretemp-isa-0000
Adapter: ISA adapter
Core 0: +33.0°C (crit = +90.0°C)

要怎么改wan检测啊 一直提示网络不通 但是实际网络是有的
【!!!!】当前网络不通!停止检测!

要怎么改wan口啊 一直提示网络不通 但是实际网络是有的

编译完没有设置项,是什么原因?

在这里插入图片描述

支持 PandoraBox 固件吗
固件版本 PandoraBox R9.12.24 By Lean / LuCI Master (git-19.357.21022-51cd4c9)

上统计传下载的流量
大佬路由器的上传下载的流量能写进去吗?或分享下这脚本的写法!谢谢!

最新更新的版本无法推送系统信息
在LEAN和原版OPENWRT上都测试过了
较老的版本luci-app-serverchan_1.0-43_all可以正常推送
最新的luci-app-serverchan_1.27-42 推送没反应,手动推送也一样,只有变更IP的时候能正常推送下IP信息
依赖 iputils-arping + curl 命令这两个组件也都编译的有
环境是X64软路由
在最新编译的版本上把新版serverchan删除,然后IPK安装luci-app-serverchan_1.0-43_all,也可以正常推送
编译版本,和手动IPK安装结果都是一样的

跨日开了免打扰,定时推送没被阻止
免开始打扰时间设置成22点,免打扰结束时间设置成8点,结果还是推送了。
刚看到更新了1.30,看了下,貌似修复了?

另外,日志是否可以在时间前面增加日期,日志太多了,不知道是哪一天的了。

/etc/rc.common: line 152: /usr/bin/serverchan/serverchan: not found
Firmware Version OpenWrt 18.06.4 r7808-ef686b7292 / LuCI openwrt-18.06 branch (git-19.170.32094-4d6d8bc)

opkg安装错误:
Installing luci-app-serverchan (1.22-42) to root…
Configuring luci-app-serverchan.
/etc/rc.common: line 152: /usr/bin/serverchan/serverchan: not found

安装后界面内勾选“启用”并应用保存,仍然提示“serverchan NOT RUNNING”
手动发送无效
界面客户端日志为空

多拨后无法检测外网IP,导致不停推送路由器重启通知
我提个建议呗。就拿我的网络环境来说,我是X86,设置双拨后,出现虚拟wan口,分别是vwan1和vwan2,双拨后的wan口是禁用的, 就没有IP地址,所以检测不到IP就会不停的推送路由器重启的通知。可不可以增加个选项,手动选择外网ip检测来源,比如eth0、eth1、eth2。这样不管是否多拨,只要自己设置好来源接口,都可以完美应对。
另外一个问题,就是启动不了。也是看了你的issues后,改了那俩文件的权限,就正常了。

X86 温度告警日志显示推送,实际没有收到推送
手动点推送又可以收到

另外关闭LUCI,不会清除cron任务,日志也不会重置

多个设备使用插件推送消息的分区问题
环境描述:多个路由器使用同一个SCKEY推送消息
问题描述:推送的消息会无法区分来源于哪个设备

提议解决方式:增加可选设置,在推送标题中标识推送来源设备的名称

疯狂发送设备登陆信息
疯狂爆设备登陆信息,且每次都是同一些设备。求作者大大快些修复!使用前以对两个serverchan文件给予a+x权限,可以启用,但功能异常。以下是日志:平台x86_64

00:21:20 【清理】日志超出上限,删除前 100 条
00:21:21 【外网IP】正在检测外网IP变化
00:21:21 IP 无变化,当前 ip 为 x.x.x.x
00:21:21 192.168.0.139 24:69:68:5e:c9:e4 无设备名,尝试重新读取
00:21:21 设备 DESKTOP-913I6CS 192.168.0.101 依然坚挺
00:21:21 192.168.0.154 04:cf:8c:50:a9:f6 无设备名,尝试重新读取
00:21:21 192.168.0.2 90:e2:ba:9b:22:52 无设备名,尝试重新读取
00:21:21 设备 debian 192.168.0.165 依然坚挺
00:21:21 设备 未知设备 192.168.0.2 依然坚挺
00:21:21 设备 未知设备 192.168.0.154 依然坚挺
00:21:21 设备 TL-WR842N 192.168.0.104 依然坚挺
00:21:21 设备 Hisense_F26 192.168.0.144 依然坚挺
00:21:21 设备 未知设备 192.168.0.139 依然坚挺
00:21:21 没有检测到设备离线
00:21:21 【等待】我累了,60 秒后再回来
00:22:21 【外网IP】正在检测外网IP变化
00:22:21 IP 无变化,当前 ip 为 x.x.x.x
00:22:21 192.168.0.139 24:69:68:5e:c9:e4 无设备名,尝试重新读取
00:22:21 192.168.0.154 04:cf:8c:50:a9:f6 无设备名,尝试重新读取
00:22:21 192.168.0.2 90:e2:ba:9b:22:52 无设备名,尝试重新读取
00:22:21 设备 DESKTOP-913I6CS 192.168.0.101 依然坚挺
00:22:21 设备 TL-WR842N 192.168.0.104 依然坚挺
00:22:21 设备 debian 192.168.0.165 依然坚挺
00:22:21 设备 未知设备 192.168.0.2 依然坚挺
00:22:21 设备 Hisense_F26 192.168.0.144 依然坚挺
00:22:21 设备 未知设备 192.168.0.154 依然坚挺
00:22:22 设备 未知设备 192.168.0.139 依然坚挺
00:22:22 没有检测到设备离线
00:22:22 【等待】我累了,60 秒后再回来
00:23:22 【外网IP】正在检测外网IP变化
00:23:22 IP 无变化,当前 ip 为 x.x.x.x
00:23:23 192.168.0.139 24:69:68:5e:c9:e4 无设备名,尝试重新读取
00:23:23 192.168.0.154 04:cf:8c:50:a9:f6 无设备名,尝试重新读取
00:23:23 设备 DESKTOP-913I6CS 192.168.0.101 依然坚挺
00:23:23 192.168.0.2 90:e2:ba:9b:22:52 无设备名,尝试重新读取
00:23:23 设备 debian 192.168.0.165 依然坚挺
00:23:23 设备 Hisense_F26 192.168.0.144 依然坚挺
00:23:23 设备 TL-WR842N 192.168.0.104 依然坚挺
00:23:23 设备 未知设备 192.168.0.2 依然坚挺
00:23:23 设备 未知设备 192.168.0.154 依然坚挺
00:23:23 设备 未知设备 192.168.0.139 依然坚挺
00:23:23 没有检测到设备离线

以此无限循环

1.33-42安装提示:uci:entry not found
如题。。
X64内核版本4.19.101

设备列表问题
大佬 你的那个 设备列表 是通过arp表来获取的把 这样 我的网络环境下 直接把 eth0的也算进去了
所以 客户端 会莫名其妙多一个
可以
IPLIST=$( cat /proc/net/arp | grep “0x2” | awk '{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 1}̲' | grep -v "^" | sort -u )
修改为
IPLIST=$( cat /proc/net/arp | grep br-lan |grep “0x2” | awk '{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 1}̲' | grep -v "^" | sort -u )

检测ip变更有bug
检测ip变更时候 获取不到上次检测的ip 然后就一分钟发送一次ip变更

看日志 试了接口获取url获取能获取到ip 但好像不记录 下次检测变更 显示上次ip是空白的 所以重复发ip变更实际是没变

openwrt cc启动不了
我 手动启动 提示 语法错误
把/bin/sh 改成 /bin/bash就好了

为什么微信上推送时都是显示未知设备

iOS或所有苹果设备下线通知不正常
检查设备在线情况的ping和arping对苹果设备(实测iPhone iOS12,大概率全部类似)无效,手机锁屏后大约2秒就ping不通了,也就导致出现设备离线误判。实测亮屏或者锁屏有后台数据运行时可ping通。

请问K2P可以用么?
下载了大侠编译的luci-app-serverchan_1.35-5_all.ipk,请问K2P A1版本刷的openwrt上可以用么?

在MTK7621固件中无法启动

lean源码集成server酱编译,uhttpd[1726]: uci: Entry not found
近期利用lean大雕r20.2.15源码编译了k3固件,恩山贴:https://www.right.com.cn/forum/thread-2663715-1-1.html
添加了您的server酱,昨天测试推送什么的都正常,但是日志里不停的刷屏uhttpd[1726]: uci: Entry not found。把server酱关掉就不再报错。看了之前有人推的issue,
uci show serverchan
uci get serverchan.@ServerChan[0].sckey
uci get serverchan.serverchan.sckey
这三个命令都能正常输出。

在这里插入图片描述
在这里插入图片描述

Makefile中的依赖问题
+coreutils +coreutils-nohup
这两个不是必需的,当初改的/etc/init.d/serverchan有nohup命令才加的,现在已经没有nohup命令了,可以删了。
这两个依赖已知adbyby plus含有,所以装了ad+的没有报错。

CPUD2550设备温度一直26℃
如题,D2550编译X86_64,CPU温度始终是26℃

1.33-42版本第一次保存应用不能运行,需第二次点击保存应用,1.28-42版本正常!

在这里插入图片描述

不支持openwrt 19.07

硬件为K3

定时推送可否增加ipv6地址的推送

X86_64,lean最新源码编译,运行不了

最新版 设置了mac免打扰 可还是会提醒

多WAN下的定时推送,IPV6地址检测不是按默认路由或者选择的接口出去的
我目前是一条电信宽带(pppoe-wan1)和4G(wwan0)两条线路按故障转移策略接入的互联网的,两条线路都有IPv4和IPv6地址及IPv6-PD前缀。

在这里插入图片描述

分流规则设定的是优先使用电信宽带,在serverchan插件里面也是选择从电信宽带接口(pppoe-wan1)获取IPv4和IPv6地址的。

在这里插入图片描述

如图所示问题在于:

定时推送的消息,无法显示IPv4接口(pppoe-wan1)地址,只会显示IPv4外网地址;
定时推送的消息,IPv6接口地址(pppoe-wan1)能正确显示,但是IPv6外网地址则会从ifconfig显示的第一个wan接口(我这里就是4G的wwan0接口)的IPv6地址,由于接口都不同了,所以自然会提示我的IPv6地址不是公网地址。

在这里插入图片描述

版本1.40-5 路由器x64 添加的备注显示unknown.之前版本修复了 现在又有了

系统日志报错,功能正常
daemon.err uhttpd[2253]: /usr/bin/serverchan/serverchan: line 961: can’t create : nonexistent directory
Lean 固件,X64系统

1.35-1.42版本均会出现wifi频繁提示连接断开
机型iphone8 连接5g信号频繁提示连接断开
在etc config wireless 里面
wifi-iface下加
option wpa_group_rekey ‘0’
option wpa_pair_rekey ‘0’
option wpa_master_rekey ‘0’
设置这个之后重启还是一样的,没有变化,但另外的安卓设备不设置好像都不提示,有点疑惑

不能启动问题,源码里就把那两个文件改了权限就没问题
亲测。拉完源码就直接在源码里把下面两个文件改了权限编译出来就没问题。
/etc/init.d/serverchan
/usr/bin/serverchan/serverchan

安装报错
安装luci-app-serverchan_1.35-5_all.ipk报错,提示如下:
root@OpenWrt:/tmp# opkg install luci-app-serverchan_1.35-5_all.ipk
Installing luci-app-serverchan (1.35-5) to root…
Collected errors:

satisfy_dependencies_for: Cannot satisfy the following dependencies for luci-app-serverchan:
iputils-arping
opkg_install_cmd: Cannot install package luci-app-serverchan.
root@OpenWrt:/tmp#

固件版本 OpenWrt 19.07-SNAPSHOT / LuCI 18-Lienol (git-20.050.67398-912fbd7)
内核版本 4.14.169

添加 依赖 bash
脚本的 是 #!/bin/bash 把bash也添加进依赖。
原版op默认 是没有安装bash的

更新后重启路由器插件不自启,白村配置要点两下确定才能起动
X86,集成进Lean的源码里编译的固件。这两天更新后发现两个问题:
1、重启路由器插件不自启,再进去保存应用一次才能启动。
2、刚开始配置好后保存应用要点两下才能起动。
这两天之前的是正常的,希望能修复

最新的提交是画蛇添足
没必要为了解决一个不存在的问题来破坏包的目录结构, 然后重新造轮子来实现官方已有的机制.

如果只是为了保证脚本文件有运行权限, 只需要在install变量的最后添加:

chmod 755 $(1)/usr/bin/serverchan
必须要说明的是, 这段代码要解决问题并不存在.

如果编译前的文件权限正确且编译环境没有被污染, 就不会出现权限问题.
如果在测试发现没有运行权限, 但是文件源码目录下的文件权限正常, 那么就应该检查编译缓存下的文件权限信息:

ls -l ./build_dir/…/luci-app-zerotier/root/usr/bin/
这里的文件和最终编译进固件的文件完全相同, 如果确实没有运行权限, 说明需要make clean.

源码编译后无执行权限,重新写了一个赋予执行权限的makefile

其他设备温度获取具体怎么改呢?

k3固件里的高级设置插件

路由器重启不自启,保存配置要两次以上才能启动

跟koolshare软件中心的severchan是一个项目吗?
如果不是,可以参考一下啊,ks上的信息更详细更方便。。希望能借鉴

serverchan 总计流量不显示
这是什么bug,还是说需要什么特定的依赖啊

在这里插入图片描述

卡成狗,LUCI关闭了,进程都没杀

x86_64平台系统日志一直打印错误消息:daemon.err uhttpd[2590]: uci: Entry not found
一秒钟打印好几条,虽然不影响使用但是看着很不舒服,关掉插件之后就不打印了。

Thu Jan 2 18:02:13 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:02:13 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:02:13 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:02:13 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:02:13 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:02:13 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:02:13 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:02:13 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:02:13 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:02:13 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:02:13 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:02:13 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:02:13 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:02:13 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:03:14 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:03:14 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:03:14 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:03:14 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:03:14 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:03:14 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:03:14 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:03:14 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:03:14 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:03:14 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:03:14 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:03:14 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:03:14 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:03:14 2020 daemon.err uhttpd[2590]: uci: Entry not found
Thu Jan 2 18:03:14 2020 daemon.err uhttpd[2590]: uci: Entry not found

貌似脚本有问题
接入设备中有无名设备,系统日志如下重复:

Mon Jul 8 21:53:05 2019 daemon.err uhttpd[1620]: cut: /sys/class/thermal/thermal_zone0/temp: No such file or directory
Mon Jul 8 21:53:05 2019 daemon.err uhttpd[1620]: sh: out of range

然后server酱中也有重复日志:

xxxxxxxxxxx无设备名,尝试重新读取

应该是无设备名有问题

安装到潘多拉能启动,但是无法推送


装openclash后发现路由器后台没有openclash选项,查看openwrt官网需要配置luci
那就手动配置练习,熟悉一下luci:

输入tree命令观察luci文件目录结构

tree  /usr/lib/lua/luci
 

目录有点多,不过核心就是三个目录,下面用绿色显示

.
├── cacheloader.lua
├── cbi
│ └── datatypes.lua
├── cbi.lua
├── ccache.lua
├── config.lua
├── ‘controller’
│ ├── admin
│ │ ├── index.lua
│ │ ├── network.lua
│ │ └── uci.lua
│ ├── firewall.lua
│ ├── myapp
│ │ └── mymodule.lua
│ └── opkg.lua
├── debug.lua
├── dispatcher.lua
├── http.lua
├── i18n.lua
├── ip.so
├── jsonc.so
├── ltn12.lua
├──’model’
│ ├── ‘cbi’
│ │ ├── admin_system
│ │ │ └── backupfiles.lua
│ │ └── myapp-mymodule
│ │ └── netifaces.lua
│ ├── firewall.lua
│ ├── myapp-mymodule
│ │ ├── gateway_sn.lua
│ │ └── netifaces.lua
│ ├── network
│ │ ├── proto_3g.lua
│ │ ├── proto_4x6.lua
│ │ ├── proto_6x4.lua
│ │ ├── proto_dhcpv6.lua
│ │ ├── proto_hnet.lua
│ │ ├── proto_ipip.lua
│ │ ├── proto_modemmanager.lua
│ │ ├── proto_ncm.lua
│ │ ├── proto_openconnect.lua
│ │ ├── proto_ppp.lua
│ │ ├── proto_pppossh.lua
│ │ ├── proto_qmi.lua
│ │ ├── proto_relay.lua
│ │ ├── proto_vpnc.lua
│ │ └── proto_wireguard.lua
│ ├── network.lua
│ └── uci.lua
├── sgi
│ ├── cgi.lua
│ └── uhttpd.lua
├── store.lua
├── sys
│ ├── zoneinfo
│ │ ├── tzdata.lua
│ │ └── tzoffset.lua
│ └── zoneinfo.lua
├── sys.lua
├── template
│ └── parser.so
├── template.lua
├── tools
│ └── webadmin.lua
├── util.lua
├── version.lua
└── ‘view’
├── admin_status
│ └── index.htm
├── cbi
│ ├── browser.htm
│ ├── button.htm
│ ├── cell_valuefooter.htm
│ ├── cell_valueheader.htm
│ ├── compound.htm
│ ├── delegator.htm
│ ├── dropdown.htm
│ ├── dvalue.htm
│ ├── dynlist.htm
│ ├── error.htm
│ ├── firewall_zonelist.htm
│ ├── footer.htm
│ ├── full_valuefooter.htm
│ ├── full_valueheader.htm
│ ├── fvalue.htm
│ ├── header.htm
│ ├── ipaddr.htm
│ ├── lvalue.htm
│ ├── map.htm
│ ├── mvalue.htm
│ ├── network_ifacelist.htm
│ ├── network_netinfo.htm
│ ├── network_netlist.htm
│ ├── nsection.htm
│ ├── nullsection.htm
│ ├── simpleform.htm
│ ├── tabcontainer.htm
│ ├── tblsection.htm
│ ├── tsection.htm
│ ├── tvalue.htm
│ ├── ucisection.htm
│ ├── upload.htm
│ ├── value.htm
│ ├── valuefooter.htm
│ ├── valueheader.htm
│ └── wireless_modefreq.htm
├── csrftoken.htm
├── empty_node_placeholder.htm
├── error404.htm
├── error500.htm
├── footer.htm
├── header.htm
├── helloworld.htm
├── indexer.htm
├── myapp-mymodule
│ └── helloworld.htm
├── opkg.htm
├── sysauth.htm
├── themes
│ └── bootstrap
│ ├── footer.htm
│ └── header.htm
└── view.htm

luci对应MVP模型
对应上面三个目录

在这里插入图片描述

在上面controller文件下新建文件夹myapp及mymoudle.lua

cd  /usr/lib/lua/luci/controller
mkdir -p myapp
vi mymoudle.lua
 

在创建的文件中写下lua脚本

function index()
        entry({"admin","vpn","openclash"},call("action_try"),"OpenClash",10).dependent=false
        entry({"admin","vpn","template"},template("myapp-mymodule/helloworld"),"OpenClashT",20).dependent=false
        entry({"admin", "vpn", "interfaces"}, cbi("myapp-mymodule/netifaces"), "Network interfaces", 30).dependent=false

end

function action_try()
        luci.http.prepare_content("text/plain")
        luci.http.write("just for test")
        luci.http.write(luci.dispatcher.build_url("ui/"))
        luci.http.redirect(luci.dispatcher.build_url("192.168.1.1:9999/ui/"))
end
 

这个时候路由器后台还不会显示,reboot后

reboot
 

登陆后台发现多出了VPN相关子选项:

在这里插入图片描述

基本上每次更新view、control、model,注意清理luci-modulecache

rm -rf /tmp/luci-modulecache/
 

官方文档给出entry解释:

entry(path, target, title=nil, order=nil)
	path是描述调度树中位置的表:例如,{"foo", "bar", "baz"}将在 中插入您的节点的路径foo.bar.baz。
	target描述当用户请求节点时将采取的操作。有几个预定义的,其中最重要的 3 个(调用、模板、cbi) 
	title 定义用户在菜单中可见的标题(可选)
	order 是一个数字,同级别的节点将在菜单中排序(可选)
 

上面mymoudle.lua 中即entry对应target三个预定义
call即是调用脚本内函数
template是调用view文件下自定义html模板下面将创建
cbi系统配置可以直接在后台配相关text,radio等图形化设置。

下面解释entry三项:

第一项:

 entry({"admin","vpn","openclash"},call("action_try"),"OpenClash",10).dependent=false
 

很简单就是调用脚本里面action_try函数显示效果为:

第二项:也是配置openclash项目,其实第一项也可以直接配置。

entry({"admin","vpn","template"},template("myapp-mymodule/helloworld"),"OpenClashT",20).dependent=false
 

需要在 /usr/lib/lua/luci/view建立相关html模板 (目录和文件随便建保证和entry中对应即可)

cd  /usr/lib/lua/luci/view
mkdir -p mymodule && cd mymodule
vi helloworld.htm
 

创建htm模板

<%+header%>
<h1><%: CLASH CONFIG %></h1>
<a href="http://192.168.1.1:9999/ui/"><%: OpenClash %> </a>
<%+footer%>
 

href中填入openclash配置好的地址即可
删除一下cache:

rm -rf /tmp/luci-modulecache/
 

路由器后台刷新观察:

在这里插入图片描述

在这里插入图片描述

点击后跳转到clash配置界面

在这里插入图片描述

成功配置了openclash

第三项:

entry({"admin", "vpn", "interfaces"}, cbi("myapp-mymodule/netifaces"), "Network interfaces", 30).dependent=false
 

配置cbi比较复杂,根据官方教程:
进入model目录创建相关cgi配置

cd  /usr/lib/lua/luci//model
mkdir -p myapp-mymodule && cd myapp-mymodule
vi netifaces.lua
 

文件和目录都可以随便创建和entry对应即可
lua脚本:

m = Map("network", "Network") -- We want to edit the uci config file /etc/config/network

s = m:section(TypedSection, "interface", "Interfaces") -- Especially the "interface"-sections
s.addremove = true -- Allow the user to create and remove the interfaces
function s:filter(value)
   return value ~= "loopback" and value -- Don't touch loopback
end
s:depends("proto", "static") -- Only show those with "static"
s:depends("proto", "dhcp") -- or "dhcp" as protocol and leave PPPoE and PPTP alone

p = s:option(ListValue, "proto", "Protocol") -- Creates an element list (select box)
p:value("static", "static") -- Key and value pairs
p:value("dhcp", "DHCP")
p.default = "static"

s:option(Value, "ifname", "interface", "the physical interface to be used") -- This will give a simple textbox

s:option(Value, "ipaddr", translate("ip", "IP Address")) -- Yes, this is an i18n function ;-)

s:option(Value, "netmask", "Netmask"):depends("proto", "static") -- You may remember this "depends" function from above

mtu = s:option(Value, "mtu", "MTU")
mtu.optional = true -- This one is very optional

dns = s:option(Value, "dns", "DNS-Server")
dns:depends("proto", "static")
dns.optional = true
function dns:validate(value) -- Now, that's nifty, eh?
    return value:match("[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+") -- Returns nil if it doesn't match otherwise returns match
end

gw = s:option(Value, "gateway", "Gateway")
gw:depends("proto", "static")
gw.rmempty = true -- Remove entry if it is empty

return m -- Returns the map

输入完脚本后删除一下cache:

rm -rf /tmp/luci-modulecache/
 

点击NetWork interfaces

在这里插入图片描述

报错:

/usr/lib/lua/luci/dispatcher.lua:938: module 'luci.cbi' not found:
no field package.preload['luci.cbi']
no file './luci/cbi.lua'
no file '/usr/share/lua/luci/cbi.lua'
no file '/usr/share/lua/luci/cbi/init.lua'
no file '/usr/lib/lua/luci/cbi.lua'
no file '/usr/lib/lua/luci/cbi/init.lua'
no file './luci/cbi.so'
no file '/usr/lib/lua/luci/cbi.so'
no file '/usr/lib/lua/loadall.so'
no file './luci.so'
no file '/usr/lib/lua/luci.so'
no file '/usr/lib/lua/loadall.so'
stack traceback:
 

bash下安装相关库

opkg update
opkg install luci luci-base luci-compat
 

路由器后台刷新:

在这里插入图片描述

;