From 347e20f5529582600d6d16bb808711f501171246 Mon Sep 17 00:00:00 2001 From: ESPHome Device Builder Date: Sat, 18 Jul 2026 20:23:54 +1200 Subject: [PATCH] Edit esp-bedside-panel.yaml --- esphome/esp-bedside-panel.yaml | 272 +++++++++++++++++++++++---------- 1 file changed, 195 insertions(+), 77 deletions(-) diff --git a/esphome/esp-bedside-panel.yaml b/esphome/esp-bedside-panel.yaml index a5b03ce..2a4c4d7 100644 --- a/esphome/esp-bedside-panel.yaml +++ b/esphome/esp-bedside-panel.yaml @@ -6,6 +6,7 @@ # https://home.fox.co.nz/gitea/zorruno/zorruno-homeassistant/src/branch/master/esphome/esp-bedside-panel.yaml #:########################################################################################:# # VERSIONS: +# V1.20 2026-07-18 Swapped Bedtime/Jobs, defaulted Doorbell and refined Climate icons # V1.18 2026-07-18 Added Lounge Fire, six Security cameras, Jobs page and weather/tide header # V1.17 2026-07-18 Swapped Bedroom Climate/Atto buttons and removed Garage test logs # V1.16 2026-07-17 Removed garage-door influence from Garage Lights button state @@ -89,7 +90,8 @@ # - Moon, Outdoor, Indoor and Humidity readings are positioned near the bottom. # - The display remains in its native 1024x600 landscape orientation. # - The default page contains nine Bedroom / nearby controls. -# - The bottom navigation row contains Bedtime, Atto, Climate, Security and Clock. +# - Compact Bedtime control is positioned beside the API connection indicator. +# - The bottom navigation row contains Jobs Summary, Atto, Climate, Security and Clock. # - Jobs Summary opens a reserved Jobs page with Back and Clock navigation. # - The Security page supports six selectable camera views. # - After the configured idle period: @@ -119,12 +121,12 @@ substitutions: # Device Naming device_name: "esp-bedside-panel" friendly_name: "ESP Bedside Panel" - description_comment: "Guition JC1060P470C_I_W_Y ESP32-P4 bedside control panel. Lounge Fire, six-camera Security, Jobs page and expanded weather/tide status. (Layout V1.1)" + description_comment: "Guition JC1060P470C_I_W_Y ESP32-P4 bedside control panel. Compact Bedtime, bottom Jobs Summary, Doorbell default and icon-refined Climate controls. (Layout V1.1)" device_area: "Bedroom" # Project Naming project_name: "Guition.JC1060P470C_I_W_Y" - project_version: "v1.18" + project_version: "v1.20" # Passwords & Secrets api_key: !secret esp-api_key @@ -579,6 +581,22 @@ font: - "\U000F0238" # mdi-fire - "\U000F0717" # mdi-snowflake + # Compact Climate-page icons. + - file: "https://raw.githubusercontent.com/Templarian/MaterialDesign-Webfont/master/fonts/materialdesignicons-webfont.ttf" + id: font_mdi_climate + size: 30 + bpp: 4 + glyphs: + - "\U000F0425" # mdi-power + - "\U000F0238" # mdi-fire + - "\U000F0717" # mdi-snowflake + - "\U000F0E0A" # mdi-water-outline + - "\U000F032A" # mdi-leaf + - "\U000F04C5" # mdi-speedometer + - "\U000F0768" # mdi-atom + - "\U000F1797" # mdi-ceiling-fan + - "\U000F0D43" # mdi-air-filter + # Bold Atto status/value font used for prominent second-line values. - file: type: gfonts @@ -1746,20 +1764,20 @@ script: id: ceiling_fan_cycle_label text: !lambda |- if (!id(ha_ceiling_fan_on).state) { - return std::string("Ceiling Fan: Off"); + return std::string("Fan:Off"); } const float percentage = id(ha_ceiling_fan_percentage).state; if (isnan(percentage) || percentage < 50.0f) { - return std::string("Ceiling Fan: Low"); + return std::string("Fan:Low"); } if (percentage < 85.0f) { - return std::string("Ceiling Fan: Medium"); + return std::string("Fan:Medium"); } - return std::string("Ceiling Fan: High"); + return std::string("Fan:High"); - lvgl.widget.update: id: ceiling_fan_cycle_button @@ -1768,7 +1786,29 @@ script: ? lv_color_hex(0x315E82) : lv_color_hex(0x28313D); - # Air Filter Quiet is highlighted for filter levels 0, 1 or 2. + # Air-filter text and Quiet highlighting. + - lvgl.label.update: + id: air_filter_quiet_label + text: !lambda |- + const float level = id(ha_air_filter_level).state; + + if (isnan(level)) { + return std::string("Filter:--"); + } + + if (level >= 0.0f && level <= 2.0f) { + return std::string("Filter:Quiet"); + } + + char buffer[24]; + snprintf( + buffer, + sizeof(buffer), + "Filter:%.0f", + level + ); + return std::string(buffer); + - lvgl.widget.update: id: air_filter_quiet_button bg_color: !lambda |- @@ -2621,46 +2661,47 @@ lvgl: shadow_width: 0 clickable: false - # Jobs Summary opens the future Jobs page. + # Compact Bedtime control beside the API connection indicator. - button: - id: jobs_summary_navigation_button + id: bedtime_button x: 50 y: 8 width: 210 height: 68 - bg_color: 0x263443 + bg_color: 0x3B3048 bg_opa: COVER border_width: 2 - border_color: 0x52677B + border_color: 0x735E88 radius: 13 pressed: - bg_color: 0x34495C + bg_color: 0x584668 widgets: - label: - x: 10 - y: 6 - width: 190 - text: "Jobs Summary" - text_font: font_header - text_align: CENTER - text_color: 0xAFC7DC - - - label: - id: bedroom_jobs_summary_value_label - x: 10 - y: 32 - width: 190 - text: "--" - text_font: font_header + id: bedtime_button_label + align: CENTER + text: "Bedtime\n(Hold)" + text_font: font_small text_align: CENTER text_color: 0xFFFFFF - on_click: - - lvgl.page.show: - id: jobs_page - animation: MOVE_LEFT - time: 220ms - # Divider between Jobs Summary and the compact status strip. + on_long_press: + then: + - homeassistant.action: + action: input_button.press + data: + entity_id: "${bedtime_button_entity}" + + - lvgl.label.update: + id: bedtime_button_label + text: "Activated" + + - delay: 2s + + - lvgl.label.update: + id: bedtime_button_label + text: "Bedtime\n(Hold)" + + # Divider between Bedtime and the compact status strip. - obj: x: 268 y: 11 @@ -3172,42 +3213,45 @@ lvgl: # BEDROOM PAGE BOTTOM NAVIGATION #:################################################################################:# - button: - id: bedtime_button + id: jobs_summary_navigation_button x: 18 y: 475 width: 190 height: 92 - widgets: - - label: - id: bedtime_button_label - align: CENTER - text: "Bedtime (Hold)" - text_font: font_button - text_color: 0xFFFFFF - bg_color: 0x3B3048 + bg_color: 0x263443 bg_opa: COVER border_width: 2 - border_color: 0x735E88 + border_color: 0x52677B radius: 16 pressed: - bg_color: 0x584668 + bg_color: 0x34495C + widgets: + - label: + x: 10 + y: 7 + width: 170 + text: "Jobs Summary" + text_font: font_header + text_align: CENTER + text_color: 0xAFC7DC - on_long_press: - then: - - homeassistant.action: - action: input_button.press - data: - entity_id: "${bedtime_button_entity}" + - label: + id: bedroom_jobs_summary_value_label + x: 10 + y: 29 + width: 170 + height: 54 + text: "--" + text_font: font_header + text_align: CENTER + text_color: 0xFFFFFF + long_mode: WRAP - - lvgl.label.update: - id: bedtime_button_label - text: "Activated" - - - delay: 2s - - - lvgl.label.update: - id: bedtime_button_label - text: "Bedtime (Hold)" + on_click: + - lvgl.page.show: + id: jobs_page + animation: MOVE_LEFT + time: 220ms - button: id: climate_navigation_button @@ -3295,6 +3339,7 @@ lvgl: on_click: - lambda: |- id(security_page_active) = true; + id(security_camera_selection) = 1; - lvgl.page.show: id: security_page @@ -4106,7 +4151,7 @@ lvgl: x: 220 y: 41 width: 782 - text: "Heat Pump" + text: "Master Bedroom Heat Pump" text_font: font_small text_align: CENTER text_color: 0x8FA0B3 @@ -4154,9 +4199,17 @@ lvgl: bg_color: 0x548C6C widgets: - label: - align: CENTER + align: TOP_MID + y: 9 + text: "\U000F0425" + text_font: font_mdi_climate + text_color: 0xFFFFFF + + - label: + align: BOTTOM_MID + y: -10 text: "Off" - text_font: font_button + text_font: font_small text_color: 0xFFFFFF on_click: - homeassistant.action: @@ -4179,9 +4232,17 @@ lvgl: bg_color: 0xB76822 widgets: - label: - align: CENTER + align: TOP_MID + y: 9 + text: "\U000F0238" + text_font: font_mdi_climate + text_color: 0xFFFFFF + + - label: + align: BOTTOM_MID + y: -10 text: "Heat" - text_font: font_button + text_font: font_small text_color: 0xFFFFFF on_click: - homeassistant.action: @@ -4204,9 +4265,17 @@ lvgl: bg_color: 0x2E6A96 widgets: - label: - align: CENTER + align: TOP_MID + y: 9 + text: "\U000F0717" + text_font: font_mdi_climate + text_color: 0xFFFFFF + + - label: + align: BOTTOM_MID + y: -10 text: "Cool" - text_font: font_button + text_font: font_small text_color: 0xFFFFFF on_click: - homeassistant.action: @@ -4229,9 +4298,17 @@ lvgl: bg_color: 0x32677F widgets: - label: - align: CENTER + align: TOP_MID + y: 9 + text: "\U000F0E0A" + text_font: font_mdi_climate + text_color: 0xFFFFFF + + - label: + align: BOTTOM_MID + y: -10 text: "Dehumid" - text_font: font_button + text_font: font_small text_color: 0xFFFFFF on_click: - homeassistant.action: @@ -4266,9 +4343,17 @@ lvgl: bg_color: 0x315843 widgets: - label: - align: CENTER + align: TOP_MID + y: 10 + text: "\U000F032A" + text_font: font_mdi_climate + text_color: 0xFFFFFF + + - label: + align: BOTTOM_MID + y: -12 text: "Quiet" - text_font: font_button + text_font: font_small text_color: 0xFFFFFF on_click: # Quiet toggles between Quiet and Normal. @@ -4351,9 +4436,17 @@ lvgl: bg_color: 0x6B4A86 widgets: - label: - align: CENTER + align: TOP_MID + y: 10 + text: "\U000F04C5" + text_font: font_mdi_climate + text_color: 0xFFFFFF + + - label: + align: BOTTOM_MID + y: -12 text: "Boost" - text_font: font_button + text_font: font_small text_color: 0xFFFFFF on_click: # Boost toggles between Boost and Normal. @@ -4436,9 +4529,17 @@ lvgl: bg_color: 0x315E82 widgets: - label: - align: CENTER + align: TOP_MID + y: 10 + text: "\U000F0768" + text_font: font_mdi_climate + text_color: 0xFFFFFF + + - label: + align: BOTTOM_MID + y: -12 text: "Nanoe-X" - text_font: font_button + text_font: font_small text_color: 0xFFFFFF on_click: - lambda: |- @@ -4557,10 +4658,18 @@ lvgl: pressed: bg_color: 0x315E82 widgets: + - label: + align: LEFT_MID + x: 18 + text: "\U000F1797" + text_font: font_mdi_climate + text_color: 0xFFFFFF + - label: id: ceiling_fan_cycle_label align: CENTER - text: "Ceiling Fan: Off" + x: 18 + text: "Fan:Off" text_font: font_small text_color: 0xFFFFFF on_click: @@ -4636,8 +4745,17 @@ lvgl: bg_color: 0x315843 widgets: - label: + align: LEFT_MID + x: 18 + text: "\U000F0D43" + text_font: font_mdi_climate + text_color: 0xFFFFFF + + - label: + id: air_filter_quiet_label align: CENTER - text: "Air Filter: Quiet" + x: 18 + text: "Filter:Quiet" text_font: font_small text_color: 0xFFFFFF on_click: