Add configurable baud rate for Adalight with dynamic FPS hint
Baud rate is now a first-class device field, passed through the full stack: Device model → API schemas → routes → ProcessorManager → AdalightClient. The frontend shows a baud rate dropdown (115200–2M) for Adalight devices in both Add Device and Settings modals, with a live "Max FPS ≈ N" hint computed from LED count and baud rate. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -32,6 +32,7 @@ class Device:
|
||||
led_count: int,
|
||||
enabled: bool = True,
|
||||
device_type: str = "wled",
|
||||
baud_rate: Optional[int] = None,
|
||||
calibration: Optional[CalibrationConfig] = None,
|
||||
created_at: Optional[datetime] = None,
|
||||
updated_at: Optional[datetime] = None,
|
||||
@@ -42,13 +43,14 @@ class Device:
|
||||
self.led_count = led_count
|
||||
self.enabled = enabled
|
||||
self.device_type = device_type
|
||||
self.baud_rate = baud_rate
|
||||
self.calibration = calibration or create_default_calibration(led_count)
|
||||
self.created_at = created_at or datetime.utcnow()
|
||||
self.updated_at = updated_at or datetime.utcnow()
|
||||
|
||||
def to_dict(self) -> dict:
|
||||
"""Convert device to dictionary."""
|
||||
return {
|
||||
d = {
|
||||
"id": self.id,
|
||||
"name": self.name,
|
||||
"url": self.url,
|
||||
@@ -59,6 +61,9 @@ class Device:
|
||||
"created_at": self.created_at.isoformat(),
|
||||
"updated_at": self.updated_at.isoformat(),
|
||||
}
|
||||
if self.baud_rate is not None:
|
||||
d["baud_rate"] = self.baud_rate
|
||||
return d
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, data: dict) -> "Device":
|
||||
@@ -81,6 +86,7 @@ class Device:
|
||||
led_count=data["led_count"],
|
||||
enabled=data.get("enabled", True),
|
||||
device_type=data.get("device_type", "wled"),
|
||||
baud_rate=data.get("baud_rate"),
|
||||
calibration=calibration,
|
||||
created_at=datetime.fromisoformat(data.get("created_at", datetime.utcnow().isoformat())),
|
||||
updated_at=datetime.fromisoformat(data.get("updated_at", datetime.utcnow().isoformat())),
|
||||
@@ -165,6 +171,7 @@ class DeviceStore:
|
||||
url: str,
|
||||
led_count: int,
|
||||
device_type: str = "wled",
|
||||
baud_rate: Optional[int] = None,
|
||||
calibration: Optional[CalibrationConfig] = None,
|
||||
) -> Device:
|
||||
"""Create a new device."""
|
||||
@@ -176,6 +183,7 @@ class DeviceStore:
|
||||
url=url,
|
||||
led_count=led_count,
|
||||
device_type=device_type,
|
||||
baud_rate=baud_rate,
|
||||
calibration=calibration,
|
||||
)
|
||||
|
||||
@@ -200,6 +208,7 @@ class DeviceStore:
|
||||
url: Optional[str] = None,
|
||||
led_count: Optional[int] = None,
|
||||
enabled: Optional[bool] = None,
|
||||
baud_rate: Optional[int] = None,
|
||||
calibration: Optional[CalibrationConfig] = None,
|
||||
) -> Device:
|
||||
"""Update device."""
|
||||
@@ -216,6 +225,8 @@ class DeviceStore:
|
||||
device.calibration = create_default_calibration(led_count)
|
||||
if enabled is not None:
|
||||
device.enabled = enabled
|
||||
if baud_rate is not None:
|
||||
device.baud_rate = baud_rate
|
||||
if calibration is not None:
|
||||
if calibration.get_total_leds() != device.led_count:
|
||||
raise ValueError(
|
||||
|
||||
Reference in New Issue
Block a user