kopia lustrzana https://github.com/cyoung/stratux
46 wiersze
1.3 KiB
Python
Executable File
46 wiersze
1.3 KiB
Python
Executable File
#!/usr/bin/python
|
|
# @Author Ryan Dewsbury (helno)
|
|
#
|
|
# This script throttles a fan based on CPU temperature.
|
|
#
|
|
# It expects a fan that's externally powered, and uses GPIO pin 12 for control.
|
|
|
|
import RPi.GPIO as GPIO
|
|
import time
|
|
import os
|
|
|
|
from daemon import runner
|
|
|
|
class FanControl():
|
|
# Return CPU temperature as float
|
|
def getCPUtemp(self):
|
|
cTemp = os.popen('vcgencmd measure_temp').readline()
|
|
return float(cTemp.replace("temp=","").replace("'C\n",""))
|
|
|
|
def __init__(self):
|
|
self.stdin_path = '/dev/null'
|
|
self.stdout_path = '/var/log/fancontrol.log'
|
|
self.stderr_path = '/var/log/fancontrol.log'
|
|
self.pidfile_path = '/var/run/fancontrol.pid'
|
|
self.pidfile_timeout = 5
|
|
def run(self):
|
|
GPIO.setmode(GPIO.BOARD)
|
|
GPIO.setup(12, GPIO.OUT)
|
|
GPIO.setwarnings(False)
|
|
p=GPIO.PWM(12, 1000)
|
|
PWM = 50
|
|
while True:
|
|
CPU_temp = self.getCPUtemp()
|
|
if CPU_temp > 40.5:
|
|
PWM = min(max(PWM + 1, 0), 100)
|
|
p.start(PWM)
|
|
elif CPU_temp < 39.5:
|
|
PWM = min(max(PWM - 1, 0), 100)
|
|
p.start(PWM)
|
|
time.sleep(5)
|
|
GPIO.cleanup()
|
|
|
|
fancontrol = FanControl()
|
|
daemon_runner = runner.DaemonRunner(fancontrol)
|
|
daemon_runner.do_action()
|