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为cpuif (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核心的温度了。。