本帖最后由 dscao 于 2023-7-20 17:34 编辑
PVE安装mosquitto来发送温度信息,这样更新ha版本后不影响。
pve主机系统中执行:
apt-get update -y
apt-get install -y mosquitto-clients
发送主机的CPU温度:
在pve主机系统中执行crontab -e 加入:
*/1 * * * * mosquitto_pub -h 192.168.X.X -u mqttusername -P mqttpassword -t pve/temp -m `sensors | grep -E 'id 0' |cut -c17-20`
在ha的配置文件中增加:
mqtt:
sensor:
- name: cputemp
unique_id: cputemp
icon: 'mdi:thermometer'
state_topic: 'pve/temp'
device_class: temperature
unit_of_measurement: °C
expire_after: "600"
只需要将pve虚拟机的温度接入ha,以上内容即可。
以下为旧内容。
----------------------
参考网上教程安装好PVE
第一步:从官网下载最新的iso文件,制作成U盘安装到小主机中。
第二步:根据自己的需要的虚拟机系统,比如Openwrt、Ikuai、Nas
第三步:roxmox VE(PVE)安装HomeAssistant
一、创建虚拟机:
01.创建虚拟机
02.设置,给虚拟机起一个名称,我这里就直接写了HA,起一个自己喜欢的就行了
03.设置操作系统,勾选“不使用任何介质”,剩下的全默认就行
04.设置系统,全部默认
05.设置硬盘,这里我把硬盘大小调成了6G,其实这个大小是多少无所谓,因为创建完虚拟机以后要把硬盘删掉,这里也可以全部默认
06.设置CPU,我选择了1核心
07.设置内存,单位为M,我设置了2G,后面虚拟机正常运行以后基本是1700M,也就是内存占用80%多,所以这里2G够用了,如果内存够大或者觉得内存占用80%有点高,可以把这里调大一点,看个人情况吧
08.设置网络,网络这里我一直用的是半虚拟化,之前装软路由的时候测试过半虚拟化、E1000、直通,感觉半虚拟化和直通差不多,内网传输速度都在100M以上,也看过对比测评的视频“半虚拟化”效率是挺高的,这里也就半虚拟化了,如果选择E1000应该也是可以的。
09.完成设置
10.调整设置,先在左侧窗口选中刚刚创建的虚拟机(我的名称是HA),右边接着选择“硬件”
11.分离硬盘,选中刚刚创建虚拟机时候建立的硬盘我的大小是1G,先点击“分离”
12.删除硬盘,删除刚刚分离出来的硬盘(不分离无法删除)
13.调整BIOS为UEFI模式,这个是HassOS要求的
二、上传虚拟机文件
这里需要下载虚拟机文件,下载网址如下:
地址1:HA官网地址,直接复制到迅雷或其他下载器即可下载,(链接)
地址2:链接
这两个地址其实是一样的,一个是官网给的,一个是官方GitHub的release页面给的,我喜欢到第二个页面去,这里可以看到很多历史版本,如果到第二个页面去下载,记得选择qcow2.gz这个文件,前面的4.11是版本号,下载好以后用解压出来,得到一个qcow2文件,这个文件有700多M,比原来的大很多。入过打不开这个文件,可以先把解压程序打开,然后选择文件-->打开,再选中刚下好的qcow2.gz文件,就可以解压了。
下载好以后用winscp登录pve,然后把解压后得到的qcow2文件传到tmp目录,这个目录也可由自己选,
14.上传虚拟机文件
15.导入文件,回到pve,点击左侧的节点(不是虚拟机),选择shell
输入cd /tmp,cd到tmp目录,也就是刚刚虚拟机文件上传的文件夹
输入导入命令qm importdisk 101 hassos_ova-4.14.qcow2 local-lvm
这里的101就是左侧新建虚拟机的编号,你的跟我这个可能不一样,要注意改一下
hassos_ova-4.14.qcow2就是上传的虚拟机文件,假设你在第14步改成了hassos,这里就是hassos.qcow2
名称一定要一样,如果不小心把扩展名删了建议加回来,总之,这里的文件名跟第14步的文件名保持一致即可
16.开始导入,输入完上一步命令后,按回车执行
17.导入完成,如下图所示,即表示导入成功
18.添加硬盘,点击pve左侧新建的HA虚拟机,在右侧选择硬件,会发现出现一个未使用的磁盘0,双击它添加硬盘
19.启动虚拟机,现在可以启动虚拟机了,点击右上方的启动按钮,启动刚刚创建的虚拟机
20.等待系统最后安装完成,打开网页端,浏览器里面输入这个网址并打开
正常来说就会出现启动界面
第四步:本文的主要内容——CPU温度显示
首先让pve主机系统正常接入互联网,保证能访问外部网络
运行以下命令安装传感器插件:
apt-get install lm-sensors
sensors-detect
sensors
附带将PVE管理界面增加CPU温度显示:
上面安装完之后就可以在shell里看CPU和封装的温度了,现在把温度添加到管理界面,这里我推荐用WinSCP等工具链接到PVE,把文件拖到本地用Notepad++之类的修改,而不是直接用在shell里修改,当然如果你nano、vim等用的炉火纯青当我没说。
#首先是编辑这个文件,执行
vim /usr/share/perl5/PVE/API2/Nodes.pm
---------------------------------------
$res->{ksm} = {
shared => $meminfo->{memshared},
};
$res->{sensinfo} = `sensors`; //在原有基础上新增这一行,不会使用vim的老老实实下载文件来改;
$res->{swap} = {
free => $meminfo->{swapfree},
total => $meminfo->{swaptotal},
used => $meminfo->{swapused},
};
//然后是下面这个文件,这里我个人不推荐vim,因为我不会用,这文件4万行代码~果断下载下来notepad++
/usr/share/pve-manager/js/pvemanagerlib.js
//打开定位到下面这一段
{
itemId: 'version',
colspan: 2,
printBar: false,
title: gettext('PVE Manager Version'),
textField: 'pveversion',
value: ''
}, //注意这个逗号,很容易被忽略,会造成白屏,然后复制添加下面的代码,然后保存
{
itemId: 'sensinfo',
colspan: 2,
title: gettext('CPU温度'),
textField: `sensinfo`,
renderer:function(value){
const c0 = value.match(/Core 0.*?\+([\d\.]+)?/)[1];
const c1 = value.match(/Core 1.*?\+([\d\.]+)?/)[1];
const c2 = value.match(/Core 2.*?\+([\d\.]+)?/)[1];
const c3 = value.match(/Core 3.*?\+([\d\.]+)?/)[1];
const c4 = value.match(/Core 4.*?\+([\d\.]+)?/)[1];
const c5 = value.match(/Core 5.*?\+([\d\.]+)?/)[1];
const p0 = value.match(/Package id 0.*?\+([\d\.]+)?/)[1];
return `Package: ${p0}℃ Core0: ${c0}℃ | Core1: ${c1}℃ | Core2: ${c2}℃ | Core3: ${c3}℃ | Core4: ${c4}℃ | Core5: ${c5}℃`
}
}
温度显示错误解决
如果是直接CTRL+C然后CTRL+V上面的代码,结果很大概率是会报错的,我就是页面一直加载中,F12直接看错误原因。
因为我这台工控机是i5 7200U,是双核四线程,网上的代码都是定义了5个核心,但是并没有说明要根据自己的机器酌情修改代码,这里我只保留Core0 和 Core1 的温度显示,意思是只显示第0和第1核的温度,其余的删除;package是CPU封装温度,这个不用改。然后下面return 的那段字符串记得也删除多余的核心变量,这里附上我自己机器的修改代码结果
{
itemId: 'sensinfo',
colspan: 2,
title: gettext('CPU温度'),
textField: 'sensinfo',
renderer:function(value){
const c0 = value.match(/Core 0.*?\+([\d\.]+)?/)[1];
const c1 = value.match(/Core 1.*?\+([\d\.]+)?/)[1];
const p0 = value.match(/Package id 0.*?\+([\d\.]+)?/)[1];
return `Package: ${p0}℃ Core0: ${c0}℃ | Core1: ${c1}℃`
}
}
重启Porxmox页面服务
systemctl restart pveproxy
完成
登录实例HA的控制台:
回车,输入root无密码登录hassos的系统, login 获取root权限
运行以下命令:
docker exec -it homeassistant sh
ssh-keygen #按提示生成ssh密钥
ssh [email protected] #pve的IP
输入pve主机的用户名和密码进行ssh登录有的地方要输入yes确认一下
运行
退出pve的ssh,回到hass中
传送登录密钥到pve主机,按提示输入密码一次。
之后运行
测试一下,是否正常输出cpu的温度相关信息
如果正常将会出现类似的:
Core 0: +41.0°C (high = +105.0°C, crit = +105.0°C)
……
在hass的config/packages/目录增加 cpu.yaml,内容为:
sensor:
#温度
- platform: command_line
name: cputemp
command: "ssh [email protected] sensors | tail -5"
value_template: '{{ value[14:19]|int(0,10) }}' #这里可能需要根据上面的输出内容不同作一些调整,包括上面的 -5也可能需要调整行数
unit_of_measurement: °C
scan_interval: 30
重启hass,UI中增加cputemp实体即可
当然每次升级 homeassistant core 后就需要重新操作一次 docker exec -it homeassistant sh 中的步骤。
代替ssh的更好方法:
PVE安装mosquitto来发送温度信息,就不需要ssh了,这样更新ha版本后不影响。
apt-get update -y
apt-get install -y mosquitto-clients
发送一下主机的CPU温度:
在pve的执行crontab -e 加入:
*/1 * * * * mosquitto_pub -h 192.168.X.X -u mqttusername -P mqttpassword -t pve/temp -m `sensors | grep -E 'id 0' |cut -c17-20`
ha中增加:
- platform: mqtt
name: cputemp
icon: 'mdi:thermometer'
state_topic: 'pve/temp'
device_class: temperature
unit_of_measurement: °C
expire_after: "600"
|