Skip to content

Commit

Permalink
Update CPU module to retrieve CPU temperature from k10temp and corete…
Browse files Browse the repository at this point in the history
…mp sensors
  • Loading branch information
timmo001 committed Apr 14, 2024
1 parent 0546965 commit c90c8f3
Showing 1 changed file with 50 additions and 60 deletions.
110 changes: 50 additions & 60 deletions systembridgebackend/modules/cpu.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,66 +125,56 @@ async def _get_stats(self) -> scpustats:

async def _get_temperature(self) -> float | None:
"""CPU temperature."""
try:
if self.sensors is not None:
if self.sensors.temperatures is not None:
temperatures: dict[str, list[shwtemp]] = self.sensors.temperatures
if "k10temp" in temperatures:
for sensor in self.sensors.temperatures["k10temp"]:
if (
"Tdie" in sensor
or "Tctl" in sensor
or "Tccd1" in sensor
):
self._logger.debug(
"Found CPU temperature (k10temp): %s",
sensor,
)
return sensor.current
if "coretemp" in self.sensors.temperatures:
for sensor in self.sensors.temperatures["coretemp"]:
self._logger.warning("coretemp: %s", sensor)
if (
"Package id 0" in sensor
or "Physical id 0" in sensor
or "Core 0" in sensor
):
self._logger.debug(
"Found CPU temperature (coretemp): %s",
sensor,
)
return sensor.current
if (
self.sensors.windows_sensors is not None
and self.sensors.windows_sensors.hardware is not None
):
for hardware in self.sensors.windows_sensors.hardware:
# Find type "CPU"
if "CPU" not in hardware.type.upper():
continue
for sensor in hardware.sensors:
name = sensor.name.upper()
# Find type "TEMPERATURE" and name "PACKAGE" or "AVERAGE"
if (
"TEMPERATURE" in sensor.type.upper()
and ("PACKAGE" in name or "AVERAGE" in name)
and sensor.value is not None
):
self._logger.debug(
"Found CPU temperature: %s = %s",
sensor.name,
sensor.value,
)
return (
float(sensor.value)
if isinstance(sensor.value, (int, float, str))
else None
)
except Exception as exception: # pylint: disable=broad-except
self._logger.error(
"Error getting CPU temperature",
exc_info=exception,
)
if self.sensors is not None:
if self.sensors.temperatures is not None:
temperatures: dict[str, list[shwtemp]] = self.sensors.temperatures
if "k10temp" in temperatures:
for sensor in self.sensors.temperatures["k10temp"]:
if "Tdie" in sensor or "Tctl" in sensor or "Tccd1" in sensor:
self._logger.debug(
"Found CPU temperature (k10temp): %s",
sensor,
)
return sensor.current
if "coretemp" in self.sensors.temperatures:
for sensor in self.sensors.temperatures["coretemp"]:
self._logger.warning("coretemp: %s", sensor)
if (
"Package id 0" in sensor
or "Physical id 0" in sensor
or "Core 0" in sensor
):
self._logger.debug(
"Found CPU temperature (coretemp): %s",
sensor,
)
return sensor.current
if (
self.sensors.windows_sensors is not None
and self.sensors.windows_sensors.hardware is not None
):
for hardware in self.sensors.windows_sensors.hardware:
# Find type "CPU"
if "CPU" not in hardware.type.upper():
continue
for sensor in hardware.sensors:
name = sensor.name.upper()
# Find type "TEMPERATURE" and name "PACKAGE" or "AVERAGE"
if (
"TEMPERATURE" in sensor.type.upper()
and ("PACKAGE" in name or "AVERAGE" in name)
and sensor.value is not None
):
self._logger.debug(
"Found CPU temperature: %s = %s",
sensor.name,
sensor.value,
)
return (
float(sensor.value)
if isinstance(sensor.value, (int, float, str))
else None
)
return None

async def _get_times(self) -> pcputimes:
Expand Down

0 comments on commit c90c8f3

Please sign in to comment.