sensors.yaml formatted the raw BME280 reading directly with no unit conversion, inconsistent with the dial setpoints and weather widget, which are already Fahrenheit. Converts at the only point this sensor's value reaches the UI (shared by every display variant); climate.yaml's internal Celsius values are untouched since ESPHome's climate component always operates in Celsius regardless of display unit.
272 lines
9.1 KiB
YAML
272 lines
9.1 KiB
YAML
lvgl:
|
|
id: lvgl_comp
|
|
displays:
|
|
- lcd_display
|
|
touchscreens:
|
|
- touch_gt911
|
|
pages:
|
|
- id: page_home
|
|
widgets:
|
|
- obj:
|
|
width: 100%
|
|
height: 510px
|
|
pad_all: 16
|
|
border_width: 0
|
|
outline_width: 0
|
|
scrollable: false
|
|
layout:
|
|
type: flex
|
|
flex_flow: column
|
|
flex_align_cross: center
|
|
flex_align_track: center
|
|
flex_align_main: space_evenly
|
|
widgets:
|
|
- label:
|
|
id: home_temp_label
|
|
text: "-- °F"
|
|
text_font: montserrat_48
|
|
- label:
|
|
id: home_mode_label
|
|
text: "Mode: --"
|
|
text_font: montserrat_28
|
|
- obj:
|
|
width: 100%
|
|
height: size_content
|
|
border_width: 0
|
|
outline_width: 0
|
|
scrollable: false
|
|
layout:
|
|
type: flex
|
|
flex_flow: row
|
|
flex_align_cross: center
|
|
flex_align_track: center
|
|
flex_align_main: space_evenly
|
|
widgets:
|
|
- button:
|
|
width: 140px
|
|
height: 100px
|
|
on_click:
|
|
climate.control:
|
|
id: main_thermostat
|
|
target_temperature_low: !lambda "return id(main_thermostat).target_temperature_low - 0.5f;"
|
|
target_temperature_high: !lambda "return id(main_thermostat).target_temperature_high - 0.5f;"
|
|
widgets:
|
|
- label:
|
|
text: "-"
|
|
text_font: montserrat_40
|
|
- button:
|
|
width: 140px
|
|
height: 100px
|
|
on_click:
|
|
climate.control:
|
|
id: main_thermostat
|
|
target_temperature_low: !lambda "return id(main_thermostat).target_temperature_low + 0.5f;"
|
|
target_temperature_high: !lambda "return id(main_thermostat).target_temperature_high + 0.5f;"
|
|
widgets:
|
|
- label:
|
|
text: "+"
|
|
text_font: montserrat_40
|
|
- id: page_sensors
|
|
widgets:
|
|
- obj:
|
|
width: 100%
|
|
height: 510px
|
|
pad_all: 16
|
|
border_width: 0
|
|
outline_width: 0
|
|
scrollable: false
|
|
layout:
|
|
type: flex
|
|
flex_flow: column
|
|
flex_align_cross: center
|
|
flex_align_track: center
|
|
flex_align_main: space_evenly
|
|
widgets:
|
|
- label:
|
|
id: sensors_temp_label
|
|
text: "Temperature: -- °F"
|
|
text_font: montserrat_28
|
|
- label:
|
|
id: sensors_humidity_label
|
|
text: "Humidity: -- %"
|
|
text_font: montserrat_28
|
|
- label:
|
|
id: sensors_pressure_label
|
|
text: "Pressure: -- hPa"
|
|
text_font: montserrat_28
|
|
- id: page_settings
|
|
widgets:
|
|
- obj:
|
|
width: 100%
|
|
height: 510px
|
|
pad_all: 16
|
|
border_width: 0
|
|
outline_width: 0
|
|
scrollable: false
|
|
layout:
|
|
type: flex
|
|
flex_flow: column
|
|
flex_align_cross: center
|
|
flex_align_track: start
|
|
flex_align_main: start
|
|
widgets:
|
|
- label:
|
|
id: settings_ip_label
|
|
text: "IP: --"
|
|
text_font: montserrat_20
|
|
- label:
|
|
id: settings_uptime_label
|
|
text: "Uptime: -- min"
|
|
text_font: montserrat_20
|
|
- label:
|
|
text: "Manual relay override (bypasses thermostat):"
|
|
text_font: montserrat_16
|
|
- obj:
|
|
width: 100%
|
|
height: size_content
|
|
border_width: 0
|
|
outline_width: 0
|
|
scrollable: false
|
|
layout:
|
|
type: flex
|
|
flex_flow: row_wrap
|
|
flex_align_cross: start
|
|
flex_align_track: start
|
|
flex_align_main: start
|
|
widgets:
|
|
- checkbox:
|
|
text: "Fan"
|
|
on_click:
|
|
switch.toggle: relay_fan
|
|
- checkbox:
|
|
text: "Cool 1"
|
|
on_click:
|
|
switch.toggle: relay_cool1
|
|
- checkbox:
|
|
text: "Cool 2"
|
|
on_click:
|
|
switch.toggle: relay_cool2
|
|
- checkbox:
|
|
text: "Heat 1"
|
|
on_click:
|
|
switch.toggle: relay_heat1
|
|
- checkbox:
|
|
text: "Heat 2"
|
|
on_click:
|
|
switch.toggle: relay_heat2
|
|
- id: page_schedule
|
|
widgets:
|
|
- obj:
|
|
width: 100%
|
|
height: 510px
|
|
pad_all: 16
|
|
border_width: 0
|
|
outline_width: 0
|
|
scrollable: false
|
|
layout:
|
|
type: flex
|
|
flex_flow: column
|
|
flex_align_cross: center
|
|
flex_align_track: center
|
|
flex_align_main: space_evenly
|
|
widgets:
|
|
- label:
|
|
text: "Preset"
|
|
text_font: montserrat_28
|
|
- obj:
|
|
width: 100%
|
|
height: size_content
|
|
border_width: 0
|
|
outline_width: 0
|
|
scrollable: false
|
|
layout:
|
|
type: flex
|
|
flex_flow: row
|
|
flex_align_cross: center
|
|
flex_align_track: center
|
|
flex_align_main: space_evenly
|
|
widgets:
|
|
- button:
|
|
width: 300px
|
|
height: 100px
|
|
on_click:
|
|
climate.control:
|
|
id: main_thermostat
|
|
preset: home
|
|
widgets:
|
|
- label:
|
|
text: "Home"
|
|
text_font: montserrat_28
|
|
- button:
|
|
width: 300px
|
|
height: 100px
|
|
on_click:
|
|
climate.control:
|
|
id: main_thermostat
|
|
preset: away
|
|
widgets:
|
|
- label:
|
|
text: "Away"
|
|
text_font: montserrat_28
|
|
- label:
|
|
text: "Time-based scheduling runs in Home Assistant, not on this device."
|
|
text_font: montserrat_16
|
|
top_layer:
|
|
widgets:
|
|
- obj:
|
|
id: nav_bar
|
|
align: bottom_mid
|
|
width: 100%
|
|
height: 90px
|
|
pad_all: 4
|
|
radius: 0
|
|
border_width: 0
|
|
outline_width: 0
|
|
scrollable: false
|
|
layout:
|
|
type: flex
|
|
flex_flow: row
|
|
flex_align_cross: center
|
|
flex_align_track: center
|
|
flex_align_main: space_evenly
|
|
widgets:
|
|
- button:
|
|
id: nav_btn_home
|
|
width: 220px
|
|
height: 78px
|
|
on_click:
|
|
lvgl.page.show: page_home
|
|
widgets:
|
|
- label:
|
|
text: "Home"
|
|
text_font: montserrat_20
|
|
- button:
|
|
id: nav_btn_sensors
|
|
width: 220px
|
|
height: 78px
|
|
on_click:
|
|
lvgl.page.show: page_sensors
|
|
widgets:
|
|
- label:
|
|
text: "Sensors"
|
|
text_font: montserrat_20
|
|
- button:
|
|
id: nav_btn_settings
|
|
width: 220px
|
|
height: 78px
|
|
on_click:
|
|
lvgl.page.show: page_settings
|
|
widgets:
|
|
- label:
|
|
text: "Settings"
|
|
text_font: montserrat_20
|
|
- button:
|
|
id: nav_btn_schedule
|
|
width: 220px
|
|
height: 78px
|
|
on_click:
|
|
lvgl.page.show: page_schedule
|
|
widgets:
|
|
- label:
|
|
text: "Schedule"
|
|
text_font: montserrat_20
|