对于家庭小主机硬件条件下,不管操作系统是ESXI还是PVE,都比较难获得CPU温度数据,这对于监控服务器的健康状态来说是极为不利的。
PVE(Proxmox Virtual Environment)稍好,因为底层是Debian,可以通过安装软件包获取硬件传感器数据。
通过这一篇文章的各种操作之后,我们将可以在homeassistant界面里直接看到服务器的CPU温度和历史数据,从而掌握家庭服务器的健康状况。
(本文主要讨论HomeAssistant集成,所以本文不涉及将传感器信息显示在PVE后台界面,若需要可参考网络上其他文章。)
PVE安装传感器包
在pve服务器上:
apt-update && apt-get install lm-sensors -y
安装完毕后,开始探测支持的传感器:
sensors-detect
跟着提示一步一步走,基本都是选Y,直到探测结束。
然后可以通过命令查看已经注册的传感器:
sensors
在我的实例输出:
root@pve:~# sensors
k10temp-pci-00c3
Adapter: PCI adapter
Tctl: +48.8°C
nvme-pci-0100
Adapter: PCI adapter
Composite: +46.9°C (low = -273.1°C, high = +89.8°C)
(crit = +94.8°C)
Sensor 1: +46.9°C (low = -273.1°C, high = +65261.8°C)
Sensor 2: +41.9°C (low = -273.1°C, high = +65261.8°C)
it8613-isa-0a30
Adapter: ISA adapter
Vcore: 759.00 mV (min = +0.08 V, max = +2.38 V)
+3.3V: 2.05 V (min = +0.13 V, max = +3.09 V)
+12.0V: 2.38 V (min = +6.40 V, max = +10.82 V)
VSOC: 264.00 mV (min = +1.41 V, max = +1.14 V)
VDDP: 1.45 V (min = +1.61 V, max = +0.18 V)
3VSB: 352.00 mV (min = +3.65 V, max = +1.65 V)
VBAT: 3.12 V
+3.3V: 3.26 V
CPU Fan: 1666 RPM (min = 29 RPM)
fan3: 1113 RPM (min = 39 RPM)
fan4: 0 RPM (min = -1 RPM)
fan5: 0 RPM (min = -1 RPM)
System: +27.0°C (low = +38.0°C, high = -47.0°C) sensor = thermistor
CPU: +27.0°C (low = +64.0°C, high = +21.0°C)
Chipset: +48.0°C (low = -24.0°C, high = +73.0°C)
Intrusion: ALARM
我的CPU是 AMD R7 5825U,事实上CPU温度没有获取到,反而获取到了核显GPU的温度,这个Tclt
就是。由于是核显,所以用它来指代CPU温度其实也没差。
测试命令获得
于是根据获取到的信息,编写一段命令获得温度数字:
sensors | grep -E 'Tctl' |cut -c16-19
这段命令的引号部分是上述命令获取到的传感器的名称,有可能你的与这个不同。
cut部分指裁剪文字,从16个字符开始,19个字符结束,删掉名称和单位,只保留数字。
如果使用这段命令只输出温度数字,则表示成功,如果出错或者输出不是纯数字,就调整名称和cut参数。
安装mosquitto-client
依然还是在PVE主机上:
apt-get update -y
apt-get install -y mosquitto-clients
如此一来,就可以使用MQTT发送CPU的温度。
编辑crontab添加定时任务,间隔1分钟传送温度数字给HomeAssistant
crontab -e
在末尾加入:
*/1 * * * * mosquitto_pub -h 192.168.X.X -p 1883 -u 用户名 -P 密码 -t pve/temp -m `sensors | grep -E 'Tctl' |cut -c16-19`
- 其中192.168.X.X是HomeAssistant的MQTT代理地址,通常是HA的IP,
- 用户名密码是HomeAssistant的MQTT定义的用户名密码,如果你忘记了,也可以用HomeAssistant的登录用户名密码(不太安全)。
- 1883是HomeAssistant MQTT的默认端口,如果你在HA修改了,记得这里也得改
后半段引号内的,是上述经过我们测试的输出传感器温度数字的命令,根据你测试结果填写。
完成后保存crontab,这条命令就会每分钟执行。HomeAssistant就能每分钟收到来自PVE的MQTT消息。
如果你觉得一分钟更新一次太慢了,不及时,下面的Crontab代码可以让更新频率提高到每10秒一次。
* * * * * ( mosquitto_pub -h 192.168.X.X -p 1883 -u 用户名 -P 密码 -t pve/temp -m `sensors | grep -E 'Tctl' |cut -c16-19` )
* * * * * ( sleep 10 ; mosquitto_pub -h 192.168.X.X -p 1883 -u 用户名 -P 密码 -t pve/temp -m `sensors | grep -E 'Tctl' |cut -c16-19` )
* * * * * ( sleep 20 ; mosquitto_pub -h 192.168.X.X -p 1883 -u 用户名 -P 密码 -t pve/temp -m `sensors | grep -E 'Tctl' |cut -c16-19` )
* * * * * ( sleep 30 ; mosquitto_pub -h 192.168.X.X -p 1883 -u 用户名 -P 密码 -t pve/temp -m `sensors | grep -E 'Tctl' |cut -c16-19` )
* * * * * ( sleep 40 ; mosquitto_pub -h 192.168.X.X -p 1883 -u 用户名 -P 密码 -t pve/temp -m `sensors | grep -E 'Tctl' |cut -c16-19` )
* * * * * ( sleep 50 ; mosquitto_pub -h 192.168.X.X -p 1883 -u 用户名 -P 密码 -t pve/temp -m `sensors | grep -E 'Tctl' |cut -c16-19` )
二选一即可,加入Crontab末尾。
不需要重启crontab服务,保存后直接能生效。
HomeAssistant接受MQTT消息
如果你的HomeAssistant还没有MQTT集成:
设置 – 设备与服务 – 添加集成,搜索MQTT并添加。
初始化设置:
代理:填写HomeAssistant的局域网ip地址
端口:默认是1883不需要改
用户名:自己取
密码:自己取
完成后可以打开配置,选择监听主题,主题填写 pve/temp
开始监听。
如果顺利的话,你会看到从PVE发来的温度数字,间隔一段时间收到一条。
如果没有收到,或者收到的字符有问题,请在PVE主机修改crontab中的命令。
添加MQTT传感器实体
编辑HomeAssistant目录的/homeassistant/configuration.yaml
在末尾加入:
mqtt:
sensor:
- name: PVE Cpu Temp
unique_id: pvecputemp
icon: 'mdi:thermometer'
state_topic: 'pve/temp'
device_class: temperature
unit_of_measurement: °C
expire_after: "600"
保存后在HomeAssistant菜单 开发者工具 – 重新启动 – 快速重载
之后,你就可以在实体中找到名为“PVE Cpu Temp”的传感器。
它会记录PVE服务器发来的CPU温度数字,实时显示。
然后你就可以在面板上使用各种你喜欢的卡片展示这个CPU温度数据了。
注:PVE的大部分其他数据可以通过一个HACS插件获取,名叫:proxmoxve,例如硬盘温度,CPU内存占用,各个虚拟机的cpu内存情况等。
使用本文的方法,还可以举一反三,通过PVE服务器的crontab发送风扇转速、CPU电压等sensors能获取到的数据,作为proxmoxve插件的补充。
#homeassistant #PVE