Add per-target protocol selection (DDP/HTTP) and reorganize target editor
- Add protocol field (ddp/http) to storage, API schemas, routes, processor - WledTargetProcessor passes protocol to create_led_client(use_ddp=...) - Target editor: protocol dropdown + keepalive in collapsible Specific Settings - FPS, brightness threshold, adaptive FPS moved to main form area - Hide Specific Settings section for serial devices (protocol is WLED-only) - Card badge: show DDP/HTTP for WLED devices, Serial for serial devices Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -323,6 +323,7 @@ class ProcessorManager:
|
||||
brightness_value_source_id: str = "",
|
||||
min_brightness_threshold: int = 0,
|
||||
adaptive_fps: bool = False,
|
||||
protocol: str = "ddp",
|
||||
):
|
||||
"""Register a WLED target processor."""
|
||||
if target_id in self._processors:
|
||||
@@ -340,6 +341,7 @@ class ProcessorManager:
|
||||
brightness_value_source_id=brightness_value_source_id,
|
||||
min_brightness_threshold=min_brightness_threshold,
|
||||
adaptive_fps=adaptive_fps,
|
||||
protocol=protocol,
|
||||
ctx=self._build_context(),
|
||||
)
|
||||
self._processors[target_id] = proc
|
||||
|
||||
@@ -39,6 +39,7 @@ class WledTargetProcessor(TargetProcessor):
|
||||
brightness_value_source_id: str = "",
|
||||
min_brightness_threshold: int = 0,
|
||||
adaptive_fps: bool = False,
|
||||
protocol: str = "ddp",
|
||||
ctx: TargetContext = None,
|
||||
):
|
||||
super().__init__(target_id, ctx)
|
||||
@@ -50,6 +51,7 @@ class WledTargetProcessor(TargetProcessor):
|
||||
self._brightness_vs_id = brightness_value_source_id
|
||||
self._min_brightness_threshold = min_brightness_threshold
|
||||
self._adaptive_fps = adaptive_fps
|
||||
self._protocol = protocol
|
||||
|
||||
# Adaptive FPS / liveness probe runtime state
|
||||
self._effective_fps: int = self._target_fps
|
||||
@@ -95,7 +97,7 @@ class WledTargetProcessor(TargetProcessor):
|
||||
try:
|
||||
self._led_client = create_led_client(
|
||||
device_info.device_type, device_info.device_url,
|
||||
use_ddp=True, led_count=device_info.led_count,
|
||||
use_ddp=(self._protocol == "ddp"), led_count=device_info.led_count,
|
||||
baud_rate=device_info.baud_rate,
|
||||
send_latency_ms=device_info.send_latency_ms,
|
||||
rgbw=device_info.rgbw,
|
||||
@@ -373,6 +375,7 @@ class WledTargetProcessor(TargetProcessor):
|
||||
"errors": [metrics.last_error] if metrics.last_error else [],
|
||||
"device_streaming_reachable": self._device_reachable if self._is_running else None,
|
||||
"fps_effective": self._effective_fps if self._is_running else None,
|
||||
"protocol": self._protocol,
|
||||
}
|
||||
|
||||
def get_metrics(self) -> dict:
|
||||
|
||||
Reference in New Issue
Block a user