这个功能我不得不吐个槽,难度超过了我的预期......
我原本的打算只是通过ChatGPT编写一个运行在WIN10下,能够自动进行循环获取本机CPU/GPU温度数据,将其通过ModBusTCP发送给下位机,从而控制我的机箱风扇(大功率)。
我本身不是程序员,只学过一点C语言。
结果可能是因为太偏门了,无论是ChatGPT还是Claude,都不能做到正确回答。所以只能自己动手了(大哭)。
首先遇到的问题就是使用psutil和wmi模块,这两个模块我不清楚究竟能不能在WIN10上运行,但是我查阅的众多资料显示都不能在WIN10环境下由Python运行,多数都指向Linux系统。
然后目标明确为调用OpenHardwareMonitorLib.dll进行获取,这是软件OpenHardwareMonitor中提供的DLL文件。
至于那些直接通过端口调用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上的开源程序以及网上提供思路的同学,资料查的太多我都忘了是从哪借鉴的了。
记录自己的成长。