First version!
This commit is contained in:
1
projectorpi_web/__init__.py
Normal file
1
projectorpi_web/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
__version__ = '0.1.0'
|
||||
63
projectorpi_web/app.py
Normal file
63
projectorpi_web/app.py
Normal 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")
|
||||
Reference in New Issue
Block a user