使用HomeBridge监测LEDE/OpenWrt路由器温度

HomeBridge对iOS用户来说是个非常实用的工具,它可以把几乎任何不支持HomeKit的智能硬件桥接到HomeKit上。

LEDE是著名开源路由器系统项目OpenWrt的继任者。它继承了OpenWrt极高的自由度和海量的插件,可以轻松实现广告过滤、PT挂种、Samba共享等强大且实用的功能。同时,它也带来了很多问题,最麻烦的就是发热。随便运行几个插件就能让温度稳在80℃以上,在夏天尤其危险。温度过高轻则导致路由器重启,重则烧坏芯片,所以随时了解路由器温度显得十分重要。

对于iOS用户来说,没有什么监测工具比HomeKit更方便的了。所以很容易想到用HomeBridge把路由器接入HomeKit中。接下来就是详细步骤(以Linksys WRT1200AC和CHIP Pro为例):

安装HomeBridge

安装HomeBridge并不难,按照官方教程很快就能搭建起来。如果你要用树莓派、CHIP等单板电脑7*24小时运行HomeBridge,一定记得加装散热片,最好也加上散热风扇。如果你也用的CHIP Pro,一定还要加上WiFi天线。同时,我建议不要尝试在路由器上运行HomeBridge。

安装sshpass

sshpass可以实现在命令行参数中包含ssh密码,这样就不需要设置ssh证书或者将路由器密码留空。

1
sudo apt install sshpass

安装lm-sensors

使用ssh客户端登陆路由器,运行以下命令:

1
2
3
opkg update
opkg install lm-sensors
sensors

如果安装成功,会出现类似下图的输出内容:

安装HomeBridge插件

因为我们需要检测的参数可以很容易通过命令行获得,所以使用homebridge-temperature-cmd插件即可。

1
npm install -g homebridge-temperature-cmd

安装完成后,找到/usr/lib/node_modules/homebridge-temperature-cmd/index.js,将

1
var res =  Math.round(stdout * 100) /100;

修改成

1
var res =  Math.round(parseFloat(stdout) * 100) /100;

如果不修改,很容易出现命令行运行指令没问题,而手机查询时配件无响应的谜之问题。

添加配件

ssh最后一个参数就是运行的命令,运行完成后就会自动登出。搭配sshpass就能实现自动登陆同时运行一条命令。接下来只需要通过命令行提取输出内容。
插件配置格式如下:

1
2
3
4
5
{
"accessory": "TemperatureCMD",
"name": "配件名称",
"command": "具体命令"
}

路由器温度

以上图的sensors输出为例,我们需要得到第三个温度(CPU温度)。在安装HomeBridge的设备上运行:

1
sshpass -p [password] ssh [email protected][192.168.1.1] 'sensors'|grep temp1|sed -n '2,1p'|awk -F '[+]' '{print $2}'

请将中括号中的内容根据实际情况替换。
输出内容应该只有一个温度。
注:grep temp1用于筛选出带temp1的行。而我们看到sensors输出中有两行含有temp1,所以用sed选择第二行。接下来的awk以“+”作为分隔符分割并输出后面的内容。由于前面已经在插件中作出修改,剩下的非数字内容会被nodejs自动过滤掉。

路由器平均负载

路由器负载会直接影响路由器温度。uptime命令可以用于获取路由器平均负载。同样的道理,运行:

1
sshpass -p [password] ssh [email protected][192.168.1.1] 'uptime'|awk -F '[:]' '{print $5}'|awk -F '[,]' '{print $1}'

输出内容应该只有一个浮点数,代表1分钟平均负载。
建议将负载放入homebridge-humidity-cmd中,这样就会以百分比方式显示,同样需要修改插件的index.js,修改中最后的“/100”请去掉。配件格式和温度插件完全一样,只需要将accessory字段设置成HumidityCMD。

CHIP Pro温度获取

CHIP Pro不同于树莓派,并没有提供简单的获取温度方式,我们需要直接读取i2c总线。
将以下内容保存到/root/cputemp.sh:

1
2
3
4
5
6
7
#!/bin/sh
#read Internal Temperature 5Eh, 5Fh (0x000)-144.7 C -> 264.8 C(0xFFF) , 0.1°C / bit
TEMPERATURE_LSB=$(i2cget -y -f 0 0x34 0x5f)
TEMPERATURE_MSB=$(i2cget -y -f 0 0x34 0x5e)
TEMPERATURE_BIN=$(( $(($TEMPERATURE_MSB << 4)) | $(($TEMPERATURE_LSB & 0x0F))))
TEMP_DEGC=$(echo "(($TEMPERATURE_BIN/10)-144.7)"|bc)
echo $TEMP_DEGC

然后尝试运行脚本,输出为当前CPU温度。

最终效果

文章目录
  1. 1. 安装HomeBridge
  2. 2. 安装sshpass
  3. 3. 安装lm-sensors
  4. 4. 安装HomeBridge插件
  5. 5. 添加配件
    1. 5.1. 路由器温度
    2. 5.2. 路由器平均负载
    3. 5.3. CHIP Pro温度获取
  6. 6. 最终效果
|