Skip to content

Instantly share code, notes, and snippets.

@kionay
Last active November 22, 2021 05:11
Show Gist options
  • Save kionay/d7e2aeffdd94b4f39e35d5f13d62359e to your computer and use it in GitHub Desktop.
Save kionay/d7e2aeffdd94b4f39e35d5f13d62359e to your computer and use it in GitHub Desktop.
I have had recent need to keep a close eye on my CPU temperatures. Using CPUThermomenterLib and pythonnet based on a stackoverflow article guiding me to modify its generic code to this specific use.
"""
Access and log CPU temperatures.
Heavily adapted from
https://stackoverflow.com/questions/3262603/accessing-cpu-temperature-in-python
"""
import time
import logging
import sys
from typing import Generator
import clr
# reference provides access to OpenHardwareMonitor namespace
clr.AddReference("CPUThermometerLib")
from OpenHardwareMonitor import Hardware
def initialize_computer():
computer = Hardware.Computer()
computer.CPUEnabled = True
computer.Open()
return computer
def query_temperature(computer) -> Generator[str, None, None]:
cpu = computer.Hardware[0]
temp_sensors = [
sensor
for sensor in cpu.Sensors
if sensor.SensorType == Hardware.SensorType.Temperature
]
while True:
cpu.Update()
this_average = sum(sensor.Value for sensor in temp_sensors) / len(temp_sensors)
yield f"CPU Temperature: {this_average:.2f}°C"
time.sleep(2)
def initialize_logger():
temperature_logger = logging.Logger("temperature_tracker")
temperature_logger.setLevel(logging.INFO)
stdout_handler = logging.StreamHandler(sys.stdout)
file_handler = logging.FileHandler("cpu temperatures.log")
formatter = logging.Formatter(
"%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
stdout_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)
temperature_logger.addHandler(stdout_handler)
temperature_logger.addHandler(file_handler)
return temperature_logger
if __name__ == "__main__":
computer = initialize_computer()
logger = initialize_logger()
for temperature_result in query_temperature(computer):
logger.info(temperature_result)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment