#!/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()