『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 36697|回复: 30

[经验分享] PVE虚拟机中安装的hassos的情况下显示CPU温度信息

  [复制链接]

77

主题

1391

帖子

2万

积分

元老级技术达人

积分
24293
金钱
22862
HASS币
290
发表于 2020-10-24 16:33:49 | 显示全部楼层 |阅读模式
本帖最后由 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
0002.jpg

第三步: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
完成

0003.jpg

登录实例HA的控制台:
0004.jpg

回车,输入root无密码登录hassos的系统, login 获取root权限

0005.jpg
运行以下命令:
docker exec -it homeassistant sh
ssh-keygen  #按提示生成ssh密钥
ssh [email protected] #pve的IP
输入pve主机的用户名和密码进行ssh登录有的地方要输入yes确认一下
运行
exit
退出pve的ssh,回到hass中
ssh-copy-id [email protected]  #pve的IP
传送登录密钥到pve主机,按提示输入密码一次。
之后运行
ssh [email protected] sensors | tail -5
测试一下,是否正常输出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实体即可

001.jpg

当然每次升级 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"








评分

参与人数 3金钱 +11 收起 理由
summ99111 + 1 高手,这是高手!
zerock + 5 感谢楼主分享!
aiqienanguatou + 5 论坛有你更精彩!

查看全部评分

回复

使用道具 举报

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
金钱
3
HASS币
0
发表于 2020-10-24 17:56:42 | 显示全部楼层
嗯嗯,不错显示出来了
回复

使用道具 举报

2

主题

52

帖子

286

积分

论坛分享达人

积分
286
金钱
234
HASS币
10
发表于 2020-11-19 20:19:07 | 显示全部楼层
大佬,请教两个问题,1.cpu.yaml里如何根据输出调整value的参数?2.如何在ui添加实体啊,是不是要在config里include  config/packages/cpu.yaml
回复

使用道具 举报

77

主题

1391

帖子

2万

积分

元老级技术达人

积分
24293
金钱
22862
HASS币
290
 楼主| 发表于 2020-11-19 22:06:47 | 显示全部楼层
ycg31 发表于 2020-11-19 20:19
大佬,请教两个问题,1.cpu.yaml里如何根据输出调整value的参数?2.如何在ui添加实体啊,是不是要在config ...

configuration.yaml中加入下面代码后:
homeassistant:
  packages: !include_dir_named packages    

packages目录中的yaml文件全部自动加载的,不用特别处理了。
回复

使用道具 举报

2

主题

52

帖子

286

积分

论坛分享达人

积分
286
金钱
234
HASS币
10
发表于 2020-11-19 22:13:29 | 显示全部楼层
本帖最后由 ycg31 于 2020-11-19 22:33 编辑
dscao 发表于 2020-11-19 22:06
configuration.yaml中加入下面代码后:

packages目录中的yaml文件全部自动加载的,不用特别处理了。 ...

显示了  只有一个温度
回复

使用道具 举报

9

主题

118

帖子

541

积分

高级会员

Rank: 4

积分
541
金钱
423
HASS币
0
发表于 2020-11-20 22:39:52 | 显示全部楼层
本帖最后由 a4610759 于 2020-11-20 22:52 编辑

捕获.PNG
输入ssh-copy-id后,显示这个。您遇到过吗???
捕获.PNG
回复

使用道具 举报

77

主题

1391

帖子

2万

积分

元老级技术达人

积分
24293
金钱
22862
HASS币
290
 楼主| 发表于 2020-11-21 01:31:56 | 显示全部楼层
a4610759 发表于 2020-11-20 22:39
输入ssh-copy-id后,显示这个。您遇到过吗???

这之前 ssh-keygen  了吗?
回复

使用道具 举报

9

主题

118

帖子

541

积分

高级会员

Rank: 4

积分
541
金钱
423
HASS币
0
发表于 2020-11-21 12:05:29 | 显示全部楼层
本帖最后由 a4610759 于 2020-11-21 12:19 编辑
dscao 发表于 2020-11-21 01:31
这之前 ssh-keygen  了吗?

用这个命令了呀。就是输入docker exec -it homeassistant sh命令之后的指令都是在docker下完成的是不???不用退回到root权限去操作吧。我生成key的过程中,第一步输入一个文件名是吧,第二步第三步都是直接回车的,这样操作对吗??
回复

使用道具 举报

77

主题

1391

帖子

2万

积分

元老级技术达人

积分
24293
金钱
22862
HASS币
290
 楼主| 发表于 2020-11-21 22:32:45 | 显示全部楼层
a4610759 发表于 2020-11-21 12:05
用这个命令了呀。就是输入docker exec -it homeassistant sh命令之后的指令都是在docker下完成的是不?? ...

对啊,按这个样子就行了。如果没有生成证书就复制证书,就出现你上面的错误提示。
docker exec -it homeassistant sh

ssh-keygen
ssh-copy-id [email protected].***.***  #pve主机地址
回复

使用道具 举报

9

主题

118

帖子

541

积分

高级会员

Rank: 4

积分
541
金钱
423
HASS币
0
发表于 2020-11-22 12:00:07 | 显示全部楼层
dscao 发表于 2020-11-21 22:32
对啊,按这个样子就行了。如果没有生成证书就复制证书,就出现你上面的错误提示。
...

捕获.PNG
我输入完ssh-keygen之后显示成这样应该是生成成功了吧。但是对于的文件夹里没有文件。这是咋回事????
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-23 09:55 , Processed in 0.271239 second(s), 41 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表