Improved code structure

This commit is contained in:
Maximilian Giller 2023-12-17 21:04:39 +01:00
parent 20f8f64f25
commit feefd55e20
4 changed files with 24 additions and 27 deletions

View file

@ -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())