from dataclasses import dataclass from psutil import sensors_temperatures @dataclass class TemperatureSensor: sensor_type: str sensor_label: str current_temp: float highest_temp: float | None = None critical_temp: float | None = None class Sensors: @staticmethod def get_temperatures() -> dict[str, list[TemperatureSensor]]: psutil_temp_sensors = sensors_temperatures() temp_sensors = {} for s_type, sensors in psutil_temp_sensors.items(): if s_type not in temp_sensors.keys(): temp_sensors[s_type] = [] match(s_type): case "nvme": for sensor in sensors: temp_sensors[s_type].append(TemperatureSensor( sensor_type=s_type, sensor_label=sensor.label, current_temp=sensor.current, highest_temp=sensor.high, critical_temp=sensor.critical )) case "amdgpu": temp_sensors[s_type].append(TemperatureSensor( sensor_type=s_type, sensor_label="Integrated GPU", current_temp=sensors[0].current, )) case "k10temp": temp_sensors[s_type].append(TemperatureSensor( sensor_type=s_type, sensor_label="AMD CPU", current_temp=sensors[0].current, critical_temp=95.0 # hardcoded because we have R9 7900X )) return temp_sensors if __name__ == "__main__": for i in Sensors.get_temperatures(): print(i)