Implemented basic device controls

This commit is contained in:
Jurn Wubben 2025-08-26 14:44:27 +02:00
parent aca30088b0
commit aefa4275d4
2 changed files with 214 additions and 132 deletions

113
db.py
View file

@ -1,65 +1,78 @@
from sqlmodel import Field, Session, SQLModel, create_engine, select
from netbrite import Colors, Fonts, Message, Priorities, ScrollSpeeds
# from __future__ import annotations
from sqlmodel import Field, Relationship, SQLModel
from netbrite import Colors, Fonts, Priorities, ScrollSpeeds, Message
class BaseZone(SQLModel, table=True, echo=True):
# --- Message ---
class MessageBase(SQLModel):
activation_delay: int = 0
display_delay: int = 0
display_repeat: int = 0
priority: Priorities = Priorities.OVERRIDE
text: str = ""
ttl: int = 0
class MessageDB(MessageBase, table=True):
id: int | None = Field(default=None, primary_key=True)
zone: "ZoneDB" = Relationship( # pyright: ignore[reportAny]
back_populates="default_message"
)
class MessagePublic(MessageBase):
id: int
zone: "ZoneDB"
# --- Device ---
class NetBriteBase(SQLModel):
address: str = Field(unique=True, index=True)
port: int = 700
class NetBriteDB(NetBriteBase, table=True):
id: int | None = Field(default=None, primary_key=True)
zones: list["ZoneDB"] = Relationship( # pyright: ignore[reportAny]
back_populates="netbrite"
)
class NetBritePublic(NetBriteBase):
id: int
zones: list["ZoneDB"]
active: bool
# --- Zone ---
class ZoneBase(SQLModel):
name: str
x: int
y: int
width: int
height: int
scroll_speed: ScrollSpeeds
pause_duration: int
volume: int
default_font: Fonts
default_color: Colors
scroll_speed: ScrollSpeeds = ScrollSpeeds.NORMAL
pause_duration: int = 1000
volume: int = 4
default_font: Fonts = Fonts.NORMAL_7
default_color: Colors = Colors.RED
default_message: int | None = Field(foreign_key="apimessages.id")
netbrite_device_id: int = Field(foreign_key="apinetbritedevice.id")
default_message_id: int | None = Field(default=None, foreign_key="messagedb.id")
netbrite_id: int = Field(default=None, foreign_key="netbritedb.id")
class APIGetZone(SQLModel, table=True, echo=True):
class ZoneDB(ZoneBase, table=True):
id: int | None = Field(default=None, primary_key=True)
x: int
y: int
width: int
height: int
scroll_speed: ScrollSpeeds
pause_duration: int
volume: int
default_font: Fonts
default_color: Colors
default_message: Message | None
default_message: MessageDB | None = Relationship( # pyright: ignore[reportAny]
back_populates="zone"
)
netbrite: NetBriteDB = Relationship( # pyright: ignore[reportAny]
back_populates="zones"
)
class APIMessages(SQLModel, table=True, echo=True):
id: int | None = Field(default=None, primary_key=True)
activation_delay: int
display_delay: int
display_repeat: int
priority: Priorities
text: str
ttl: int
class BaseNetBriteDevice(SQLModel, table=True, echo=True):
id: int | None = Field(default=None, primary_key=True)
address: str = Field(unique=True)
port: int = 700
class APIAddNetBriteDevice(SQLModel, table=False):
address: str
port: int = 700
class APIGetNetBriteDevice(SQLModel, table=False):
address: str
port: int = 700
connected: bool
zones: dict[str, APIGetZone]
class ZonePublic(ZoneBase):
id: int
default_message: MessagePublic
netbrite: NetBritePublic