system-scripts/fanctl.py

51 lines
1.3 KiB
Python
Executable File

#!/usr/bin/python3
import os
servo = 18
if true: # set to false to skip using dotenv
from dotenv import load_dotenv
load_dotenv()
servo = int(os.getenv('FANCTL_SERVO_PIN'))
import RPi.GPIO as IO
import time
import subprocess
IO.setwarnings(False)
IO.setmode (IO.BCM)
IO.setup(servo,IO.OUT)
fan = IO.PWM(servo,2000)
fan.start(0)
def get_temp():
output = subprocess.run(['/opt/vc/bin/vcgencmd', 'measure_temp'], capture_output=True)
temp_str = output.stdout.decode()
try:
return float(temp_str.split('=')[1].split('\'')[0])
except (IndexError, ValueError):
raise RuntimeError('Could not get temperature')
def set_speed(fan, speed):
fan.ChangeDutyCycle(speed)
while 1:
temp = get_temp() # Get the current CPU temperature
if temp > 60: # Check temperature threshhold, in degrees celcius
set_speed(fan, 100) # Set fan duty based on temperature, 100 is max speed and 0 is min speed or off.
elif temp > 50:
set_speed(fan, 85)
elif temp > 40:
set_speed(fan, 60)
elif temp > 35:
set_speed(fan, 50)
elif temp > 32:
set_speed(fan, 45)
elif temp > 25:
set_speed(fan, 40)
else:
set_speed(fan, 0)
time.sleep(5) # Sleep for 5 seconds