API Input CSS rework:
- Remove led_count field from ApiInputColorStripSource (always auto-sizes)
- Add segment-based payload: solid, per_pixel, gradient modes
- Segments applied in order (last wins on overlap), auto-grow buffer
- Backward compatible: legacy {"colors": [...]} still works
- Pydantic validation: mode-specific field requirements
Test preview:
- Enable test preview button on api_input cards
- Hide LED/FPS controls for api_input (sender controls those)
- Show input source selector for all CSS tests (preselected)
- FPS sparkline chart using shared createFpsSparkline (same as target cards)
- Server only sends frames when push_generation changes (no idle frames)
HAOS integration:
- New light.py: ApiInputLight entity per api_input source (RGB + brightness)
- turn_on pushes solid segment, turn_off pushes fallback color
- Register wled_screen_controller.set_leds service for arbitrary segments
- New services.yaml with field definitions
- Coordinator: push_colors() and push_segments() methods
- Platform.LIGHT added to platforms list
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
92 lines
2.2 KiB
JSON
92 lines
2.2 KiB
JSON
{
|
|
"config": {
|
|
"step": {
|
|
"user": {
|
|
"title": "Set up LED Screen Controller",
|
|
"description": "Enter the URL and API key for your LED Screen Controller server.",
|
|
"data": {
|
|
"server_name": "Server Name",
|
|
"server_url": "Server URL",
|
|
"api_key": "API Key"
|
|
},
|
|
"data_description": {
|
|
"server_name": "Display name for this server in Home Assistant",
|
|
"server_url": "URL of your LED Screen Controller server (e.g., http://192.168.1.100:8080)",
|
|
"api_key": "API key from your server's configuration file"
|
|
}
|
|
}
|
|
},
|
|
"error": {
|
|
"cannot_connect": "Failed to connect to server.",
|
|
"invalid_api_key": "Invalid API key.",
|
|
"unknown": "Unexpected error occurred."
|
|
},
|
|
"abort": {
|
|
"already_configured": "This server is already configured."
|
|
}
|
|
},
|
|
"entity": {
|
|
"button": {
|
|
"activate_scene": {
|
|
"name": "{scene_name}"
|
|
}
|
|
},
|
|
"light": {
|
|
"api_input_light": {
|
|
"name": "Light"
|
|
}
|
|
},
|
|
"switch": {
|
|
"processing": {
|
|
"name": "Processing"
|
|
}
|
|
},
|
|
"sensor": {
|
|
"fps": {
|
|
"name": "FPS"
|
|
},
|
|
"status": {
|
|
"name": "Status",
|
|
"state": {
|
|
"processing": "Processing",
|
|
"idle": "Idle",
|
|
"error": "Error",
|
|
"unavailable": "Unavailable"
|
|
}
|
|
},
|
|
"rectangle_color": {
|
|
"name": "{rectangle_name} Color"
|
|
}
|
|
},
|
|
"number": {
|
|
"brightness": {
|
|
"name": "Brightness"
|
|
}
|
|
},
|
|
"select": {
|
|
"color_strip_source": {
|
|
"name": "Color Strip Source"
|
|
},
|
|
"brightness_source": {
|
|
"name": "Brightness Source"
|
|
}
|
|
}
|
|
},
|
|
"services": {
|
|
"set_leds": {
|
|
"name": "Set LEDs",
|
|
"description": "Push segment data to an api_input color strip source.",
|
|
"fields": {
|
|
"source_id": {
|
|
"name": "Source ID",
|
|
"description": "The api_input CSS source ID (e.g., css_abc12345)."
|
|
},
|
|
"segments": {
|
|
"name": "Segments",
|
|
"description": "List of segment objects with start, length, mode, and color/colors fields."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|