Add LED type detection, improve device card layout
Some checks failed
Validate / validate (push) Failing after 9s
Some checks failed
Validate / validate (push) Failing after 9s
- Detect LED chip type (WS2812B, SK6812, etc.) from WLED /json/cfg - Show RGBW/RGB channel indicator with colored squares on device card - Move version, display index, LED count to subtitle row under device name - Add remove button as × icon in top-right corner of card - Hide latency from card display (still visible in health dot tooltip) - Fix display layout overflow on narrow viewports - Add wled_rgbw and wled_led_type to ProcessingState API schema Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -22,6 +22,19 @@ logger = get_logger(__name__)
|
||||
|
||||
DEFAULT_STATE_CHECK_INTERVAL = 30 # seconds between health checks
|
||||
|
||||
# WLED LED bus type codes from const.h → human-readable names
|
||||
WLED_LED_TYPES: Dict[int, str] = {
|
||||
18: "WS2812 1ch", 19: "WS2812 1ch x3", 20: "WS2812 CCT", 21: "WS2812 WWA",
|
||||
22: "WS2812B", 23: "GS8608", 24: "WS2811 400kHz", 25: "TM1829",
|
||||
26: "UCS8903", 27: "APA106", 28: "FW1906", 29: "UCS8904",
|
||||
30: "SK6812 RGBW", 31: "TM1814", 32: "WS2805", 33: "TM1914", 34: "SM16825",
|
||||
40: "On/Off", 41: "PWM 1ch", 42: "PWM 2ch", 43: "PWM 3ch",
|
||||
44: "PWM 4ch", 45: "PWM 5ch", 46: "PWM 6ch",
|
||||
50: "WS2801", 51: "APA102", 52: "LPD8806", 53: "P9813", 54: "LPD6803",
|
||||
65: "HUB75 HS", 66: "HUB75 QS",
|
||||
80: "DDP RGB", 81: "E1.31", 82: "Art-Net", 88: "DDP RGBW", 89: "Art-Net RGBW",
|
||||
}
|
||||
|
||||
|
||||
@dataclass
|
||||
class ProcessingSettings:
|
||||
@@ -48,6 +61,8 @@ class DeviceHealth:
|
||||
wled_name: Optional[str] = None
|
||||
wled_version: Optional[str] = None
|
||||
wled_led_count: Optional[int] = None
|
||||
wled_rgbw: Optional[bool] = None
|
||||
wled_led_type: Optional[str] = None
|
||||
error: Optional[str] = None
|
||||
|
||||
|
||||
@@ -433,6 +448,8 @@ class ProcessorManager:
|
||||
"wled_name": h.wled_name,
|
||||
"wled_version": h.wled_version,
|
||||
"wled_led_count": h.wled_led_count,
|
||||
"wled_rgbw": h.wled_rgbw,
|
||||
"wled_led_type": h.wled_led_type,
|
||||
"wled_last_checked": h.last_checked,
|
||||
"wled_error": h.error,
|
||||
"test_mode": state.test_mode_active,
|
||||
@@ -643,7 +660,23 @@ class ProcessorManager:
|
||||
response.raise_for_status()
|
||||
data = response.json()
|
||||
latency = (time.time() - start) * 1000
|
||||
wled_led_count = data.get("leds", {}).get("count")
|
||||
leds_info = data.get("leds", {})
|
||||
wled_led_count = leds_info.get("count")
|
||||
|
||||
# Fetch LED type from /json/cfg once (it's static config)
|
||||
wled_led_type = state.health.wled_led_type
|
||||
if wled_led_type is None:
|
||||
try:
|
||||
cfg = await client.get(f"{url}/json/cfg")
|
||||
cfg.raise_for_status()
|
||||
cfg_data = cfg.json()
|
||||
ins = cfg_data.get("hw", {}).get("led", {}).get("ins", [])
|
||||
if ins:
|
||||
type_code = ins[0].get("type", 0)
|
||||
wled_led_type = WLED_LED_TYPES.get(type_code, f"Type {type_code}")
|
||||
except Exception as cfg_err:
|
||||
logger.debug(f"Could not fetch LED type for {device_id}: {cfg_err}")
|
||||
|
||||
state.health = DeviceHealth(
|
||||
online=True,
|
||||
latency_ms=round(latency, 1),
|
||||
@@ -651,6 +684,8 @@ class ProcessorManager:
|
||||
wled_name=data.get("name"),
|
||||
wled_version=data.get("ver"),
|
||||
wled_led_count=wled_led_count,
|
||||
wled_rgbw=leds_info.get("rgbw", False),
|
||||
wled_led_type=wled_led_type,
|
||||
error=None,
|
||||
)
|
||||
except Exception as e:
|
||||
@@ -661,6 +696,8 @@ class ProcessorManager:
|
||||
wled_name=state.health.wled_name,
|
||||
wled_version=state.health.wled_version,
|
||||
wled_led_count=state.health.wled_led_count,
|
||||
wled_rgbw=state.health.wled_rgbw,
|
||||
wled_led_type=state.health.wled_led_type,
|
||||
error=str(e),
|
||||
)
|
||||
|
||||
@@ -684,5 +721,7 @@ class ProcessorManager:
|
||||
"wled_name": h.wled_name,
|
||||
"wled_version": h.wled_version,
|
||||
"wled_led_count": h.wled_led_count,
|
||||
"wled_rgbw": h.wled_rgbw,
|
||||
"wled_led_type": h.wled_led_type,
|
||||
"error": h.error,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user