OpenWRT 19.06.7 最新官方固件添加CPU频率,温度,接口速率,磁盘使用信息

跳转到指定楼层

1#

 发表于 2021-1-24 21:45 | 只看该作者 |只看大图 回帖奖励
本帖最后由 a798047000 于 2021-2-1 13:10 编辑

修改 /usr/libexec/rpcd/luci 添加如下代码

  1. getCoreInfo = {
  2.         call = function()
  3.             local sys = require “luci.sys”
  4.             local rv = {}
  5.             local freqs = string.split(string.trim(sys.exec(“cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq”)),”\n”)
  6.             local temps = string.split(string.trim(sys.exec(“sensors | grep ‘Core’ | cut -c10-24″)),”\n”)
  7.             local i
  8.             for i = 1, #freqs do
  9.                 local freq = string.trim(freqs[i])
  10.                 local temp = string.trim(temps[i])
  11.                 rv[#rv + 1] = {
  12.                     core = “Core ” .. i,
  13.                     freq = string.format(“%.2f”, freq / 1000) .. ” MHz”,
  14.                     temp = temp
  15.                 }
  16.             end
  17.             return {coreinfo = rv}
  18.         end
  19.     },
  20.     getDiskInfo = {
  21.         call = function()
  22.             local sys = require “luci.sys”
  23.             local rv = {}
  24.             local lines = string.split(string.trim(sys.exec(“/bin/df -h | sed ‘s/\\s\\+/ /g’ | uniq”)),”\n”)
  25.             local i
  26.             for i = 2, #lines do
  27.                 local tokens = string.split(lines[i], ” “)
  28.                 local block = string.trim(tokens[1])
  29.                 — ignore block not start with /
  30.                 if (string.sub(block, 1, 1) == “/”) then
  31.                     rv[#rv + 1] = {
  32.                         block = block,
  33.                         size = string.trim(tokens[2]),
  34.                         used = string.trim(tokens[3]),
  35.                         available = string.trim(tokens[4]),
  36.                         used_percent = string.trim(tokens[5]),
  37.                         mounte_point = string.trim(tokens[6])
  38.                     }
  39.                 end
  40.             end
  41.             return {diskinfo = rv}
  42.         end
  43.     },
  44.     getETHInfo = {
  45.         call = function()
  46.             local sys = require “luci.sys”
  47.             local rv = {}
  48.             local ethinfo = sys.exec(“/usr/bin/ethinfo”)
  49.             local lines = string.split(string.trim(ethinfo), “\n”)
  50.             local i
  51.             for i = 1, #lines do
  52.                 local line = string.trim(lines[i])
  53.                 if line == “” then
  54.                 else
  55.                     local tokens
  56.                     tokens = string.split(line, ” “)
  57.                     rv[#rv + 1] = {
  58.                         name = tokens[1],
  59.                         status = tokens[2],
  60.                         speed = tokens[3],
  61.                         duplex = tokens[4]
  62.                     }
  63.                 end
  64.             end
  65.             return {ethinfo = rv}
  66.         end
  67.     }

复制代码


安装 lm-sensors 执行命令

  1. opkg update
  2. opkg install lm-sensors

复制代码

添加文件 /usr/bin/ethinfo 写入

  1. #!/bin/sh
  2. a=$(ip address | grep ^[0-9] | awk -F: ‘{print $2}’ | sed “s/ //g” | grep ‘^[e]’ | grep -v “@” | grep -v “\.”)
  3. b=$(echo “$a” | wc -l)
  4. for i in $(seq 1 $b)
  5. do
  6.         c=$(echo “$a” | sed -n ${i}p)
  7.         d=$(ethtool $c)
  8.         e=$(echo “$d” | grep “Link detected” | awk -F: ‘{printf $2}’ | sed ‘s/^[ \t]*//g’)
  9.         f=$(echo “$d” | grep “Speed” | awk -F: ‘{printf $2}’ | sed ‘s/^[ \t]*//g’ | tr -d “Unknown!”)
  10.         [ -z “$f” ] && f=”-“
  11.         g=$(echo “$d” | grep “Duplex” | awk -F: ‘{printf $2}’ | sed ‘s/^[ \t]*//g’)
  12.         [ “$g” != “Full” -a “$g” != “Half” ] && g=”-“
  13.         echo “$c $e $f $g”
  14. done

复制代码

并给执行权限,执行

  1. chmod 755 /usr/bin/ethinfo

复制代码

修改 /usr/share/rpcd/acl.d/luci-base.json 找到

  1. “luci”: [ “getConntrackList”, “getInitList”, “getLocaltime”, “getProcessList”, “getRealtimeStats”, “getTimezones”, “getLEDs”, “getUSBDevices”, “getSwconfigFeatures”, “getSwconfigPortState”, “getBlockDevices”, “getMountPoints” ],

复制代码

添加 “getCoreInfo”, “getETHInfo”, “getDiskInfo” 改完后是这样的

  1. “luci”: [ “getConntrackList”, “getInitList”, “getLocaltime”, “getProcessList”, “getRealtimeStats”, “getTimezones”, “getLEDs”, “getUSBDevices”, “getSwconfigFeatures”, “getSwconfigPortState”, “getBlockDevices”, “getMountPoints”, “getCoreInfo”, “getETHInfo”, “getDiskInfo” ],

复制代码

然后将压缩包内的3个文件放入 /www/luci-static/resources/view/status/include/

游客,如果您要查看本帖隐藏内容请回复

最后别忘了重启 rpcd 和 uhttpd (或nginx,如果你用nginx替代了uhttpd的话) 服务

  1. service rpcd restart
  2. service uhttpd restart

复制代码

最终效果如图

QQ20210124-214454@2x.png (251.6 KB, 下载次数: 0)

下载附件  保存到相册

2021-1-24 21:45 上传


以上方案是直接修改系统文件实现的,没有改源码重新编译,如果想要在源码内修改,可以找到源码下相应的路径和文件,修改即可

由于我这里是直接修改系统文件的,因此没有国际化(翻译),中文文本是直接以unicode编码写到js文件里的

如果需要加入源码编译,建议将对应文本改为英文,然后在po文件内添加相应的翻译文本即可
此帖部分代码来自于 https://www.right.com.cn/forum/thread-1358471-1-1.html  感谢!

多说一句,如果更新了luci-base包,可能会导致修改失效,这主要是因为更新的包覆盖了修改后的文件,这时一般只需要重新在rpc中添加lua方法,然后再json中注册,重启rpcd,就能重新work。如果不行,那就对照教程完整的再来一次吧。