Edit esp-bedside-panel.yaml
This commit is contained in:
+279
-292
@@ -179,7 +179,7 @@ substitutions:
|
|||||||
|
|
||||||
# Project Naming
|
# Project Naming
|
||||||
project_name: "Guition.JC1060P470C_I_W_Y"
|
project_name: "Guition.JC1060P470C_I_W_Y"
|
||||||
project_version: "v1.46"
|
project_version: "v1.47"
|
||||||
|
|
||||||
# Passwords & Secrets
|
# Passwords & Secrets
|
||||||
api_key: !secret esp-api_key
|
api_key: !secret esp-api_key
|
||||||
@@ -1731,42 +1731,42 @@ globals:
|
|||||||
- id: alarm_enabled
|
- id: alarm_enabled
|
||||||
type: bool[4]
|
type: bool[4]
|
||||||
restore_value: true
|
restore_value: true
|
||||||
initial_value: '{false, false, false, false}'
|
initial_value: "{false, false, false, false}"
|
||||||
|
|
||||||
- id: alarm_hour
|
- id: alarm_hour
|
||||||
type: uint8_t[4]
|
type: uint8_t[4]
|
||||||
restore_value: true
|
restore_value: true
|
||||||
initial_value: '{7, 7, 7, 7}'
|
initial_value: "{7, 7, 7, 7}"
|
||||||
|
|
||||||
- id: alarm_minute
|
- id: alarm_minute
|
||||||
type: uint8_t[4]
|
type: uint8_t[4]
|
||||||
restore_value: true
|
restore_value: true
|
||||||
initial_value: '{0, 0, 0, 0}'
|
initial_value: "{0, 0, 0, 0}"
|
||||||
|
|
||||||
- id: alarm_day_mask
|
- id: alarm_day_mask
|
||||||
type: uint8_t[4]
|
type: uint8_t[4]
|
||||||
restore_value: true
|
restore_value: true
|
||||||
initial_value: '{31, 31, 31, 31}'
|
initial_value: "{31, 31, 31, 31}"
|
||||||
|
|
||||||
- id: alarm_snooze_enabled
|
- id: alarm_snooze_enabled
|
||||||
type: bool[4]
|
type: bool[4]
|
||||||
restore_value: true
|
restore_value: true
|
||||||
initial_value: '{false, false, false, false}'
|
initial_value: "{false, false, false, false}"
|
||||||
|
|
||||||
- id: alarm_vibrate_option
|
- id: alarm_vibrate_option
|
||||||
type: uint8_t[4]
|
type: uint8_t[4]
|
||||||
restore_value: true
|
restore_value: true
|
||||||
initial_value: '{1, 1, 1, 1}'
|
initial_value: "{1, 1, 1, 1}"
|
||||||
|
|
||||||
- id: alarm_sound_option
|
- id: alarm_sound_option
|
||||||
type: uint8_t[4]
|
type: uint8_t[4]
|
||||||
restore_value: true
|
restore_value: true
|
||||||
initial_value: '{1, 1, 1, 1}'
|
initial_value: "{1, 1, 1, 1}"
|
||||||
|
|
||||||
- id: alarm_lamp_enabled
|
- id: alarm_lamp_enabled
|
||||||
type: bool[4]
|
type: bool[4]
|
||||||
restore_value: true
|
restore_value: true
|
||||||
initial_value: '{false, false, false, false}'
|
initial_value: "{false, false, false, false}"
|
||||||
|
|
||||||
# Temporary values used by the shared time-editor page.
|
# Temporary values used by the shared time-editor page.
|
||||||
- id: alarm_edit_row
|
- id: alarm_edit_row
|
||||||
@@ -2345,7 +2345,6 @@ script:
|
|||||||
|
|
||||||
- script.execute: refresh_alarm_audio_controls
|
- script.execute: refresh_alarm_audio_controls
|
||||||
|
|
||||||
|
|
||||||
#:######################################################################################:#
|
#:######################################################################################:#
|
||||||
# ALARM CLOCK AUDIO TESTING
|
# ALARM CLOCK AUDIO TESTING
|
||||||
#:######################################################################################:#
|
#:######################################################################################:#
|
||||||
@@ -2756,7 +2755,6 @@ script:
|
|||||||
|
|
||||||
- script.execute: refresh_alarm_audio_controls
|
- script.execute: refresh_alarm_audio_controls
|
||||||
|
|
||||||
|
|
||||||
#:######################################################################################:#
|
#:######################################################################################:#
|
||||||
# ALARM CLOCK TIME EDITOR
|
# ALARM CLOCK TIME EDITOR
|
||||||
#:######################################################################################:#
|
#:######################################################################################:#
|
||||||
@@ -3099,7 +3097,6 @@ script:
|
|||||||
|
|
||||||
return lv_color_hex(0x28313D);
|
return lv_color_hex(0x28313D);
|
||||||
|
|
||||||
|
|
||||||
- lvgl.label.update:
|
- lvgl.label.update:
|
||||||
id: job_1_status_label
|
id: job_1_status_label
|
||||||
text: !lambda |-
|
text: !lambda |-
|
||||||
@@ -3277,7 +3274,6 @@ script:
|
|||||||
|
|
||||||
return state;
|
return state;
|
||||||
|
|
||||||
|
|
||||||
- lvgl.widget.update:
|
- lvgl.widget.update:
|
||||||
id: job_2_button
|
id: job_2_button
|
||||||
bg_color: !lambda |-
|
bg_color: !lambda |-
|
||||||
@@ -3305,7 +3301,6 @@ script:
|
|||||||
|
|
||||||
return lv_color_hex(0x28313D);
|
return lv_color_hex(0x28313D);
|
||||||
|
|
||||||
|
|
||||||
- lvgl.label.update:
|
- lvgl.label.update:
|
||||||
id: job_2_status_label
|
id: job_2_status_label
|
||||||
text: !lambda |-
|
text: !lambda |-
|
||||||
@@ -3483,7 +3478,6 @@ script:
|
|||||||
|
|
||||||
return state;
|
return state;
|
||||||
|
|
||||||
|
|
||||||
- lvgl.widget.update:
|
- lvgl.widget.update:
|
||||||
id: job_3_button
|
id: job_3_button
|
||||||
bg_color: !lambda |-
|
bg_color: !lambda |-
|
||||||
@@ -3511,7 +3505,6 @@ script:
|
|||||||
|
|
||||||
return lv_color_hex(0x28313D);
|
return lv_color_hex(0x28313D);
|
||||||
|
|
||||||
|
|
||||||
- lvgl.label.update:
|
- lvgl.label.update:
|
||||||
id: job_3_status_label
|
id: job_3_status_label
|
||||||
text: !lambda |-
|
text: !lambda |-
|
||||||
@@ -3689,7 +3682,6 @@ script:
|
|||||||
|
|
||||||
return state;
|
return state;
|
||||||
|
|
||||||
|
|
||||||
- lvgl.widget.update:
|
- lvgl.widget.update:
|
||||||
id: job_4_button
|
id: job_4_button
|
||||||
bg_color: !lambda |-
|
bg_color: !lambda |-
|
||||||
@@ -3717,7 +3709,6 @@ script:
|
|||||||
|
|
||||||
return lv_color_hex(0x28313D);
|
return lv_color_hex(0x28313D);
|
||||||
|
|
||||||
|
|
||||||
- lvgl.label.update:
|
- lvgl.label.update:
|
||||||
id: job_4_status_label
|
id: job_4_status_label
|
||||||
text: !lambda |-
|
text: !lambda |-
|
||||||
@@ -3895,7 +3886,6 @@ script:
|
|||||||
|
|
||||||
return state;
|
return state;
|
||||||
|
|
||||||
|
|
||||||
- lvgl.widget.update:
|
- lvgl.widget.update:
|
||||||
id: job_5_button
|
id: job_5_button
|
||||||
bg_color: !lambda |-
|
bg_color: !lambda |-
|
||||||
@@ -3923,7 +3913,6 @@ script:
|
|||||||
|
|
||||||
return lv_color_hex(0x28313D);
|
return lv_color_hex(0x28313D);
|
||||||
|
|
||||||
|
|
||||||
- lvgl.label.update:
|
- lvgl.label.update:
|
||||||
id: job_5_status_label
|
id: job_5_status_label
|
||||||
text: !lambda |-
|
text: !lambda |-
|
||||||
@@ -4101,7 +4090,6 @@ script:
|
|||||||
|
|
||||||
return state;
|
return state;
|
||||||
|
|
||||||
|
|
||||||
# Update Bedroom and Clock status values after LVGL has finished constructing.
|
# Update Bedroom and Clock status values after LVGL has finished constructing.
|
||||||
- id: refresh_header_status
|
- id: refresh_header_status
|
||||||
mode: restart
|
mode: restart
|
||||||
@@ -4591,298 +4579,298 @@ script:
|
|||||||
return id(lvgl_ready);
|
return id(lvgl_ready);
|
||||||
|
|
||||||
then:
|
then:
|
||||||
# Lounge gas-heater state and user-facing status text.
|
# Lounge gas-heater state and user-facing status text.
|
||||||
- lvgl.label.update:
|
- lvgl.label.update:
|
||||||
id: lounge_fire_button_label
|
id: lounge_fire_button_label
|
||||||
text: !lambda |-
|
text: !lambda |-
|
||||||
const auto status = id(ha_lounge_fire_status).state;
|
const auto status = id(ha_lounge_fire_status).state;
|
||||||
|
|
||||||
if (
|
if (
|
||||||
status.empty() ||
|
status.empty() ||
|
||||||
status == "unknown" ||
|
status == "unknown" ||
|
||||||
status == "unavailable"
|
status == "unavailable"
|
||||||
) {
|
) {
|
||||||
return std::string("Fire: --");
|
return std::string("Fire: --");
|
||||||
}
|
}
|
||||||
|
|
||||||
return std::string("Fire: ") + status;
|
return std::string("Fire: ") + status;
|
||||||
|
|
||||||
- lvgl.widget.update:
|
- lvgl.widget.update:
|
||||||
id: lounge_fire_button
|
id: lounge_fire_button
|
||||||
bg_color: !lambda |-
|
bg_color: !lambda |-
|
||||||
return id(ha_lounge_fire).state
|
return id(ha_lounge_fire).state
|
||||||
? lv_color_hex(0x8A3F22)
|
? lv_color_hex(0x8A3F22)
|
||||||
: lv_color_hex(0x28313D);
|
: lv_color_hex(0x28313D);
|
||||||
|
|
||||||
# Heat-pump mode buttons. The requested mode wins while a change is
|
# Heat-pump mode buttons. The requested mode wins while a change is
|
||||||
# pending; when it is "none", the actual climate state is used.
|
# pending; when it is "none", the actual climate state is used.
|
||||||
- lvgl.widget.update:
|
- lvgl.widget.update:
|
||||||
id: climate_off_button
|
id: climate_off_button
|
||||||
bg_color: !lambda |-
|
bg_color: !lambda |-
|
||||||
const auto requested = id(ha_climate_requested_mode).state;
|
const auto requested = id(ha_climate_requested_mode).state;
|
||||||
const auto current = id(ha_climate_current_mode).state;
|
const auto current = id(ha_climate_current_mode).state;
|
||||||
|
|
||||||
const bool requested_none = (
|
const bool requested_none = (
|
||||||
requested.empty() ||
|
requested.empty() ||
|
||||||
requested == "none" ||
|
requested == "none" ||
|
||||||
requested == "None" ||
|
requested == "None" ||
|
||||||
requested == "unknown" ||
|
requested == "unknown" ||
|
||||||
requested == "unavailable"
|
requested == "unavailable"
|
||||||
);
|
);
|
||||||
|
|
||||||
const bool active = (
|
const bool active = (
|
||||||
requested == "off" ||
|
requested == "off" ||
|
||||||
requested == "Off" ||
|
requested == "Off" ||
|
||||||
(requested_none && current == "off")
|
(requested_none && current == "off")
|
||||||
);
|
);
|
||||||
|
|
||||||
return active
|
return active
|
||||||
? lv_color_hex(0x548C6C)
|
? lv_color_hex(0x548C6C)
|
||||||
: lv_color_hex(0x28313D);
|
: lv_color_hex(0x28313D);
|
||||||
|
|
||||||
- lvgl.widget.update:
|
- lvgl.widget.update:
|
||||||
id: climate_heat_button
|
id: climate_heat_button
|
||||||
bg_color: !lambda |-
|
bg_color: !lambda |-
|
||||||
const auto requested = id(ha_climate_requested_mode).state;
|
const auto requested = id(ha_climate_requested_mode).state;
|
||||||
const auto current = id(ha_climate_current_mode).state;
|
const auto current = id(ha_climate_current_mode).state;
|
||||||
|
|
||||||
const bool requested_none = (
|
const bool requested_none = (
|
||||||
requested.empty() ||
|
requested.empty() ||
|
||||||
requested == "none" ||
|
requested == "none" ||
|
||||||
requested == "None" ||
|
requested == "None" ||
|
||||||
requested == "unknown" ||
|
requested == "unknown" ||
|
||||||
requested == "unavailable"
|
requested == "unavailable"
|
||||||
);
|
);
|
||||||
|
|
||||||
const bool active = (
|
const bool active = (
|
||||||
requested == "heat" ||
|
requested == "heat" ||
|
||||||
requested == "Heat" ||
|
requested == "Heat" ||
|
||||||
(requested_none && current == "heat")
|
(requested_none && current == "heat")
|
||||||
);
|
);
|
||||||
|
|
||||||
return active
|
return active
|
||||||
? lv_color_hex(0xB76822)
|
? lv_color_hex(0xB76822)
|
||||||
: lv_color_hex(0x28313D);
|
: lv_color_hex(0x28313D);
|
||||||
|
|
||||||
- lvgl.widget.update:
|
- lvgl.widget.update:
|
||||||
id: climate_cool_button
|
id: climate_cool_button
|
||||||
bg_color: !lambda |-
|
bg_color: !lambda |-
|
||||||
const auto requested = id(ha_climate_requested_mode).state;
|
const auto requested = id(ha_climate_requested_mode).state;
|
||||||
const auto current = id(ha_climate_current_mode).state;
|
const auto current = id(ha_climate_current_mode).state;
|
||||||
|
|
||||||
const bool requested_none = (
|
const bool requested_none = (
|
||||||
requested.empty() ||
|
requested.empty() ||
|
||||||
requested == "none" ||
|
requested == "none" ||
|
||||||
requested == "None" ||
|
requested == "None" ||
|
||||||
requested == "unknown" ||
|
requested == "unknown" ||
|
||||||
requested == "unavailable"
|
requested == "unavailable"
|
||||||
);
|
);
|
||||||
|
|
||||||
const bool active = (
|
const bool active = (
|
||||||
requested == "cool" ||
|
requested == "cool" ||
|
||||||
requested == "Cool" ||
|
requested == "Cool" ||
|
||||||
(requested_none && current == "cool")
|
(requested_none && current == "cool")
|
||||||
);
|
);
|
||||||
|
|
||||||
return active
|
return active
|
||||||
? lv_color_hex(0x2E6A96)
|
? lv_color_hex(0x2E6A96)
|
||||||
: lv_color_hex(0x28313D);
|
: lv_color_hex(0x28313D);
|
||||||
|
|
||||||
- lvgl.widget.update:
|
- lvgl.widget.update:
|
||||||
id: climate_dry_button
|
id: climate_dry_button
|
||||||
bg_color: !lambda |-
|
bg_color: !lambda |-
|
||||||
const auto requested = id(ha_climate_requested_mode).state;
|
const auto requested = id(ha_climate_requested_mode).state;
|
||||||
const auto current = id(ha_climate_current_mode).state;
|
const auto current = id(ha_climate_current_mode).state;
|
||||||
|
|
||||||
const bool requested_none = (
|
const bool requested_none = (
|
||||||
requested.empty() ||
|
requested.empty() ||
|
||||||
requested == "none" ||
|
requested == "none" ||
|
||||||
requested == "None" ||
|
requested == "None" ||
|
||||||
requested == "unknown" ||
|
requested == "unknown" ||
|
||||||
requested == "unavailable"
|
requested == "unavailable"
|
||||||
);
|
);
|
||||||
|
|
||||||
const bool active = (
|
const bool active = (
|
||||||
requested == "dry" ||
|
requested == "dry" ||
|
||||||
requested == "Dry" ||
|
requested == "Dry" ||
|
||||||
requested == "dehumidify" ||
|
requested == "dehumidify" ||
|
||||||
requested == "Dehumidify" ||
|
requested == "Dehumidify" ||
|
||||||
(
|
|
||||||
requested_none &&
|
|
||||||
(
|
(
|
||||||
current == "dry" ||
|
requested_none &&
|
||||||
current == "dehumidify"
|
(
|
||||||
|
current == "dry" ||
|
||||||
|
current == "dehumidify"
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
return active
|
||||||
|
? lv_color_hex(0x32677F)
|
||||||
|
: lv_color_hex(0x28313D);
|
||||||
|
|
||||||
|
# Quiet / Boost are mutually exclusive. Optimistic state wins
|
||||||
|
# immediately; actual Panasonic preset is authoritative afterwards.
|
||||||
|
- lvgl.widget.update:
|
||||||
|
id: climate_quiet_button
|
||||||
|
bg_color: !lambda |-
|
||||||
|
int selected = id(climate_profile_optimistic);
|
||||||
|
|
||||||
|
if (selected < 0) {
|
||||||
|
const auto preset = id(ha_climate_preset_mode).state;
|
||||||
|
const auto helper = id(ha_climate_profile).state;
|
||||||
|
|
||||||
|
if (
|
||||||
|
preset == "quiet" ||
|
||||||
|
preset == "Quiet" ||
|
||||||
|
helper == "Quiet" ||
|
||||||
|
helper == "quiet"
|
||||||
|
) {
|
||||||
|
selected = 1;
|
||||||
|
} else if (
|
||||||
|
preset == "powerful" ||
|
||||||
|
preset == "Powerful" ||
|
||||||
|
helper == "Boost" ||
|
||||||
|
helper == "boost"
|
||||||
|
) {
|
||||||
|
selected = 2;
|
||||||
|
} else {
|
||||||
|
selected = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return selected == 1
|
||||||
|
? lv_color_hex(0x315843)
|
||||||
|
: lv_color_hex(0x28313D);
|
||||||
|
|
||||||
|
- lvgl.widget.update:
|
||||||
|
id: climate_boost_button
|
||||||
|
bg_color: !lambda |-
|
||||||
|
int selected = id(climate_profile_optimistic);
|
||||||
|
|
||||||
|
if (selected < 0) {
|
||||||
|
const auto preset = id(ha_climate_preset_mode).state;
|
||||||
|
const auto helper = id(ha_climate_profile).state;
|
||||||
|
|
||||||
|
if (
|
||||||
|
preset == "quiet" ||
|
||||||
|
preset == "Quiet" ||
|
||||||
|
helper == "Quiet" ||
|
||||||
|
helper == "quiet"
|
||||||
|
) {
|
||||||
|
selected = 1;
|
||||||
|
} else if (
|
||||||
|
preset == "powerful" ||
|
||||||
|
preset == "Powerful" ||
|
||||||
|
helper == "Boost" ||
|
||||||
|
helper == "boost"
|
||||||
|
) {
|
||||||
|
selected = 2;
|
||||||
|
} else {
|
||||||
|
selected = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return selected == 2
|
||||||
|
? lv_color_hex(0x6B4A86)
|
||||||
|
: lv_color_hex(0x28313D);
|
||||||
|
|
||||||
|
- lvgl.widget.update:
|
||||||
|
id: climate_nanoe_button
|
||||||
|
bg_color: !lambda |-
|
||||||
|
bool active = id(ha_nanoe).state;
|
||||||
|
|
||||||
|
if (id(nanoe_optimistic) >= 0) {
|
||||||
|
active = id(nanoe_optimistic) == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return active
|
||||||
|
? lv_color_hex(0x315E82)
|
||||||
|
: lv_color_hex(0x28313D);
|
||||||
|
|
||||||
|
# Heat-pump target setpoint.
|
||||||
|
- lvgl.label.update:
|
||||||
|
id: climate_setpoint_value_label
|
||||||
|
text: !lambda |-
|
||||||
|
const float value = id(ha_climate_setpoint).state;
|
||||||
|
|
||||||
|
if (isnan(value)) {
|
||||||
|
return std::string("--.-°C");
|
||||||
|
}
|
||||||
|
|
||||||
|
char buffer[16];
|
||||||
|
snprintf(buffer, sizeof(buffer), "%.1f°C", value);
|
||||||
|
return std::string(buffer);
|
||||||
|
|
||||||
|
# One-button ceiling-fan cycle: Off -> Low -> Medium -> High -> Off.
|
||||||
|
- lvgl.label.update:
|
||||||
|
id: ceiling_fan_cycle_label
|
||||||
|
text: !lambda |-
|
||||||
|
if (!id(ha_ceiling_fan_on).state) {
|
||||||
|
return std::string("Fan:Off");
|
||||||
|
}
|
||||||
|
|
||||||
|
const float percentage = id(ha_ceiling_fan_percentage).state;
|
||||||
|
|
||||||
|
if (isnan(percentage) || percentage < 50.0f) {
|
||||||
|
return std::string("Fan:Low");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (percentage < 85.0f) {
|
||||||
|
return std::string("Fan:Medium");
|
||||||
|
}
|
||||||
|
|
||||||
|
return std::string("Fan:High");
|
||||||
|
|
||||||
|
- lvgl.widget.update:
|
||||||
|
id: ceiling_fan_cycle_button
|
||||||
|
bg_color: !lambda |-
|
||||||
|
return id(ha_ceiling_fan_on).state
|
||||||
|
? lv_color_hex(0x315E82)
|
||||||
|
: lv_color_hex(0x28313D);
|
||||||
|
|
||||||
|
# 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 |-
|
||||||
|
const float level = id(ha_air_filter_level).state;
|
||||||
|
|
||||||
|
return (
|
||||||
|
!isnan(level) &&
|
||||||
|
level >= 0.0f &&
|
||||||
|
level <= 2.0f
|
||||||
)
|
)
|
||||||
);
|
? lv_color_hex(0x315843)
|
||||||
|
: lv_color_hex(0x28313D);
|
||||||
|
|
||||||
return active
|
# Climate 9pm-12 follows the Night Power helper state.
|
||||||
? lv_color_hex(0x32677F)
|
- lvgl.widget.update:
|
||||||
: lv_color_hex(0x28313D);
|
id: climate_night_power_button
|
||||||
|
bg_color: !lambda |-
|
||||||
# Quiet / Boost are mutually exclusive. Optimistic state wins
|
return id(ha_climate_night_power).state
|
||||||
# immediately; actual Panasonic preset is authoritative afterwards.
|
? lv_color_hex(0x5A4778)
|
||||||
- lvgl.widget.update:
|
: lv_color_hex(0x28313D);
|
||||||
id: climate_quiet_button
|
|
||||||
bg_color: !lambda |-
|
|
||||||
int selected = id(climate_profile_optimistic);
|
|
||||||
|
|
||||||
if (selected < 0) {
|
|
||||||
const auto preset = id(ha_climate_preset_mode).state;
|
|
||||||
const auto helper = id(ha_climate_profile).state;
|
|
||||||
|
|
||||||
if (
|
|
||||||
preset == "quiet" ||
|
|
||||||
preset == "Quiet" ||
|
|
||||||
helper == "Quiet" ||
|
|
||||||
helper == "quiet"
|
|
||||||
) {
|
|
||||||
selected = 1;
|
|
||||||
} else if (
|
|
||||||
preset == "powerful" ||
|
|
||||||
preset == "Powerful" ||
|
|
||||||
helper == "Boost" ||
|
|
||||||
helper == "boost"
|
|
||||||
) {
|
|
||||||
selected = 2;
|
|
||||||
} else {
|
|
||||||
selected = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return selected == 1
|
|
||||||
? lv_color_hex(0x315843)
|
|
||||||
: lv_color_hex(0x28313D);
|
|
||||||
|
|
||||||
- lvgl.widget.update:
|
|
||||||
id: climate_boost_button
|
|
||||||
bg_color: !lambda |-
|
|
||||||
int selected = id(climate_profile_optimistic);
|
|
||||||
|
|
||||||
if (selected < 0) {
|
|
||||||
const auto preset = id(ha_climate_preset_mode).state;
|
|
||||||
const auto helper = id(ha_climate_profile).state;
|
|
||||||
|
|
||||||
if (
|
|
||||||
preset == "quiet" ||
|
|
||||||
preset == "Quiet" ||
|
|
||||||
helper == "Quiet" ||
|
|
||||||
helper == "quiet"
|
|
||||||
) {
|
|
||||||
selected = 1;
|
|
||||||
} else if (
|
|
||||||
preset == "powerful" ||
|
|
||||||
preset == "Powerful" ||
|
|
||||||
helper == "Boost" ||
|
|
||||||
helper == "boost"
|
|
||||||
) {
|
|
||||||
selected = 2;
|
|
||||||
} else {
|
|
||||||
selected = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return selected == 2
|
|
||||||
? lv_color_hex(0x6B4A86)
|
|
||||||
: lv_color_hex(0x28313D);
|
|
||||||
|
|
||||||
- lvgl.widget.update:
|
|
||||||
id: climate_nanoe_button
|
|
||||||
bg_color: !lambda |-
|
|
||||||
bool active = id(ha_nanoe).state;
|
|
||||||
|
|
||||||
if (id(nanoe_optimistic) >= 0) {
|
|
||||||
active = id(nanoe_optimistic) == 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return active
|
|
||||||
? lv_color_hex(0x315E82)
|
|
||||||
: lv_color_hex(0x28313D);
|
|
||||||
|
|
||||||
# Heat-pump target setpoint.
|
|
||||||
- lvgl.label.update:
|
|
||||||
id: climate_setpoint_value_label
|
|
||||||
text: !lambda |-
|
|
||||||
const float value = id(ha_climate_setpoint).state;
|
|
||||||
|
|
||||||
if (isnan(value)) {
|
|
||||||
return std::string("--.-°C");
|
|
||||||
}
|
|
||||||
|
|
||||||
char buffer[16];
|
|
||||||
snprintf(buffer, sizeof(buffer), "%.1f°C", value);
|
|
||||||
return std::string(buffer);
|
|
||||||
|
|
||||||
# One-button ceiling-fan cycle: Off -> Low -> Medium -> High -> Off.
|
|
||||||
- lvgl.label.update:
|
|
||||||
id: ceiling_fan_cycle_label
|
|
||||||
text: !lambda |-
|
|
||||||
if (!id(ha_ceiling_fan_on).state) {
|
|
||||||
return std::string("Fan:Off");
|
|
||||||
}
|
|
||||||
|
|
||||||
const float percentage = id(ha_ceiling_fan_percentage).state;
|
|
||||||
|
|
||||||
if (isnan(percentage) || percentage < 50.0f) {
|
|
||||||
return std::string("Fan:Low");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (percentage < 85.0f) {
|
|
||||||
return std::string("Fan:Medium");
|
|
||||||
}
|
|
||||||
|
|
||||||
return std::string("Fan:High");
|
|
||||||
|
|
||||||
- lvgl.widget.update:
|
|
||||||
id: ceiling_fan_cycle_button
|
|
||||||
bg_color: !lambda |-
|
|
||||||
return id(ha_ceiling_fan_on).state
|
|
||||||
? lv_color_hex(0x315E82)
|
|
||||||
: lv_color_hex(0x28313D);
|
|
||||||
|
|
||||||
# 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 |-
|
|
||||||
const float level = id(ha_air_filter_level).state;
|
|
||||||
|
|
||||||
return (
|
|
||||||
!isnan(level) &&
|
|
||||||
level >= 0.0f &&
|
|
||||||
level <= 2.0f
|
|
||||||
)
|
|
||||||
? lv_color_hex(0x315843)
|
|
||||||
: lv_color_hex(0x28313D);
|
|
||||||
|
|
||||||
# Climate 9pm-12 follows the Night Power helper state.
|
|
||||||
- lvgl.widget.update:
|
|
||||||
id: climate_night_power_button
|
|
||||||
bg_color: !lambda |-
|
|
||||||
return id(ha_climate_night_power).state
|
|
||||||
? lv_color_hex(0x5A4778)
|
|
||||||
: lv_color_hex(0x28313D);
|
|
||||||
|
|
||||||
# Update the Sleep timer label and active button colour.
|
# Update the Sleep timer label and active button colour.
|
||||||
- id: refresh_sleep_timer
|
- id: refresh_sleep_timer
|
||||||
@@ -5820,7 +5808,6 @@ lvgl:
|
|||||||
- online_image.release: security_camera_image
|
- online_image.release: security_camera_image
|
||||||
|
|
||||||
pages:
|
pages:
|
||||||
|
|
||||||
#:####################################################################################:#
|
#:####################################################################################:#
|
||||||
# BEDROOM PAGE
|
# BEDROOM PAGE
|
||||||
#:####################################################################################:#
|
#:####################################################################################:#
|
||||||
|
|||||||
Reference in New Issue
Block a user