admin 管理员组

文章数量: 1184232

CPU温度获取

总结

Windows和linux采用的函数不同;
x86与Arm采用的函数不同;
python3.7和python3.8不同,目前;

高温试验下CPU温度

CPU温度会高很多,高出环境温度20度左右,还得空气流通,不能积热导致温度上升,不然设备异常概率大。

后续

需解决超温持续一段时间后,边缘计算设备如何降低负载,以防超温。

发现问题

root\WMI每次结果相同

我尝试了以下代码来获取cpu温度(在管理模式下运行):
public static List Temperatures
{
get
{
List result = new List();
ManagementObjectSearcher searcher = new ManagementObjectSearcher(@“root\WMI”, “SELECT * FROM MSAcpi_ThermalZoneTemperature”);
foreach (ManagementObject obj in searcher.Get())
{
double temperature = Convert.ToDouble(obj[“CurrentTemperature”].ToString());
temperature = (temperature - 2732) / 10.0;
result.Add(new Temperature { CurrentValue = temperature, InstanceName = obj[“InstanceName”].ToString() });
}
return result;
}
}

每次我运行代码,结果是25。发现每次结果相同;

python问题

psutil模块表示获取本机的硬件信息,发现不错;
但获取CPU温度方面,没看到3.8版本的支持
python3.7和python3.8不同,
目前发现3.8下引用wmi提示无win32api,安装后pycharm在编译阶段还是报错,python自带编辑器不报错,但运行报错,查win32api无3.8版本的安装软件,估计是这个原由;
#windows查CPU温度
import wmi
import win32api

有效

声明:

PersistentSettings settings =new PersistentSettings();

UpdateVisitor updateVisitor = new UpdateVisitor();

初始化config配置文件,详情见Bin目录Debug/ReplaseOpenHardwareMonitor.config文件

settings.Load(Path.ChangeExtension(
Application.ExecutablePath, “.config”));

初始化Computer对象

Computer computer= new Computer(settings);

调用open方法

conputer.open();

获取cpu温度:

             StringBuilder str = new StringBuilder();
           computer.Accept(updateVisitor);
            for (int i = 0; i < computer.Hardware.Length; i++)
            {
                //循环找到HardwareType为cpu
                if (computer.Hardware[i].HardwareType == HardwareType.CPU)
                {
                    for (int j = 0; j < computer.Hardware[i].Sensors.Length;j++ )
                    {
                        //找到温度
                        if (computer.Hardware[i].Sensors[j].SensorType == SensorType.Temperature)
                        {
                         //获取到cpu核心
                          str.Append(computer.Hardware[i].Sensors[j].Name);
                          str.Append(" ");
                          //这里就是cpu温度了
                          str.Append(computer.Hardware[i].Sensors[j].Value.ToString());
                          str.Append(" ");
                        }
                    }
                }
            }

Console.WriteLine(str.ToString());

这样子就获取到每个cpu核心的温度了。。

本文标签: 温度 数不同 采用的函