#! /usr/bin/env python3 from led import LED from gpiozero import CPUTemperature from time import sleep from math import fabs cpu = CPUTemperature() led = LED(8, freq=25000) led.set_duty_cycle(0) temp_levels = [45,50,55,60,65] last_value = -1 last_temp = 0 hyst = 2 while True: temp = cpu.temperature level = 0 for limit in temp_levels: if temp >= limit: level +=1 fan_speed_percent = int((100/len(temp_levels))*level) temp_diff = fabs(last_temp - temp) # print(f"Temp is {temp}°C and fan level is {level} at {fan_speed_percent}%") if fan_speed_percent != last_value and temp_diff > hyst: # print(f"CPU temp of {temp}°C is equal to level '{level}' with fan at {fan_speed_percent}%") led.set_duty_cycle(fan_speed_percent) last_value = fan_speed_percent last_temp = temp sleep(5)