matrix-clock/src/main.py

71 lines
1.8 KiB
Python
Raw Normal View History

2023-10-11 01:34:34 +02:00
from fastapi import FastAPI, HTTPException
from datetime import datetime
import requests
from matrix import MatrixDisplay
import asyncio
app = FastAPI()
matrix_display = MatrixDisplay()
should_run_time_loop = True
async def display_time():
while should_run_time_loop:
try:
matrix_display.show_current_time()
except requests.exceptions.RequestException as e:
raise HTTPException(
status_code=500,
detail=f"Failed to display time on the matrix display: {e}",
)
seconds_until_next_minute = 60 - datetime.now().second
await asyncio.sleep(seconds_until_next_minute)
@app.post("/time")
async def start_time_loop():
global should_run_time_loop
should_run_time_loop = True
asyncio.create_task(display_time())
return {"message": "Time loop started"}
2023-10-11 01:36:27 +02:00
@app.post("/off")
async def turn_off():
global should_run_time_loop
should_run_time_loop = False
2023-10-11 01:46:13 +02:00
matrix_display.turn_off()
2023-10-11 01:36:27 +02:00
return {"message": "Display turned off"}
@app.post("/flash")
async def flash(count: int = 1):
global should_run_time_loop
should_run_time_loop = False
2023-10-11 01:46:13 +02:00
matrix_display.flash(count)
2023-10-11 01:36:27 +02:00
return {"message": "Display flashed"}
2023-10-11 01:34:34 +02:00
@app.post("/message")
async def display_message(body: dict):
global should_run_time_loop
should_run_time_loop = False
message_text = body.get("message")
try:
2023-10-11 01:46:13 +02:00
matrix_display.show_text(message_text)
2023-10-11 01:34:34 +02:00
except requests.exceptions.RequestException as e:
raise HTTPException(
status_code=500,
detail=f"Failed to display message on the matrix display: {e}",
)
return {"message": "Message displayed"}
@app.post("/stop")
async def stop_time_loop():
global should_run_time_loop
should_run_time_loop = False
return {"message": "Time loop stopped"}