import time import adafruit_dht import board import RPi.GPIO as GPIO import http.server import threading import json sensor = adafruit_dht.DHT11(board.D31) LED_PIN = 40 FAN_PIN = 15 #stel GPIO in (ik hoop dat het werkt. ik kan het niet testen) GPIO.setmode(GPIO.BCM) GPIO.setup(LED_PIN, GPIO.OUT) GPIO.setup(FAN_PIN, GPIO.OUT) #array voor sensor data sensor_data = { 'tempc': 0.0, 'tempf': 0.0, 'humidity': 0.0, 'led': False, 'fan': False } fan_timer_start = 0 fan_timer_actief = False def check_data(): global fan_timer_actief, fan_timer_start while True: try: temperatuur_C = sensor.temperature temperatuur_F = temperatuur_C * (9/5) + 32 humidity = sensor.humidity sensor_data['tempc'] = temperatuur_C sensor_data['tempf'] = temperatuur_F sensor_data['humidity'] = humidity except RuntimeError as err: print(err.args[0]) # zet fan en led aan als temperatuur hoger is dan 20 C if temperatuur_C > 20: GPIO.output(LED_PIN, GPIO.HIGH) GPIO.output(FAN_PIN, GPIO.HIGH) sensor_data['led'] = True sensor_data['fan'] = True fan_timer_actief = False fan_timer_start = 0 else: if sensor_data['fan'] == True and fan_timer_actief == False: fan_timer_actief = True fan_timer_start = time.time() sensor_data['fan'] = True sensor_data['led'] = False GPIO.output(FAN_PIN, GPIO.HIGH) GPIO.output(LED_PIN, GPIO.LOW) elif sensor_data['fan'] == True and fan_timer_actief == True and time.time() - fan_timer_start > 300: # 5 minuten fan_timer_actief = False fan_timer_start = 0 sensor_data['fan'] = False sensor_data['led'] = False GPIO.output(FAN_PIN, GPIO.LOW) GPIO.output(LED_PIN, GPIO.LOW) else: fan_timer_actief = False fan_timer_start = 0 sensor_data['fan'] = False sensor_data['led'] = False GPIO.output(FAN_PIN, GPIO.LOW) GPIO.output(LED_PIN, GPIO.LOW) class handler_class(http.server.BaseHTTPRequestHandler): def do_GET (self): if self.path == '/': #headers self.send_response(200) self.send_header('Content-type', 'text/html; charset=utf-8') self.end_headers() #html website website = """
Temp_C = --C
Temp_F = --F
humidity = --%
LED = UIT
FAN = UIT
""" self.wfile.write(website.encode()) elif self.path == '/data': self.send_response(200) self.send_header('Content-type', 'application/json') self.end_headers() self.wfile.write(json.dumps(sensor_data).encode()) def web_server(): #web server port en IP binding web_binding = ('', 8000) server = http.server.HTTPServer(web_binding, handler_class) print ("server draait op port 8000") server.serve_forever() if __name__ == '__main__': threading.Thread(target=web_server, daemon=True).start() threading.Thread(target=check_data, daemon=True).start() while True: time.sleep(1)