Edit esp-bedside-panel.yaml
This commit is contained in:
@@ -6,6 +6,7 @@
|
|||||||
# https://home.fox.co.nz/gitea/zorruno/zorruno-homeassistant/src/branch/master/esphome/esp-bedside-panel.yaml
|
# https://home.fox.co.nz/gitea/zorruno/zorruno-homeassistant/src/branch/master/esphome/esp-bedside-panel.yaml
|
||||||
#:########################################################################################:#
|
#:########################################################################################:#
|
||||||
# VERSIONS:
|
# VERSIONS:
|
||||||
|
# V1.8 2026-07-17 Added hold-to-open Atto Vehicles page and vehicle controls
|
||||||
# V1.7 2026-07-17 Added Bedroom button icons and corrected Panasonic Nanoe-X naming
|
# V1.7 2026-07-17 Added Bedroom button icons and corrected Panasonic Nanoe-X naming
|
||||||
# V1.6 2026-07-17 Reordered the nine Bedroom control buttons
|
# V1.6 2026-07-17 Reordered the nine Bedroom control buttons
|
||||||
# V1.5 2026-07-16 Added RX8130 battery-backed RTC time restore and synchronisation
|
# V1.5 2026-07-16 Added RX8130 battery-backed RTC time restore and synchronisation
|
||||||
@@ -105,12 +106,12 @@ substitutions:
|
|||||||
# Device Naming
|
# Device Naming
|
||||||
device_name: "esp-bedside-panel"
|
device_name: "esp-bedside-panel"
|
||||||
friendly_name: "ESP Bedside Panel"
|
friendly_name: "ESP Bedside Panel"
|
||||||
description_comment: "Guition JC1060P470C_I_W_Y ESP32-P4 bedside control panel. Bedroom control icons, Nanoe-X naming and RTC-backed time. (Layout V1.1)"
|
description_comment: "Guition JC1060P470C_I_W_Y ESP32-P4 bedside control panel. Bedroom, Vehicles, Climate, Security and Clock pages. (Layout V1.1)"
|
||||||
device_area: "Bedroom"
|
device_area: "Bedroom"
|
||||||
|
|
||||||
# Project Naming
|
# Project Naming
|
||||||
project_name: "Guition.JC1060P470C_I_W_Y"
|
project_name: "Guition.JC1060P470C_I_W_Y"
|
||||||
project_version: "v1.7"
|
project_version: "v1.8"
|
||||||
|
|
||||||
# Passwords & Secrets
|
# Passwords & Secrets
|
||||||
api_key: !secret esp-api_key
|
api_key: !secret esp-api_key
|
||||||
@@ -183,6 +184,20 @@ substitutions:
|
|||||||
climate_night_power_entity: "input_boolean.master_bedroom_night_power_mode"
|
climate_night_power_entity: "input_boolean.master_bedroom_night_power_mode"
|
||||||
nanoe_entity: "switch.master_bedroom_nanoe"
|
nanoe_entity: "switch.master_bedroom_nanoe"
|
||||||
|
|
||||||
|
# Home Assistant Entities - Vehicles / Atto 3
|
||||||
|
atto_locked_sensor_entity: "binary_sensor.atto_3_locked"
|
||||||
|
# BYD Vehicle integration lock entity. Adjust only if HA generated a
|
||||||
|
# different entity_id for the Atto 3 lock control.
|
||||||
|
atto_lock_entity: "lock.atto_3_lock"
|
||||||
|
atto_driver_seat_heating_entity: "select.atto_3_driver_seat_heating"
|
||||||
|
atto_passenger_seat_heating_entity: "select.atto_3_passenger_seat_heating"
|
||||||
|
atto_charging_entity: "binary_sensor.atto_3_charging"
|
||||||
|
atto_schedule_enabled_entity: "switch.atto_3_schedule_enabled"
|
||||||
|
atto_range_entity: "sensor.atto_3_range"
|
||||||
|
atto_battery_level_entity: "sensor.atto_3_battery_level"
|
||||||
|
atto_cabin_temperature_entity: "sensor.atto_3_cabin_temperature"
|
||||||
|
atto_climate_entity: "climate.atto_3_climate"
|
||||||
|
|
||||||
#:########################################################################################:#
|
#:########################################################################################:#
|
||||||
# PACKAGES:
|
# PACKAGES:
|
||||||
# Included Common Packages
|
# Included Common Packages
|
||||||
@@ -630,11 +645,74 @@ sensor:
|
|||||||
then:
|
then:
|
||||||
- script.execute: refresh_climate_controls
|
- script.execute: refresh_climate_controls
|
||||||
|
|
||||||
|
#:######################################################################################:#
|
||||||
|
# ATTO 3 NUMERIC VALUES
|
||||||
|
#:######################################################################################:#
|
||||||
|
- platform: homeassistant
|
||||||
|
id: ha_atto_range
|
||||||
|
entity_id: "${atto_range_entity}"
|
||||||
|
internal: true
|
||||||
|
on_value:
|
||||||
|
then:
|
||||||
|
- script.execute: refresh_vehicle_controls
|
||||||
|
|
||||||
|
- platform: homeassistant
|
||||||
|
id: ha_atto_battery_level
|
||||||
|
entity_id: "${atto_battery_level_entity}"
|
||||||
|
internal: true
|
||||||
|
on_value:
|
||||||
|
then:
|
||||||
|
- script.execute: refresh_vehicle_controls
|
||||||
|
|
||||||
|
- platform: homeassistant
|
||||||
|
id: ha_atto_cabin_temperature
|
||||||
|
entity_id: "${atto_cabin_temperature_entity}"
|
||||||
|
internal: true
|
||||||
|
on_value:
|
||||||
|
then:
|
||||||
|
- script.execute: refresh_vehicle_controls
|
||||||
|
|
||||||
|
- platform: homeassistant
|
||||||
|
id: ha_atto_setpoint
|
||||||
|
entity_id: "${atto_climate_entity}"
|
||||||
|
attribute: temperature
|
||||||
|
internal: true
|
||||||
|
on_value:
|
||||||
|
then:
|
||||||
|
- script.execute: refresh_vehicle_controls
|
||||||
|
|
||||||
#:########################################################################################:#
|
#:########################################################################################:#
|
||||||
# HOME ASSISTANT BINARY SENSORS:
|
# HOME ASSISTANT BINARY SENSORS:
|
||||||
# Imported states used to colour LVGL buttons
|
# Imported states used to colour LVGL buttons
|
||||||
#:########################################################################################:#
|
#:########################################################################################:#
|
||||||
binary_sensor:
|
binary_sensor:
|
||||||
|
#:######################################################################################:#
|
||||||
|
# ATTO 3 BINARY STATES
|
||||||
|
#:######################################################################################:#
|
||||||
|
- platform: homeassistant
|
||||||
|
id: ha_atto_locked
|
||||||
|
entity_id: "${atto_locked_sensor_entity}"
|
||||||
|
internal: true
|
||||||
|
on_state:
|
||||||
|
then:
|
||||||
|
- script.execute: refresh_vehicle_controls
|
||||||
|
|
||||||
|
- platform: homeassistant
|
||||||
|
id: ha_atto_charging
|
||||||
|
entity_id: "${atto_charging_entity}"
|
||||||
|
internal: true
|
||||||
|
on_state:
|
||||||
|
then:
|
||||||
|
- script.execute: refresh_vehicle_controls
|
||||||
|
|
||||||
|
- platform: homeassistant
|
||||||
|
id: ha_atto_schedule_enabled
|
||||||
|
entity_id: "${atto_schedule_enabled_entity}"
|
||||||
|
internal: true
|
||||||
|
on_state:
|
||||||
|
then:
|
||||||
|
- script.execute: refresh_vehicle_controls
|
||||||
|
|
||||||
- platform: homeassistant
|
- platform: homeassistant
|
||||||
id: ha_north_lights
|
id: ha_north_lights
|
||||||
entity_id: "${north_lights_entity}"
|
entity_id: "${north_lights_entity}"
|
||||||
@@ -990,6 +1068,178 @@ script:
|
|||||||
: std::string("");
|
: std::string("");
|
||||||
|
|
||||||
- script.execute: refresh_climate_controls
|
- script.execute: refresh_climate_controls
|
||||||
|
- script.execute: refresh_vehicle_controls
|
||||||
|
|
||||||
|
#:######################################################################################:#
|
||||||
|
# VEHICLES PAGE STATE REFRESH
|
||||||
|
#:######################################################################################:#
|
||||||
|
- id: refresh_vehicle_controls
|
||||||
|
mode: restart
|
||||||
|
then:
|
||||||
|
- if:
|
||||||
|
condition:
|
||||||
|
lambda: |-
|
||||||
|
return id(lvgl_ready);
|
||||||
|
|
||||||
|
then:
|
||||||
|
- lvgl.label.update:
|
||||||
|
id: atto_lock_button_label
|
||||||
|
text: !lambda |-
|
||||||
|
return id(ha_atto_locked).state
|
||||||
|
? std::string("Locked (Hold)")
|
||||||
|
: std::string("Unlocked (Hold)");
|
||||||
|
|
||||||
|
- lvgl.widget.update:
|
||||||
|
id: atto_lock_button
|
||||||
|
bg_color: !lambda |-
|
||||||
|
return id(ha_atto_locked).state
|
||||||
|
? lv_color_hex(0x315843)
|
||||||
|
: lv_color_hex(0x6B3A3A);
|
||||||
|
|
||||||
|
- lvgl.label.update:
|
||||||
|
id: atto_charging_label
|
||||||
|
text: !lambda |-
|
||||||
|
return id(ha_atto_charging).state
|
||||||
|
? std::string("Atto Charging\nCharging")
|
||||||
|
: std::string("Atto Charging\nNot Charging");
|
||||||
|
|
||||||
|
- lvgl.widget.update:
|
||||||
|
id: atto_charging_status
|
||||||
|
bg_color: !lambda |-
|
||||||
|
return id(ha_atto_charging).state
|
||||||
|
? lv_color_hex(0x315843)
|
||||||
|
: lv_color_hex(0x28313D);
|
||||||
|
|
||||||
|
- lvgl.widget.update:
|
||||||
|
id: atto_schedule_button
|
||||||
|
bg_color: !lambda |-
|
||||||
|
return id(ha_atto_schedule_enabled).state
|
||||||
|
? lv_color_hex(0x315E82)
|
||||||
|
: lv_color_hex(0x28313D);
|
||||||
|
|
||||||
|
- lvgl.label.update:
|
||||||
|
id: atto_range_label
|
||||||
|
text: !lambda |-
|
||||||
|
const float value = id(ha_atto_range).state;
|
||||||
|
|
||||||
|
if (isnan(value)) {
|
||||||
|
return std::string("Atto Range\n-- km");
|
||||||
|
}
|
||||||
|
|
||||||
|
char buffer[32];
|
||||||
|
snprintf(buffer, sizeof(buffer), "Atto Range\n%.0f km", value);
|
||||||
|
return std::string(buffer);
|
||||||
|
|
||||||
|
- lvgl.label.update:
|
||||||
|
id: atto_battery_label
|
||||||
|
text: !lambda |-
|
||||||
|
const float value = id(ha_atto_battery_level).state;
|
||||||
|
|
||||||
|
if (isnan(value)) {
|
||||||
|
return std::string("Battery Level\n--%");
|
||||||
|
}
|
||||||
|
|
||||||
|
char buffer[32];
|
||||||
|
snprintf(buffer, sizeof(buffer), "Battery Level\n%.0f%%", value);
|
||||||
|
return std::string(buffer);
|
||||||
|
|
||||||
|
- lvgl.label.update:
|
||||||
|
id: atto_cabin_temperature_label
|
||||||
|
text: !lambda |-
|
||||||
|
const float value = id(ha_atto_cabin_temperature).state;
|
||||||
|
|
||||||
|
if (isnan(value)) {
|
||||||
|
return std::string("Cabin Temp\n--.-°C");
|
||||||
|
}
|
||||||
|
|
||||||
|
char buffer[32];
|
||||||
|
snprintf(buffer, sizeof(buffer), "Cabin Temp\n%.1f°C", value);
|
||||||
|
return std::string(buffer);
|
||||||
|
|
||||||
|
- lvgl.label.update:
|
||||||
|
id: atto_driver_seat_button_label
|
||||||
|
text: !lambda |-
|
||||||
|
const auto value = id(ha_atto_driver_seat_heating).state;
|
||||||
|
|
||||||
|
if (value == "low" || value == "Low") {
|
||||||
|
return std::string("Drive Seat Heat (Hold)\nLow");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value == "high" || value == "High") {
|
||||||
|
return std::string("Drive Seat Heat (Hold)\nHigh");
|
||||||
|
}
|
||||||
|
|
||||||
|
return std::string("Drive Seat Heat (Hold)\nOff");
|
||||||
|
|
||||||
|
- lvgl.widget.update:
|
||||||
|
id: atto_driver_seat_button
|
||||||
|
bg_color: !lambda |-
|
||||||
|
const auto value = id(ha_atto_driver_seat_heating).state;
|
||||||
|
|
||||||
|
return (
|
||||||
|
value == "low" ||
|
||||||
|
value == "Low" ||
|
||||||
|
value == "high" ||
|
||||||
|
value == "High"
|
||||||
|
)
|
||||||
|
? lv_color_hex(0x7A4A22)
|
||||||
|
: lv_color_hex(0x28313D);
|
||||||
|
|
||||||
|
- lvgl.label.update:
|
||||||
|
id: atto_passenger_seat_button_label
|
||||||
|
text: !lambda |-
|
||||||
|
const auto value = id(ha_atto_passenger_seat_heating).state;
|
||||||
|
|
||||||
|
if (value == "low" || value == "Low") {
|
||||||
|
return std::string("Passenger Seat Heat (Hold)\nLow");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value == "high" || value == "High") {
|
||||||
|
return std::string("Passenger Seat Heat (Hold)\nHigh");
|
||||||
|
}
|
||||||
|
|
||||||
|
return std::string("Passenger Seat Heat (Hold)\nOff");
|
||||||
|
|
||||||
|
- lvgl.widget.update:
|
||||||
|
id: atto_passenger_seat_button
|
||||||
|
bg_color: !lambda |-
|
||||||
|
const auto value = id(ha_atto_passenger_seat_heating).state;
|
||||||
|
|
||||||
|
return (
|
||||||
|
value == "low" ||
|
||||||
|
value == "Low" ||
|
||||||
|
value == "high" ||
|
||||||
|
value == "High"
|
||||||
|
)
|
||||||
|
? lv_color_hex(0x7A4A22)
|
||||||
|
: lv_color_hex(0x28313D);
|
||||||
|
|
||||||
|
- lvgl.widget.update:
|
||||||
|
id: atto_heat_button
|
||||||
|
bg_color: !lambda |-
|
||||||
|
return id(ha_atto_climate_mode).state == "heat"
|
||||||
|
? lv_color_hex(0xB76822)
|
||||||
|
: lv_color_hex(0x28313D);
|
||||||
|
|
||||||
|
- lvgl.widget.update:
|
||||||
|
id: atto_cool_button
|
||||||
|
bg_color: !lambda |-
|
||||||
|
return id(ha_atto_climate_mode).state == "cool"
|
||||||
|
? lv_color_hex(0x2E6A96)
|
||||||
|
: lv_color_hex(0x28313D);
|
||||||
|
|
||||||
|
- lvgl.label.update:
|
||||||
|
id: atto_setpoint_value_label
|
||||||
|
text: !lambda |-
|
||||||
|
const float value = id(ha_atto_setpoint).state;
|
||||||
|
|
||||||
|
if (isnan(value)) {
|
||||||
|
return std::string("--.-°C");
|
||||||
|
}
|
||||||
|
|
||||||
|
char buffer[16];
|
||||||
|
snprintf(buffer, sizeof(buffer), "%.1f°C", value);
|
||||||
|
return std::string(buffer);
|
||||||
|
|
||||||
# Update Climate-page labels and highlight the currently selected settings.
|
# Update Climate-page labels and highlight the currently selected settings.
|
||||||
- id: refresh_climate_controls
|
- id: refresh_climate_controls
|
||||||
@@ -1535,6 +1785,33 @@ interval:
|
|||||||
# https://esphome.io/components/text_sensor/
|
# https://esphome.io/components/text_sensor/
|
||||||
#:########################################################################################:#
|
#:########################################################################################:#
|
||||||
text_sensor:
|
text_sensor:
|
||||||
|
#:######################################################################################:#
|
||||||
|
# ATTO 3 TEXT STATES
|
||||||
|
#:######################################################################################:#
|
||||||
|
- platform: homeassistant
|
||||||
|
id: ha_atto_driver_seat_heating
|
||||||
|
entity_id: "${atto_driver_seat_heating_entity}"
|
||||||
|
internal: true
|
||||||
|
on_value:
|
||||||
|
then:
|
||||||
|
- script.execute: refresh_vehicle_controls
|
||||||
|
|
||||||
|
- platform: homeassistant
|
||||||
|
id: ha_atto_passenger_seat_heating
|
||||||
|
entity_id: "${atto_passenger_seat_heating_entity}"
|
||||||
|
internal: true
|
||||||
|
on_value:
|
||||||
|
then:
|
||||||
|
- script.execute: refresh_vehicle_controls
|
||||||
|
|
||||||
|
- platform: homeassistant
|
||||||
|
id: ha_atto_climate_mode
|
||||||
|
entity_id: "${atto_climate_entity}"
|
||||||
|
internal: true
|
||||||
|
on_value:
|
||||||
|
then:
|
||||||
|
- script.execute: refresh_vehicle_controls
|
||||||
|
|
||||||
# Requested heat-pump mode helper used while a mode change is pending.
|
# Requested heat-pump mode helper used while a mode change is pending.
|
||||||
- platform: homeassistant
|
- platform: homeassistant
|
||||||
id: ha_climate_requested_mode
|
id: ha_climate_requested_mode
|
||||||
@@ -2208,25 +2485,39 @@ lvgl:
|
|||||||
time: 220ms
|
time: 220ms
|
||||||
|
|
||||||
- button:
|
- button:
|
||||||
id: future_1_navigation_button
|
id: atto_navigation_button
|
||||||
x: 414
|
x: 414
|
||||||
y: 475
|
y: 475
|
||||||
width: 190
|
width: 190
|
||||||
height: 92
|
height: 92
|
||||||
widgets:
|
widgets:
|
||||||
- label:
|
- label:
|
||||||
id: future_1_navigation_button_label
|
id: atto_navigation_button_label
|
||||||
align: CENTER
|
align: CENTER
|
||||||
text: "Future1"
|
text: "Atto (Hold)"
|
||||||
text_font: font_button
|
text_font: font_button
|
||||||
text_color: 0xAEB8C4
|
text_color: 0xFFFFFF
|
||||||
bg_color: 0x28313D
|
bg_color: 0x3E4652
|
||||||
bg_opa: COVER
|
bg_opa: COVER
|
||||||
border_width: 2
|
border_width: 2
|
||||||
border_color: 0x445365
|
border_color: 0x687587
|
||||||
radius: 16
|
radius: 16
|
||||||
pressed:
|
pressed:
|
||||||
bg_color: 0x34404F
|
bg_color: 0x566170
|
||||||
|
|
||||||
|
on_long_press:
|
||||||
|
then:
|
||||||
|
- lvgl.page.show:
|
||||||
|
id: vehicles_page
|
||||||
|
animation: MOVE_LEFT
|
||||||
|
time: 220ms
|
||||||
|
|
||||||
|
- light.turn_on:
|
||||||
|
id: display_backlight
|
||||||
|
brightness: "${control_brightness}"
|
||||||
|
transition_length: 250ms
|
||||||
|
|
||||||
|
- script.execute: refresh_vehicle_controls
|
||||||
|
|
||||||
- button:
|
- button:
|
||||||
id: security_navigation_button
|
id: security_navigation_button
|
||||||
@@ -2298,6 +2589,506 @@ lvgl:
|
|||||||
brightness: "${clock_brightness}"
|
brightness: "${clock_brightness}"
|
||||||
transition_length: 1500ms
|
transition_length: 1500ms
|
||||||
|
|
||||||
|
#:####################################################################################:#
|
||||||
|
# VEHICLES PAGE
|
||||||
|
#:####################################################################################:#
|
||||||
|
- id: vehicles_page
|
||||||
|
skip: true
|
||||||
|
bg_color: 0x111923
|
||||||
|
bg_opa: COVER
|
||||||
|
|
||||||
|
widgets:
|
||||||
|
#:################################################################################:#
|
||||||
|
# VEHICLE STATUS / PRIMARY CONTROLS
|
||||||
|
#:################################################################################:#
|
||||||
|
- button:
|
||||||
|
id: atto_lock_button
|
||||||
|
x: 25
|
||||||
|
y: 22
|
||||||
|
width: 220
|
||||||
|
height: 92
|
||||||
|
bg_color: 0x28313D
|
||||||
|
bg_opa: COVER
|
||||||
|
border_width: 2
|
||||||
|
border_color: 0x548C6C
|
||||||
|
radius: 17
|
||||||
|
pressed:
|
||||||
|
bg_color: 0x416F55
|
||||||
|
widgets:
|
||||||
|
- label:
|
||||||
|
id: atto_lock_button_label
|
||||||
|
align: CENTER
|
||||||
|
text: "Locked (Hold)"
|
||||||
|
text_font: font_small
|
||||||
|
text_align: CENTER
|
||||||
|
text_color: 0xFFFFFF
|
||||||
|
on_long_press:
|
||||||
|
then:
|
||||||
|
- if:
|
||||||
|
condition:
|
||||||
|
lambda: |-
|
||||||
|
return id(ha_atto_locked).state;
|
||||||
|
|
||||||
|
then:
|
||||||
|
- homeassistant.action:
|
||||||
|
action: lock.unlock
|
||||||
|
data:
|
||||||
|
entity_id: "${atto_lock_entity}"
|
||||||
|
|
||||||
|
else:
|
||||||
|
- homeassistant.action:
|
||||||
|
action: lock.lock
|
||||||
|
data:
|
||||||
|
entity_id: "${atto_lock_entity}"
|
||||||
|
|
||||||
|
- button:
|
||||||
|
id: atto_charging_status
|
||||||
|
x: 272
|
||||||
|
y: 22
|
||||||
|
width: 220
|
||||||
|
height: 92
|
||||||
|
bg_color: 0x28313D
|
||||||
|
bg_opa: COVER
|
||||||
|
border_width: 2
|
||||||
|
border_color: 0x548C6C
|
||||||
|
radius: 17
|
||||||
|
widgets:
|
||||||
|
- label:
|
||||||
|
id: atto_charging_label
|
||||||
|
align: CENTER
|
||||||
|
text: "Atto Charging\nNot Charging"
|
||||||
|
text_font: font_small
|
||||||
|
text_align: CENTER
|
||||||
|
text_color: 0xFFFFFF
|
||||||
|
|
||||||
|
- button:
|
||||||
|
id: atto_schedule_button
|
||||||
|
x: 519
|
||||||
|
y: 22
|
||||||
|
width: 220
|
||||||
|
height: 92
|
||||||
|
bg_color: 0x28313D
|
||||||
|
bg_opa: COVER
|
||||||
|
border_width: 2
|
||||||
|
border_color: 0x47789B
|
||||||
|
radius: 17
|
||||||
|
pressed:
|
||||||
|
bg_color: 0x315E82
|
||||||
|
widgets:
|
||||||
|
- label:
|
||||||
|
align: CENTER
|
||||||
|
text: "Schedule Enabled"
|
||||||
|
text_font: font_small
|
||||||
|
text_align: CENTER
|
||||||
|
text_color: 0xFFFFFF
|
||||||
|
on_click:
|
||||||
|
- homeassistant.action:
|
||||||
|
action: switch.toggle
|
||||||
|
data:
|
||||||
|
entity_id: "${atto_schedule_enabled_entity}"
|
||||||
|
|
||||||
|
- button:
|
||||||
|
id: atto_range_status
|
||||||
|
x: 766
|
||||||
|
y: 22
|
||||||
|
width: 220
|
||||||
|
height: 92
|
||||||
|
bg_color: 0x1C2632
|
||||||
|
bg_opa: COVER
|
||||||
|
border_width: 2
|
||||||
|
border_color: 0x526276
|
||||||
|
radius: 17
|
||||||
|
widgets:
|
||||||
|
- label:
|
||||||
|
id: atto_range_label
|
||||||
|
align: CENTER
|
||||||
|
text: "Atto Range\n-- km"
|
||||||
|
text_font: font_small
|
||||||
|
text_align: CENTER
|
||||||
|
text_color: 0xFFFFFF
|
||||||
|
|
||||||
|
#:################################################################################:#
|
||||||
|
# VEHICLE VALUES / SEAT HEATING
|
||||||
|
#:################################################################################:#
|
||||||
|
- button:
|
||||||
|
id: atto_battery_status
|
||||||
|
x: 25
|
||||||
|
y: 130
|
||||||
|
width: 220
|
||||||
|
height: 92
|
||||||
|
bg_color: 0x1C2632
|
||||||
|
bg_opa: COVER
|
||||||
|
border_width: 2
|
||||||
|
border_color: 0x526276
|
||||||
|
radius: 17
|
||||||
|
widgets:
|
||||||
|
- label:
|
||||||
|
id: atto_battery_label
|
||||||
|
align: CENTER
|
||||||
|
text: "Battery Level\n--%"
|
||||||
|
text_font: font_small
|
||||||
|
text_align: CENTER
|
||||||
|
text_color: 0xFFFFFF
|
||||||
|
|
||||||
|
- button:
|
||||||
|
id: atto_cabin_temperature_status
|
||||||
|
x: 272
|
||||||
|
y: 130
|
||||||
|
width: 220
|
||||||
|
height: 92
|
||||||
|
bg_color: 0x1C2632
|
||||||
|
bg_opa: COVER
|
||||||
|
border_width: 2
|
||||||
|
border_color: 0x526276
|
||||||
|
radius: 17
|
||||||
|
widgets:
|
||||||
|
- label:
|
||||||
|
id: atto_cabin_temperature_label
|
||||||
|
align: CENTER
|
||||||
|
text: "Cabin Temp\n--.-°C"
|
||||||
|
text_font: font_small
|
||||||
|
text_align: CENTER
|
||||||
|
text_color: 0xFFFFFF
|
||||||
|
|
||||||
|
- button:
|
||||||
|
id: atto_driver_seat_button
|
||||||
|
x: 519
|
||||||
|
y: 130
|
||||||
|
width: 220
|
||||||
|
height: 92
|
||||||
|
bg_color: 0x28313D
|
||||||
|
bg_opa: COVER
|
||||||
|
border_width: 2
|
||||||
|
border_color: 0xA6672B
|
||||||
|
radius: 17
|
||||||
|
pressed:
|
||||||
|
bg_color: 0x7A4A22
|
||||||
|
widgets:
|
||||||
|
- label:
|
||||||
|
id: atto_driver_seat_button_label
|
||||||
|
align: CENTER
|
||||||
|
text: "Drive Seat Heat (Hold)\nOff"
|
||||||
|
text_font: font_small
|
||||||
|
text_align: CENTER
|
||||||
|
text_color: 0xFFFFFF
|
||||||
|
on_long_press:
|
||||||
|
then:
|
||||||
|
- if:
|
||||||
|
condition:
|
||||||
|
lambda: |-
|
||||||
|
const auto value =
|
||||||
|
id(ha_atto_driver_seat_heating).state;
|
||||||
|
|
||||||
|
return (
|
||||||
|
value == "off" ||
|
||||||
|
value == "Off" ||
|
||||||
|
value == "unknown" ||
|
||||||
|
value == "unavailable" ||
|
||||||
|
value.empty()
|
||||||
|
);
|
||||||
|
|
||||||
|
then:
|
||||||
|
- homeassistant.action:
|
||||||
|
action: select.select_option
|
||||||
|
data:
|
||||||
|
entity_id: "${atto_driver_seat_heating_entity}"
|
||||||
|
option: "low"
|
||||||
|
|
||||||
|
else:
|
||||||
|
- if:
|
||||||
|
condition:
|
||||||
|
lambda: |-
|
||||||
|
const auto value =
|
||||||
|
id(ha_atto_driver_seat_heating).state;
|
||||||
|
|
||||||
|
return value == "low" || value == "Low";
|
||||||
|
|
||||||
|
then:
|
||||||
|
- homeassistant.action:
|
||||||
|
action: select.select_option
|
||||||
|
data:
|
||||||
|
entity_id: "${atto_driver_seat_heating_entity}"
|
||||||
|
option: "high"
|
||||||
|
|
||||||
|
else:
|
||||||
|
- homeassistant.action:
|
||||||
|
action: select.select_option
|
||||||
|
data:
|
||||||
|
entity_id: "${atto_driver_seat_heating_entity}"
|
||||||
|
option: "off"
|
||||||
|
|
||||||
|
- button:
|
||||||
|
id: atto_passenger_seat_button
|
||||||
|
x: 766
|
||||||
|
y: 130
|
||||||
|
width: 220
|
||||||
|
height: 92
|
||||||
|
bg_color: 0x28313D
|
||||||
|
bg_opa: COVER
|
||||||
|
border_width: 2
|
||||||
|
border_color: 0xA6672B
|
||||||
|
radius: 17
|
||||||
|
pressed:
|
||||||
|
bg_color: 0x7A4A22
|
||||||
|
widgets:
|
||||||
|
- label:
|
||||||
|
id: atto_passenger_seat_button_label
|
||||||
|
align: CENTER
|
||||||
|
text: "Passenger Seat Heat (Hold)\nOff"
|
||||||
|
text_font: font_small
|
||||||
|
text_align: CENTER
|
||||||
|
text_color: 0xFFFFFF
|
||||||
|
on_long_press:
|
||||||
|
then:
|
||||||
|
- if:
|
||||||
|
condition:
|
||||||
|
lambda: |-
|
||||||
|
const auto value =
|
||||||
|
id(ha_atto_passenger_seat_heating).state;
|
||||||
|
|
||||||
|
return (
|
||||||
|
value == "off" ||
|
||||||
|
value == "Off" ||
|
||||||
|
value == "unknown" ||
|
||||||
|
value == "unavailable" ||
|
||||||
|
value.empty()
|
||||||
|
);
|
||||||
|
|
||||||
|
then:
|
||||||
|
- homeassistant.action:
|
||||||
|
action: select.select_option
|
||||||
|
data:
|
||||||
|
entity_id: "${atto_passenger_seat_heating_entity}"
|
||||||
|
option: "low"
|
||||||
|
|
||||||
|
else:
|
||||||
|
- if:
|
||||||
|
condition:
|
||||||
|
lambda: |-
|
||||||
|
const auto value =
|
||||||
|
id(ha_atto_passenger_seat_heating).state;
|
||||||
|
|
||||||
|
return value == "low" || value == "Low";
|
||||||
|
|
||||||
|
then:
|
||||||
|
- homeassistant.action:
|
||||||
|
action: select.select_option
|
||||||
|
data:
|
||||||
|
entity_id: "${atto_passenger_seat_heating_entity}"
|
||||||
|
option: "high"
|
||||||
|
|
||||||
|
else:
|
||||||
|
- homeassistant.action:
|
||||||
|
action: select.select_option
|
||||||
|
data:
|
||||||
|
entity_id: "${atto_passenger_seat_heating_entity}"
|
||||||
|
option: "off"
|
||||||
|
|
||||||
|
#:################################################################################:#
|
||||||
|
# ATTO CLIMATE / SETPOINT
|
||||||
|
#:################################################################################:#
|
||||||
|
- label:
|
||||||
|
x: 639
|
||||||
|
y: 230
|
||||||
|
width: 227
|
||||||
|
text: "Setpoint"
|
||||||
|
text_font: font_small
|
||||||
|
text_align: CENTER
|
||||||
|
text_color: 0x8FA0B3
|
||||||
|
|
||||||
|
- button:
|
||||||
|
id: atto_heat_button
|
||||||
|
x: 25
|
||||||
|
y: 260
|
||||||
|
width: 220
|
||||||
|
height: 105
|
||||||
|
bg_color: 0x28313D
|
||||||
|
bg_opa: COVER
|
||||||
|
border_width: 2
|
||||||
|
border_color: 0xA6672B
|
||||||
|
radius: 18
|
||||||
|
pressed:
|
||||||
|
bg_color: 0xB76822
|
||||||
|
widgets:
|
||||||
|
- label:
|
||||||
|
align: CENTER
|
||||||
|
text: "Heat (Hold)"
|
||||||
|
text_font: font_button
|
||||||
|
text_color: 0xFFFFFF
|
||||||
|
on_long_press:
|
||||||
|
then:
|
||||||
|
- homeassistant.action:
|
||||||
|
action: climate.set_hvac_mode
|
||||||
|
data:
|
||||||
|
entity_id: "${atto_climate_entity}"
|
||||||
|
hvac_mode: "heat"
|
||||||
|
|
||||||
|
- button:
|
||||||
|
id: atto_cool_button
|
||||||
|
x: 272
|
||||||
|
y: 260
|
||||||
|
width: 220
|
||||||
|
height: 105
|
||||||
|
bg_color: 0x28313D
|
||||||
|
bg_opa: COVER
|
||||||
|
border_width: 2
|
||||||
|
border_color: 0x3E7FA7
|
||||||
|
radius: 18
|
||||||
|
pressed:
|
||||||
|
bg_color: 0x2E6A96
|
||||||
|
widgets:
|
||||||
|
- label:
|
||||||
|
align: CENTER
|
||||||
|
text: "Cool (Hold)"
|
||||||
|
text_font: font_button
|
||||||
|
text_color: 0xFFFFFF
|
||||||
|
on_long_press:
|
||||||
|
then:
|
||||||
|
- homeassistant.action:
|
||||||
|
action: climate.set_hvac_mode
|
||||||
|
data:
|
||||||
|
entity_id: "${atto_climate_entity}"
|
||||||
|
hvac_mode: "cool"
|
||||||
|
|
||||||
|
- button:
|
||||||
|
id: atto_setpoint_down_button
|
||||||
|
x: 519
|
||||||
|
y: 260
|
||||||
|
width: 110
|
||||||
|
height: 105
|
||||||
|
bg_color: 0x28313D
|
||||||
|
bg_opa: COVER
|
||||||
|
border_width: 2
|
||||||
|
border_color: 0x526276
|
||||||
|
radius: 18
|
||||||
|
pressed:
|
||||||
|
bg_color: 0x38485A
|
||||||
|
widgets:
|
||||||
|
- label:
|
||||||
|
align: CENTER
|
||||||
|
text: "\U000F0140"
|
||||||
|
text_font: font_mdi_setpoint
|
||||||
|
text_color: 0xFFFFFF
|
||||||
|
on_click:
|
||||||
|
- homeassistant.action:
|
||||||
|
action: climate.set_temperature
|
||||||
|
data:
|
||||||
|
entity_id: "${atto_climate_entity}"
|
||||||
|
data_template:
|
||||||
|
temperature: "{{ target_temperature }}"
|
||||||
|
variables:
|
||||||
|
target_temperature: |-
|
||||||
|
const float current = id(ha_atto_setpoint).state;
|
||||||
|
return isnan(current) ? 22.0f : current - 0.5f;
|
||||||
|
|
||||||
|
- button:
|
||||||
|
id: atto_setpoint_display
|
||||||
|
x: 639
|
||||||
|
y: 260
|
||||||
|
width: 227
|
||||||
|
height: 105
|
||||||
|
bg_color: 0x1C2632
|
||||||
|
bg_opa: COVER
|
||||||
|
border_width: 2
|
||||||
|
border_color: 0x5A6C82
|
||||||
|
radius: 18
|
||||||
|
widgets:
|
||||||
|
- label:
|
||||||
|
id: atto_setpoint_value_label
|
||||||
|
align: CENTER
|
||||||
|
text: "--.-°C"
|
||||||
|
text_font: font_title
|
||||||
|
text_color: 0xFFFFFF
|
||||||
|
|
||||||
|
- button:
|
||||||
|
id: atto_setpoint_up_button
|
||||||
|
x: 876
|
||||||
|
y: 260
|
||||||
|
width: 110
|
||||||
|
height: 105
|
||||||
|
bg_color: 0x28313D
|
||||||
|
bg_opa: COVER
|
||||||
|
border_width: 2
|
||||||
|
border_color: 0x526276
|
||||||
|
radius: 18
|
||||||
|
pressed:
|
||||||
|
bg_color: 0x38485A
|
||||||
|
widgets:
|
||||||
|
- label:
|
||||||
|
align: CENTER
|
||||||
|
text: "\U000F0143"
|
||||||
|
text_font: font_mdi_setpoint
|
||||||
|
text_color: 0xFFFFFF
|
||||||
|
on_click:
|
||||||
|
- homeassistant.action:
|
||||||
|
action: climate.set_temperature
|
||||||
|
data:
|
||||||
|
entity_id: "${atto_climate_entity}"
|
||||||
|
data_template:
|
||||||
|
temperature: "{{ target_temperature }}"
|
||||||
|
variables:
|
||||||
|
target_temperature: |-
|
||||||
|
const float current = id(ha_atto_setpoint).state;
|
||||||
|
return isnan(current) ? 22.0f : current + 0.5f;
|
||||||
|
|
||||||
|
#:################################################################################:#
|
||||||
|
# BOTTOM NAVIGATION
|
||||||
|
#:################################################################################:#
|
||||||
|
- button:
|
||||||
|
id: vehicles_back_button
|
||||||
|
x: 612
|
||||||
|
y: 475
|
||||||
|
width: 190
|
||||||
|
height: 92
|
||||||
|
bg_color: 0x315843
|
||||||
|
bg_opa: COVER
|
||||||
|
border_width: 2
|
||||||
|
border_color: 0x548C6C
|
||||||
|
radius: 16
|
||||||
|
pressed:
|
||||||
|
bg_color: 0x416F55
|
||||||
|
widgets:
|
||||||
|
- label:
|
||||||
|
align: CENTER
|
||||||
|
text: "Back"
|
||||||
|
text_font: font_button
|
||||||
|
text_color: 0xFFFFFF
|
||||||
|
on_click:
|
||||||
|
- lvgl.page.show:
|
||||||
|
id: bedroom_page
|
||||||
|
animation: MOVE_RIGHT
|
||||||
|
time: 220ms
|
||||||
|
|
||||||
|
- button:
|
||||||
|
id: vehicles_clock_button
|
||||||
|
x: 810
|
||||||
|
y: 475
|
||||||
|
width: 190
|
||||||
|
height: 92
|
||||||
|
bg_color: 0x214F72
|
||||||
|
bg_opa: COVER
|
||||||
|
border_width: 2
|
||||||
|
border_color: 0x3E7FA7
|
||||||
|
radius: 16
|
||||||
|
pressed:
|
||||||
|
bg_color: 0x2E6A96
|
||||||
|
widgets:
|
||||||
|
- label:
|
||||||
|
align: CENTER
|
||||||
|
text: "Clock"
|
||||||
|
text_font: font_button
|
||||||
|
text_color: 0xFFFFFF
|
||||||
|
on_click:
|
||||||
|
- lvgl.page.show:
|
||||||
|
id: clock_page
|
||||||
|
animation: FADE_IN
|
||||||
|
time: 250ms
|
||||||
|
|
||||||
|
- light.turn_on:
|
||||||
|
id: display_backlight
|
||||||
|
brightness: "${clock_brightness}"
|
||||||
|
transition_length: 1500ms
|
||||||
|
|
||||||
#:####################################################################################:#
|
#:####################################################################################:#
|
||||||
# CLIMATE PAGE
|
# CLIMATE PAGE
|
||||||
#:####################################################################################:#
|
#:####################################################################################:#
|
||||||
|
|||||||
Reference in New Issue
Block a user