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; } }