本帖最后由 qgy18 于 2019-4-17 00:09 编辑
最近玩 HA 过程中,把家里能接入的设备倒腾了个遍。我用的是 ASUS AC86U 路由器,官方提供有 asuswrt 组件,可以用来收集路由器上传下载等数据,还可以作为 device tracker,监控一些设备的在线情况(比如统计谁在家)。
但是官方组件里缺乏路由器温度监控,我最终采用了一种非常简便的方法实现了该功能,供大家参考。
照例先上图(路由器状态是官方组件提供的,温度是本文要讨论的):
AC86U 系统本质是一个 linux,可以通过一些命令获取芯片温度,例如:
# CPU 温度,需除以 1000
cat /sys/class/thermal/thermal_zone0/temp
# 2.4G 网卡温度,需除以 2,再加上 20
wl -i eth5 phy_tempsense
# 5G 网卡温度,需除以 2,再加上 20
wl -i eth6 phy_tempsense
另外,linux 还有个好处,可以通过配置信任链接,让其他机器免密码登录。
所以我的解决方案就呼之欲出了:
首先,在树莓派(安装了 HA)的 homeassistant 帐号下,建立与路由器的信任链接,实现无密码登录的效果(前提是要打开路由器的 SSH 登录功能。提醒:安全没做好可能被黑,风险自担)。
然后新建一个 HA 的 Package,利用系统自带 command_line 组件,远程执行命令,拿到数据,搞定!
sensor:
- platform: command_line
name: asus_temperature
command: "ssh admin(at)192.168.1.1 "cat /sys/class/thermal/thermal_zone0/temp;wl -i eth5 phy_tempsense;wl -i eth6 phy_tempsense""
- platform: template
sensors:
asus_cpu_temperature:
value_template: "{% set list = states.sensor.asus_temperature.state.split('\\n') %} {{ (list[0] | float / 1000) | round(1) }}"
unit_of_measurement: "°C"
asus_2_4g_temperature:
value_template: "{% set list = states.sensor.asus_temperature.state.split('\\n') %} {{ (list[1] | regex_replace(find='\\s\\(.*', replace='') | float / 2 + 20) | round(1) }}"
unit_of_measurement: "°C"
asus_5g_temperature:
value_template: "{% set list = states.sensor.asus_temperature.state.split('\\n') %} {{ (list[2] | regex_replace(find='\\s\\(.*', replace='') | float / 2 + 20) | round(1) }}"
unit_of_measurement: "°C"
homeassistant:
customize:
sensor.asus_cpu_temperature:
friendly_name: CPU Temperature
sensor.asus_2_4g_temperature:
friendly_name: 2.4G Temperature
sensor.asus_5g_temperature:
friendly_name: 5G Temperature
|