Duke Yin's Technology database

HomeAssistant 获取 Proxmox VE CPU温度数据

对于家庭小主机硬件条件下,不管操作系统是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插件的补充。

# #

发布评论

评论

标注 * 的为必填项。