This commit is contained in:
2026-03-26 12:10:21 +01:00
parent 1f4970c17c
commit d4d76db890
877 changed files with 631941 additions and 26195 deletions

View File

@@ -0,0 +1,292 @@
substitutions:
exit_icon: "\U0000e902"
globals:
- id: ${widget_name}_light_is_on
type: bool
initial_value: 'false'
- id: ${widget_name}_current_brightness
type: float
initial_value: '1.0'
- id: ${widget_name}_updating_from_ha
type: bool
initial_value: 'false'
- id: ${widget_name}_ha_data_received
type: bool
initial_value: 'false'
- id: ${widget_name}_sensors_ready_count
type: int
initial_value: '0'
sensor:
# Brightness sensor
- platform: homeassistant
id: ${widget_name}_light_rgb_sensor_brightness
entity_id: "${light_entity}"
attribute: brightness
on_value:
- if:
condition:
lambda: 'return !std::isnan(x);'
then:
- lambda: |-
static bool first_brightness_received = false;
if (!first_brightness_received) {
first_brightness_received = true;
id(${widget_name}_sensors_ready_count) += 1;
}
- if:
condition:
lambda: 'return !id(${widget_name}_updating_from_ha);'
then:
- globals.set:
id: ${widget_name}_current_brightness
value: !lambda return x;
- lvgl.slider.update:
id: ${widget_name}_light_rgb_brightness_slider
value: !lambda return int(x);
else:
- if:
condition:
lambda: 'return !id(${widget_name}_updating_from_ha);'
then:
- globals.set:
id: ${widget_name}_current_brightness
value: '0.0'
- lvgl.slider.update:
id: ${widget_name}_light_rgb_brightness_slider
value: 0
- script.execute: ${widget_name}_check_all_data_ready
text_sensor:
- platform: homeassistant
id: ${widget_name}_light_rgb_state
entity_id: "${light_entity}"
on_value:
- lambda: |-
bool is_on = (x == "on");
bool was_on = id(${widget_name}_light_is_on);
id(${widget_name}_light_is_on) = is_on;
static bool first_state_received = false;
if (!first_state_received) {
first_state_received = true;
id(${widget_name}_sensors_ready_count) += 1;
}
- if:
condition:
lambda: 'return id(${widget_name}_light_is_on);'
then:
- lvgl.button.update:
id: ${widget_name}_light_rgb_light_on
bg_color: color_amber
shadow_color: color_amber
shadow_opa: 100%
- lvgl.label.update:
id: ${widget_name}_light_on
text_color: color_amber
else:
- lvgl.button.update:
id: ${widget_name}_light_rgb_light_on
bg_color: color_white
shadow_opa: TRANSP
- lvgl.label.update:
id: ${widget_name}_light_on
text_color: color_steel_blue
- script.execute: ${widget_name}_check_all_data_ready
- platform: homeassistant
id: ${widget_name}_light_rgb_name
entity_id: "${light_entity}"
attribute: friendly_name
on_value:
then:
- lvgl.label.update:
id: ${widget_name}_light_rgb_lable_name
text: !lambda return x;
lvgl:
pages:
- id: ${widget_name}_light_rgb_page
bg_color: color_slate_blue_gray
widgets:
- button:
id: ${widget_name}_light_rgb_bg_name
y: 20
width: 440
height: 40
align: TOP_MID
bg_color: color_steel_blue
bg_opa: 20%
shadow_opa: TRANSP
radius: 10
widgets:
- label:
id: ${widget_name}_light_rgb_lable_name
align: CENTER
text_font: nunito_16
text_color: color_misty_blue
text: "lightbulb"
- button:
id: ${widget_name}_light_rgb_bg_lightbulb
x: 20
y: 80
width: 200
height: 280
align: TOP_LEFT
bg_color: color_steel_blue
bg_opa: 20%
shadow_opa: TRANSP
radius: 10
widgets:
- button:
id: ${widget_name}_light_rgb_light_on
width: 70
height: 70
y: 74
align: TOP_MID
bg_color: color_white
shadow_color: color_white
shadow_ofs_y: -3
shadow_spread: 3
shadow_width: 15
radius: 40
- image:
y: 30
align: CENTER
src: lightbulb_image
id: ${widget_name}_lightbulb_image
- button:
id: ${widget_name}_light_rgb_light_on_btn
width: 200
height: 280
align: CENTER
bg_opa: TRANSP
shadow_opa: TRANSP
on_press:
- homeassistant.service:
service: light.toggle
data:
entity_id: "${light_entity}"
- obj:
id: ${widget_name}_light_rgb_bg_slider
x: -20
y: 80
width: 220
height: 380
align: TOP_RIGHT
bg_color: color_steel_blue
bg_opa: 20%
border_opa: TRANSP
shadow_opa: TRANSP
radius: 20
widgets:
- button:
id: ${widget_name}_light_rgb_brightness_gradient
radius: 20
width: 100
height: 300
align: CENTER
bg_color: color_slate_blue_gray
bg_opa: 100%
shadow_opa: TRANSP
- slider:
id: ${widget_name}_light_rgb_brightness_slider
radius: 20
width: 100
height: 300
align: CENTER
bg_opa: TRANSP
min_value: 3
max_value: 255
indicator:
bg_color: color_amber
radius: 10
knob:
bg_opa: TRANSP
on_value:
- if:
condition:
lambda: 'return !id(${widget_name}_updating_from_ha) && id(${widget_name}_ha_data_received);'
then:
- globals.set:
id: ${widget_name}_current_brightness
value: !lambda return x;
- if:
condition:
lambda: 'return !id(${widget_name}_light_is_on) && x > 3;'
then:
- homeassistant.service:
service: light.turn_on
data:
entity_id: "${light_entity}"
brightness: !lambda return int(x);
on_release:
- if:
condition:
lambda: 'return id(${widget_name}_ha_data_received);'
then:
- if:
condition:
lambda: 'return x <= 3;'
then:
- homeassistant.service:
service: light.turn_off
data:
entity_id: "${light_entity}"
else:
- homeassistant.service:
service: light.turn_on
data:
entity_id: "${light_entity}"
brightness: !lambda return int(x);
- button:
id: ${widget_name}_light_rgb_exit_on_btn
x: 20
y: -20
width: 200
height: 80
align: BOTTOM_LEFT
bg_color: color_steel_blue
bg_opa: 20%
border_opa: TRANSP
shadow_opa: TRANSP
radius: 10
widgets:
- label:
id: ${widget_name}_light_rgb_exit_on_icon
align: CENTER
text_font: icons_28
text_color: color_misty_blue
text: "${exit_icon}"
on_press:
then:
- lvgl.widget.show: menu_controls_main
- lvgl.page.show:
id: lights_group_page
animation: OUT_RIGHT
time: 300ms
script:
- id: ${widget_name}_check_all_data_ready
mode: restart
then:
- delay: 500ms
- lambda: |-
if (id(${widget_name}_sensors_ready_count) >= 2) {
if (!id(${widget_name}_ha_data_received)) {
id(${widget_name}_ha_data_received) = true;
id(${widget_name}_updating_from_ha) = false;
}
}