简单RestAPI获取硬件状态
简单来说,我需要一个能从HA上直接浏览家里主路由的CPU温度的首屏,因为RK3399发热比较猛却只有被动散热。有人可能说,加个小风扇难度很大么?呃,具备Netgear R7000(博通方案)在夏天轻松面对75℃服役5年的经验,我觉得国货不妨一战。
所以这个小项目,其实提供了对运行在物理机上几乎任意Linux的cpu温度、磁盘余量、上电时间等参数的rest api获取。写的比较糙快猛,主要满足自己需求,所以莫要预期过高哈。
提供何种接口
随意运行一个http client,比如 curl http://[hostname]:9090/stats/[data_type]
data_type初期支持三种, du, temps, boot_time 分别代表磁盘用量,多个温度,和上电时间。然后就可以返回数据了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
curl http://192.168.12.34:9090/stats/temps { "code": 0, "status": "success", "data": { "cpu_thermal": { "curr": 57.78, "crit": 100.0 }, "gpu_thermal": { "curr": 57.22, "crit": 95.0 } } } |
如何安装
- clone代码库,设置python3的虚拟运行环境,避免影响系统环境。
- 根据 requirements.txt 安装所需依赖。
- python entry.py 即可运行服务。
- 使用curl、postman或者其他http client检查服务是否正常。
- 可选 – sys_stats_restful.service 内附这个文件可以帮你把服务做成Systemd持久化,支持开机启动。
- 可选 – to_be_placed_in_ha_configuration.yaml 这个文件可以帮你在HA上集成rest传感器用于收集和展示数据。
我的软硬件配置
- 一块Tinker Board 2s,RK3399大小核,运行Armbian,内核版本 6.1.x #1 SMP PREEMPT aarch64 GNU/Linux 。
- 物理机上开KVM虚拟化,从eth0口按VLAN分两个interface再建出wan、lan两个网桥,OpenWrt就可以得到虚拟的eth0、eth1各接一个网桥,物理机层面上则体现为单臂路由;然后外接Netgear VLAN switch转成多个物理接口。
- 物理机的CPU和GPU温度可以直接命令行使用 sensors 查看,前提是安装了 apt install lm-sensors 。
- 该服务可以直接部署在Armbian(物理机)上,我是折腾派,部署在lxc里,所以docker应该也不是问题,只要代码能直接获取到host系统的这些数据。预计KVM虚拟机上部署应该没戏,因为那个级别的隔离,虚拟机内的代码拿不到物理机这些数据。
2023-05-17更新:
这样在HA app上可直观看网络负载与“路由器”CPU温度的关系。如果想再参考室温影响,可以把弱电箱所在房间的温度也一起采集放上去,我目前24小时采集的两处室温都不在弱电箱附近,就不对比了。
可怜的弱电箱环境,刚脱离了发热大户R7000(博通方案)跟微温的AX6s(联发科方案)友好相处了一年,又来个瑞芯微家的电暖器…
文章的脚注信息由WordPress的wp-posturl插件自动生成