diff --git a/src/climate.py b/src/handler/climate.py similarity index 100% rename from src/climate.py rename to src/handler/climate.py diff --git a/src/history.py b/src/handler/history.py similarity index 100% rename from src/history.py rename to src/handler/history.py diff --git a/src/matrix.py b/src/handler/matrix.py similarity index 100% rename from src/matrix.py rename to src/handler/matrix.py diff --git a/src/main.py b/src/main.py index b8195dd..7c25bc1 100644 --- a/src/main.py +++ b/src/main.py @@ -2,11 +2,11 @@ import os from fastapi import FastAPI, HTTPException from datetime import datetime import requests -from history import get_recent_entries -from matrix import MatrixDisplay +from handler.history import get_recent_entries +from handler.matrix import MatrixDisplay from fastapi.middleware.cors import CORSMiddleware import asyncio -from climate import Dht22Sensor +from handler.climate import Dht22Sensor app = FastAPI() @@ -14,7 +14,7 @@ origins = [ "http://localhost", "http://localhost:8000", "http://raspberrypi", - "http://192.168.178.84" + "http://192.168.178.84", ] app.add_middleware( @@ -32,24 +32,28 @@ climate_log_file = "./climate.csv" matrix_display = MatrixDisplay() dht22_sensor = Dht22Sensor(dht22_pin) + # Start background service to log temperature and humidity every minute async def log_temperature(): # If file does not exist, create it and write header if not os.path.isfile(climate_log_file): with open(climate_log_file, "w") as f: f.write("timestamp,temperature,humidity\n") - + while True: measurements = dht22_sensor.read() if measurements is not None: with open(climate_log_file, "a") as f: - f.write("{},{},{}\n".format( - datetime.now().isoformat(), - measurements["temperature"], - measurements["humidity"] - )) + f.write( + "{},{},{}\n".format( + datetime.now().isoformat(), + measurements["temperature"], + measurements["humidity"], + ) + ) await asyncio.sleep(60) + async def display_time(): while should_run_time_loop: try: @@ -64,12 +68,10 @@ async def display_time(): await asyncio.sleep(seconds_until_next_minute) - asyncio.create_task(display_time()) asyncio.create_task(log_temperature()) - @app.post("/time") async def start_time_loop(): global should_run_time_loop @@ -86,25 +88,22 @@ async def turn_off(): return {"message": "Display turned off"} - @app.post("/temperature") async def temperature(): measurements = dht22_sensor.get_last_read() if measurements is None: return {"message": "Failed to read temperature"} - - + global should_run_time_loop was_clock_runnign = should_run_time_loop should_run_time_loop = False - - + matrix_display.show_text("{0:0.1f}*C".format(measurements["temperature"])) - + if was_clock_runnign: should_run_time_loop = True asyncio.create_task(display_time()) - + return measurements @@ -113,19 +112,17 @@ async def humidity(): measurements = dht22_sensor.get_last_read() if measurements is None: return {"message": "Failed to read humidity"} - - + global should_run_time_loop was_clock_runnign = should_run_time_loop should_run_time_loop = False - - + matrix_display.show_text("{0:0.1f}%".format(measurements["humidity"])) - + if was_clock_runnign: should_run_time_loop = True asyncio.create_task(display_time()) - + return measurements @@ -140,9 +137,9 @@ async def flash(count: int = 1): global should_run_time_loop was_clock_runnign = should_run_time_loop should_run_time_loop = False - + matrix_display.flash(count) - + if was_clock_runnign: should_run_time_loop = True asyncio.create_task(display_time())