Add software brightness control for Adalight devices
Emulates hardware brightness by multiplying pixel values before serial send. Stored per-device and persisted across restarts. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -323,8 +323,9 @@ async def get_device_brightness(
|
||||
device_id: str,
|
||||
_auth: AuthRequired,
|
||||
store: DeviceStore = Depends(get_device_store),
|
||||
manager: ProcessorManager = Depends(get_processor_manager),
|
||||
):
|
||||
"""Get current brightness from the WLED device."""
|
||||
"""Get current brightness from the device."""
|
||||
device = store.get_device(device_id)
|
||||
if not device:
|
||||
raise HTTPException(status_code=404, detail=f"Device {device_id} not found")
|
||||
@@ -332,6 +333,8 @@ async def get_device_brightness(
|
||||
raise HTTPException(status_code=400, detail=f"Brightness control is not supported for {device.device_type} devices")
|
||||
|
||||
try:
|
||||
if device.device_type == "adalight":
|
||||
return {"brightness": device.software_brightness}
|
||||
provider = get_provider(device.device_type)
|
||||
bri = await provider.get_brightness(device.url)
|
||||
return {"brightness": bri}
|
||||
@@ -346,8 +349,9 @@ async def set_device_brightness(
|
||||
body: dict,
|
||||
_auth: AuthRequired,
|
||||
store: DeviceStore = Depends(get_device_store),
|
||||
manager: ProcessorManager = Depends(get_processor_manager),
|
||||
):
|
||||
"""Set brightness on the WLED device directly."""
|
||||
"""Set brightness on the device."""
|
||||
device = store.get_device(device_id)
|
||||
if not device:
|
||||
raise HTTPException(status_code=404, detail=f"Device {device_id} not found")
|
||||
@@ -359,6 +363,14 @@ async def set_device_brightness(
|
||||
raise HTTPException(status_code=400, detail="brightness must be an integer 0-255")
|
||||
|
||||
try:
|
||||
if device.device_type == "adalight":
|
||||
device.software_brightness = bri
|
||||
device.updated_at = __import__("datetime").datetime.utcnow()
|
||||
store.save()
|
||||
# Update runtime state so the processing loop picks it up
|
||||
if device_id in manager._devices:
|
||||
manager._devices[device_id].software_brightness = bri
|
||||
return {"brightness": bri}
|
||||
provider = get_provider(device.device_type)
|
||||
await provider.set_brightness(device.url, bri)
|
||||
return {"brightness": bri}
|
||||
|
||||
Reference in New Issue
Block a user