当前位置:首页|资讯|ChatGPT|Claude

使用Python调用OpenHardwareMonitorLib.dll进行硬件信息读取(CPU/GPU温度)

作者:我已经无处不在发布时间:2024-05-22

        这个功能我不得不吐个槽,难度超过了我的预期......

        我原本的打算只是通过ChatGPT编写一个运行在WIN10下,能够自动进行循环获取本机CPU/GPU温度数据,将其通过ModBusTCP发送给下位机,从而控制我的机箱风扇(大功率)。

        我本身不是程序员,只学过一点C语言。

        结果可能是因为太偏门了,无论是ChatGPT还是Claude,都不能做到正确回答。所以只能自己动手了(大哭)。

        首先遇到的问题就是使用psutilwmi模块,这两个模块我不清楚究竟能不能在WIN10上运行,但是我查阅的众多资料显示都不能在WIN10环境下由Python运行,多数都指向Linux系统。

        然后目标明确为调用OpenHardwareMonitorLib.dll进行获取,这是软件OpenHardwareMonitor中提供的DLL文件。

这里使用的是最新版的0.9.6

        

OpenHardwareMonitor软件截图(PS:这是办公电脑)

        至于那些直接通过端口调用OpenHardwareMonitor信息的方法,都需要OpenHardwareMonitor软件在后台运行。

        再然后就会遇到一些诸如Hardware不存在,Computer不存在之类的错误。

头都要大了。

环境是Python3.9,直接上源码:


        将OpenHardwareMonitorLib.dll和本文件放在同一个目录就能运行了。


输出结果

        在网上找了两圈没找到OpenHardwareMonitorLib.dll的说明和接口,只能对照hardware提取到的列表和大模型AI互相学习。

        其中的clr.AddReference(dll_path)是初始化模块,没有这一行大概率报错。

        然后就是启用需要获取的功能并运行一次:

        最后就是对hardware.HardwareType中的内容进行判断,看里面是否包含想要的字符,例如CPU/GPU/RAM等。

        例如hardware.HardwareType内含有GPU,接下来则寻找该列表内的Sensors(传感器)标签。找到了Sensors后,最终提取Sensors内部的Temperature(温度)标签中的内容并输出。即为提取到的CPU或GPU温度。

        要提取其他参数也是同理。

        由于CPU有多核心,所以有多个温度。程序内写了个提取温度最高值的语句,方便只取一个温度。

        最后加一个每秒循环执行一次即可实现目标。后续再添加一个CSV日志文件,加上时间戳。

        最后感谢GitHub上的开源程序以及网上提供思路的同学,资料查的太多我都忘了是从哪借鉴的了。

        记录自己的成长。


Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1