马春杰杰博客
致力于深度学习经验分享!

HAOS虚拟机通过MQTT监控树莓派5宿主机电源和温度

最新目录

前面把树莓派5上的 Home Assistant OS 改成了 KVM 虚拟机运行,HAOSSupervisor 和应用商店都可以正常使用了。可以参考:https://www.machunjie.com/linux/2189.html

不过迁移完成后,我发现原来自动添加的 Raspberry Pi Power Supply Checker 集成失效了,后台提示:

这个提示其实是正常的。

因为现在的结构已经变成:

HAOS 看到的是 QEMU/KVM 提供的通用 ARM 虚拟硬件,无法直接读取树莓派宿主机的固件状态,所以也就无法检测真实的欠压、节流和温度。

最后采用的办法是:

这样 Home Assistant 虽然运行在虚拟机里,仍然可以看到物理树莓派5的真实电源和温度状态。

这里把完整配置过程记录一下~

1. 环境说明

我这里的环境如下:

其中 Mosquitto broker 运行在 HAOS 中,宿主机每分钟读取一次状态并通过 MQTT 上报。

2. 为什么原来的电源检测集成会失效

Raspberry Pi Power Supply Checker 只能检查 Home Assistant 当前运行设备的树莓派固件状态。

以前 HAOS 直接安装在树莓派上时,可以访问底层的欠压接口;改成虚拟机以后,HAOS 只能看到虚拟 CPU、虚拟硬盘和 VirtIO 网卡,无法再访问物理树莓派的固件接口。

所以会出现:

这个集成可以直接删除,不会影响 Home Assistant 的其他功能。

真正的树莓派状态应该在 Debian 宿主机中读取:

3. 在HAOS中安装Mosquitto broker

进入 Home Assistant

安装完成后,打开:

新版界面中的“自动恢复”,就是以前的 Watchdog,也就是应用异常退出后自动重启。

然后点击“启动”。

3.1 创建MQTT登录账号

打开:

填写:

保存后重启 Mosquitto broker

不要使用下面两个用户名:

它们是 Home Assistant 内部保留账号。

3.2 添加MQTT集成

进入:

通常安装 Mosquitto broker 后会自动发现,直接点击配置即可。

如果需要手动填写:

3.3 应用安装时Docker Hub超时

我第一次安装 Mosquitto 时还遇到了:

最后确认是 HAOS 无法直连 Docker Hub

我这里临时把 HAOS 的网关和 DNS 指向运行 SurgeMac,让 HAOS 通过 Surge 增强模式访问 Docker HubMosquitto 就可以正常安装了。

HAOS 后台可以直接在:

修改静态 IP、网关和 DNS,不一定非要在命令行中设置。

只要下面的测试能够快速返回 401 Unauthorized,就说明 Docker Registry 已经可以访问:

4. 在Debian宿主机安装MQTT客户端

下面的命令全部在 Debian 宿主机执行,不是在 HAOS 控制台执行。

安装客户端:

检查命令:

正常应该显示:

5. 测试MQTT账号和消息收发

先在 Debian 宿主机执行下面这组测试:

正常应该输出:

如果出现:

说明网络和端口已经正常,只是用户名或密码不正确。检查 MosquittoLogins 配置,保存后记得重启应用。

6. 检查树莓派电源和温度命令

Debian 宿主机执行:

我这里输出:

throttled=0x0 表示当前和本次开机以来都没有检测到欠压或节流。

常用状态位:

7. 保存MQTT连接信息

创建配置文件:

设置权限:

8. 创建树莓派状态上报脚本

创建脚本:

设置权限:

检查脚本语法:

没有输出就说明语法正常。

9. 手动运行测试

执行:

我这里输出:

其中:

脚本发布的 MQTT Discovery 配置会让 Home Assistant 自动创建设备和实体,不需要手工修改 configuration.yaml

10. 在Home Assistant中查看设备

进入:

应该出现:

设备中包含:

正常情况下:

这里的“关闭”表示没有检测到故障。

11. 创建systemd自动上报服务

创建 service

创建 timer

重新加载并启动:

12. 检查定时器状态

查看 timer

正常应该看到:

查看最近一次上报日志:

我这里输出:

Deactivated successfully 是正常现象,因为这个服务使用的是 Type=oneshot,执行完成后就会退出。

真正需要确认的是:

13. 创建欠压通知

进入 Home Assistant

触发条件选择“状态”:

动作可以选择手机通知:

还可以针对“本次启动曾欠压”再创建一个告警。

这个实体表示从本次开机到现在是否曾经出现过欠压,一旦变成开启,通常会保持到宿主机下次重启。

14. 几个踩坑记录

14.1 Connection Refused: not authorised

如果 MQTT 测试出现:

说明 Broker 地址和端口已经可以连接,只是认证失败。

检查:

确认用户名和密码正确,保存后重启 Mosquitto

14.2 DEVICE_JSON: unbound variable

我第一次创建脚本时,变量名写成了:

后面却引用成:

因为脚本启用了 set -u,所以直接报:

修复方法:

然后检查:

本文上面的完整脚本已经使用了正确的 DEVICE_JSON,不需要再修改。

14.3 service显示inactive或dead

如果执行:

看到:

不代表服务故障。

因为这是一次性任务,每次执行完就自动退出。真正负责每分钟重新触发它的是:

14.4 实体显示不可用

脚本中的实体设置了:

如果超过3分钟没有收到新状态,Home Assistant 会把实体标记为不可用。

检查:

还可以手动执行一次:

14.5 CPU温度五十多度正常吗

我这里树莓派5同时运行 DebianHAOS 虚拟机和其他服务,CPU 温度大约是:

只要散热正常,并且没有出现节流状态,一般没有问题。

可以同时观察:

15. 常用管理命令

手动上报一次:

查看定时器:

查看上报日志:

实时查看日志:

停止自动上报:

重新启用:

修改 MQTT 密码:

修改后测试:

16. 总结

OK,到这里,虚拟机中的 Home Assistant 就可以监控物理树莓派5宿主机的真实电源和温度状态了。

最终结构:

相比原来的 Raspberry Pi Power Supply Checker,这种方法稍微复杂一些,但读取的是物理宿主机的真实状态,而且还可以继续扩展:

以后即使 Home Assistant 继续运行在虚拟机里,也可以通过 MQTTDebian 宿主机中的各种状态统一送进 HA

记录一下,给同样在树莓派5上使用 KVM 虚拟机运行 Home Assistant OS 的朋友做个参考~

赞(0) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《HAOS虚拟机通过MQTT监控树莓派5宿主机电源和温度》
文章链接:https://www.machunjie.com/linux/2197.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

:smile: :sad: :arrow: :cool: :confused: :cry: :eek: :evil: :exclaim: :idea: :lol: :mad: :mrgreen: :neutral: :question: :razz: :redface: :rolleyes: :surprised: :wink: :biggrin: :twisted: