Last active
November 22, 2021 05:11
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
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