2022-02-01 07:31:24 +01:00
|
|
|
#!/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()
|