First version!

This commit is contained in:
2023-02-28 22:04:14 +01:00
commit 8053f78d85
8 changed files with 1434 additions and 0 deletions

View File

@@ -0,0 +1 @@
__version__ = '0.1.0'

63
projectorpi_web/app.py Normal file
View File

@@ -0,0 +1,63 @@
from fastapi import FastAPI, Path, HTTPException, status
from projectorpi.cli import ProjectorSerial, ExtronSerial
from pydantic import BaseModel
from requests import Response
app = FastAPI()
extron = ExtronSerial()
projector = ProjectorSerial()
class Response(BaseModel):
status: str
error: str | None = None
@app.post("/sleep", response_model=Response)
async def sleep() -> Response:
extron.sleep()
projector.power_off()
return Response(status="ok")
@app.post("/select/{input_id}", response_model=Response)
async def select(
input_id: int = Path(title="The input to select", ge=1, le=4),
) -> Response:
if extron.check_sleep():
extron.wake()
sleep(1)
extron.change_input(input_id)
if not projector.is_on():
projector.power_on()
return Response(status="ok")
@app.post("/control/{direction}", response_model=Response)
async def control(direction: str) -> Response:
match direction:
case "vol_up":
extron.volume_up()
case "vol_down":
extron.volume_down()
case "up":
extron.menu_up()
case "right":
extron.menu_right()
case "down":
extron.menu_down()
case "left":
extron.menu_left()
case "enter":
extron.menu_enter()
case "menu":
extron.menu_toggle()
case _:
raise HTTPException(status.HTTP_400_BAD_REQUEST, "invalid control")
return Response(status="ok")