diff --git a/haizemailea/fan_control b/haizemailea/fan_control index e69de29..27fb5dc 100644 --- a/haizemailea/fan_control +++ b/haizemailea/fan_control @@ -0,0 +1,53 @@ +#!/usr/bin/python3 + +import RPi.GPIO as GPIO +import subprocess +import time + +class FanStatus(object): + + ON_THRESHOLD = 50 # 50 (gradu zentigradu) Haizemailea pizten da. + OFF_THRESHOLD = 43 # 43 (gradu zentrigadu) Haizemailea itzaltzen da. + SLEEP_INTERVAL = 20 # (segundoak) Tenperatura neurketa maiztasuna. + + def __init__(self): + super(FanStatus, self).__init__() + self.FanPin = 27 # pin13 + + def setup(self): + GPIO.setwarnings(False) + GPIO.setmode(GPIO.BCM) + GPIO.setup(self.FanPin, GPIO.OUT) + + def get_temp(self): + output = subprocess.run(['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('Akatsa tenperatura eskuratzerakoan') + + def main(self): + # Piztu/Itzaldu balioak egokiak direla ziurtatu + if self.OFF_THRESHOLD >= self.ON_THRESHOLD: + raise RuntimeError('Konfiguraketa akatsa -> ITZALTZE tenperatura PIZTE tenperatura baina txikiagoa izan behar da!') + + while True: + temp = f_status.get_temp() + if temp > self.ON_THRESHOLD and not GPIO.input(self.FanPin): + GPIO.output(self.FanPin, True) + elif GPIO.input(self.FanPin) and temp < self.OFF_THRESHOLD: + GPIO.output(self.FanPin, False) + time.sleep(self.SLEEP_INTERVAL) + + def destroy(self): + GPIO.cleanup() + +f_status = FanStatus() + +if __name__ == '__main__': + f_status.setup() + try: + f_status.main() + except KeyboardInterrupt: + f_status.destroy() \ No newline at end of file