2026-02-27 21:53:45 -05:00
|
|
|
################################################################################
|
|
|
|
|
# chore-tracker-esphome.yaml (AUTO-GENERATED — edit chores_config.yaml)
|
2026-02-28 09:41:42 -05:00
|
|
|
# Kids: Emma, Liam, Zoe
|
2026-02-27 21:53:45 -05:00
|
|
|
#
|
|
|
|
|
# HOME SCREEN BEHAVIOUR:
|
|
|
|
|
# Red outline = chores incomplete
|
2026-02-28 08:49:25 -05:00
|
|
|
# Solid green = all chores done
|
2026-02-27 21:53:45 -05:00
|
|
|
# Resets to red automatically at midnight
|
2026-02-28 08:49:25 -05:00
|
|
|
#
|
|
|
|
|
# Hardware: Waveshare ESP32-S3-Touch-LCD-7 (800x480)
|
2026-02-27 21:53:45 -05:00
|
|
|
################################################################################
|
|
|
|
|
|
|
|
|
|
esphome:
|
|
|
|
|
name: chore-tracker
|
|
|
|
|
friendly_name: "Chore Tracker"
|
2026-02-28 08:49:25 -05:00
|
|
|
on_boot:
|
|
|
|
|
priority: -10
|
|
|
|
|
then:
|
|
|
|
|
- light.turn_on: backlight
|
|
|
|
|
- lvgl.page.show: page_home
|
2026-02-27 21:53:45 -05:00
|
|
|
|
|
|
|
|
esp32:
|
2026-02-28 08:34:37 -05:00
|
|
|
board: esp32-s3-devkitc-1
|
2026-02-27 21:53:45 -05:00
|
|
|
framework:
|
|
|
|
|
type: esp-idf
|
|
|
|
|
|
2026-02-28 08:49:25 -05:00
|
|
|
psram:
|
|
|
|
|
mode: octal
|
|
|
|
|
speed: 80MHz
|
|
|
|
|
|
2026-02-27 21:53:45 -05:00
|
|
|
wifi:
|
2026-02-28 09:41:42 -05:00
|
|
|
ssid: !secret wifi_ssid
|
2026-02-27 21:53:45 -05:00
|
|
|
password: !secret wifi_password
|
|
|
|
|
ap:
|
|
|
|
|
ssid: "Chore Tracker Hotspot"
|
|
|
|
|
password: "choretracker"
|
|
|
|
|
|
|
|
|
|
captive_portal:
|
|
|
|
|
logger:
|
|
|
|
|
level: INFO
|
|
|
|
|
|
|
|
|
|
api:
|
|
|
|
|
encryption:
|
|
|
|
|
key: !secret api_encryption_key
|
|
|
|
|
|
|
|
|
|
ota:
|
|
|
|
|
- platform: esphome
|
|
|
|
|
password: !secret ota_password
|
|
|
|
|
|
2026-02-28 08:49:25 -05:00
|
|
|
# ── I2C ───────────────────────────────────────────────────────────────────────
|
2026-02-27 21:53:45 -05:00
|
|
|
i2c:
|
2026-02-28 08:49:25 -05:00
|
|
|
sda: 8
|
|
|
|
|
scl: 9
|
2026-02-27 21:53:45 -05:00
|
|
|
|
2026-02-28 08:49:25 -05:00
|
|
|
# ── CH422G IO Expander (controls LCD reset, touch reset, backlight) ───────────
|
|
|
|
|
ch422g:
|
|
|
|
|
- id: ch422g_hub
|
|
|
|
|
|
|
|
|
|
# ── Display ───────────────────────────────────────────────────────────────────
|
|
|
|
|
display:
|
|
|
|
|
- platform: mipi_rgb
|
|
|
|
|
model: ESP32-S3-TOUCH-LCD-7-800X480
|
|
|
|
|
id: main_display
|
|
|
|
|
update_interval: never
|
|
|
|
|
auto_clear_enabled: false
|
|
|
|
|
reset_pin:
|
|
|
|
|
ch422g: ch422g_hub
|
|
|
|
|
number: 3
|
|
|
|
|
mode:
|
|
|
|
|
output: true
|
|
|
|
|
|
|
|
|
|
# ── Touchscreen ───────────────────────────────────────────────────────────────
|
|
|
|
|
touchscreen:
|
|
|
|
|
platform: gt911
|
|
|
|
|
id: touch
|
|
|
|
|
update_interval: 120ms
|
|
|
|
|
reset_pin:
|
|
|
|
|
ch422g: ch422g_hub
|
|
|
|
|
number: 1
|
|
|
|
|
mode:
|
|
|
|
|
output: true
|
|
|
|
|
|
|
|
|
|
# ── Backlight ─────────────────────────────────────────────────────────────────
|
2026-02-27 21:53:45 -05:00
|
|
|
output:
|
2026-02-28 08:49:25 -05:00
|
|
|
- platform: template
|
|
|
|
|
id: lcd_backlight_out
|
|
|
|
|
type: binary
|
|
|
|
|
write_action:
|
|
|
|
|
- if:
|
|
|
|
|
condition:
|
|
|
|
|
lambda: return state;
|
|
|
|
|
then:
|
|
|
|
|
- switch.turn_on: lcd_backlight_raw
|
|
|
|
|
else:
|
|
|
|
|
- switch.turn_off: lcd_backlight_raw
|
2026-02-27 21:53:45 -05:00
|
|
|
|
|
|
|
|
light:
|
2026-02-28 08:49:25 -05:00
|
|
|
- platform: binary
|
2026-02-27 21:53:45 -05:00
|
|
|
name: "Display Backlight"
|
2026-02-28 08:49:25 -05:00
|
|
|
output: lcd_backlight_out
|
2026-02-27 21:53:45 -05:00
|
|
|
id: backlight
|
|
|
|
|
|
2026-02-27 21:54:59 -05:00
|
|
|
# ── Midnight reset ────────────────────────────────────────────────────────────
|
2026-02-27 21:53:45 -05:00
|
|
|
time:
|
|
|
|
|
- platform: homeassistant
|
|
|
|
|
id: ha_time
|
|
|
|
|
on_time:
|
|
|
|
|
- hours: 0
|
|
|
|
|
minutes: 0
|
|
|
|
|
seconds: 0
|
|
|
|
|
then:
|
|
|
|
|
- lambda: |-
|
2026-02-28 09:41:42 -05:00
|
|
|
id(reset_emma_chores).execute();
|
|
|
|
|
id(reset_liam_chores).execute();
|
|
|
|
|
id(reset_zoe_chores).execute();
|
2026-02-27 21:53:45 -05:00
|
|
|
- lvgl.page.show: page_home
|
|
|
|
|
|
2026-02-28 08:49:25 -05:00
|
|
|
# ── Fonts (place files in /config/esphome/fonts/) ────────────────────────────
|
2026-02-27 22:15:50 -05:00
|
|
|
font:
|
2026-02-28 08:10:35 -05:00
|
|
|
- file: "fonts/Nunito-Black.ttf"
|
2026-02-27 21:53:45 -05:00
|
|
|
id: font_title
|
|
|
|
|
size: 40
|
2026-02-28 08:10:35 -05:00
|
|
|
- file: "fonts/Nunito-ExtraBold.ttf"
|
2026-02-27 21:53:45 -05:00
|
|
|
id: font_name
|
|
|
|
|
size: 30
|
2026-02-28 08:10:35 -05:00
|
|
|
- file: "fonts/Nunito-Bold.ttf"
|
2026-02-27 21:53:45 -05:00
|
|
|
id: font_med
|
|
|
|
|
size: 22
|
2026-02-28 08:10:35 -05:00
|
|
|
- file: "fonts/Nunito-SemiBold.ttf"
|
2026-02-27 21:53:45 -05:00
|
|
|
id: font_small
|
|
|
|
|
size: 17
|
2026-02-28 08:10:35 -05:00
|
|
|
- file: "fonts/Nunito-SemiBold.ttf"
|
2026-02-27 21:53:45 -05:00
|
|
|
id: font_tiny
|
|
|
|
|
size: 13
|
2026-02-28 09:41:42 -05:00
|
|
|
# MDI icon font — used for chore icons and kid avatars
|
|
|
|
|
- file: "fonts/materialdesignicons-webfont.ttf"
|
|
|
|
|
id: font_mdi_large
|
|
|
|
|
size: 48
|
|
|
|
|
bpp: 4
|
|
|
|
|
glyphs:
|
|
|
|
|
- file: "fonts/materialdesignicons-webfont.ttf"
|
|
|
|
|
id: font_mdi_small
|
|
|
|
|
size: 32
|
|
|
|
|
bpp: 4
|
|
|
|
|
glyphs:
|
2026-02-27 21:53:45 -05:00
|
|
|
|
2026-02-28 08:49:25 -05:00
|
|
|
# ── Switches — backlight raw + one per chore per kid ─────────────────────────
|
2026-02-27 21:53:45 -05:00
|
|
|
switch:
|
2026-02-28 08:49:25 -05:00
|
|
|
- platform: gpio
|
|
|
|
|
id: lcd_backlight_raw
|
|
|
|
|
name: "LCD Backlight Raw"
|
|
|
|
|
restore_mode: ALWAYS_ON
|
|
|
|
|
pin:
|
|
|
|
|
ch422g: ch422g_hub
|
|
|
|
|
number: 2
|
|
|
|
|
mode:
|
|
|
|
|
output: true
|
2026-02-27 21:53:45 -05:00
|
|
|
|
2026-02-28 09:41:42 -05:00
|
|
|
# ── Emma's chores ──────────────────────────
|
2026-02-27 22:17:51 -05:00
|
|
|
- platform: template
|
2026-02-28 09:41:42 -05:00
|
|
|
name: "Emma - Make Bed"
|
|
|
|
|
id: emma_make_bed
|
2026-02-27 21:54:59 -05:00
|
|
|
icon: mdi:checkbox-marked-circle
|
2026-02-27 21:53:45 -05:00
|
|
|
optimistic: true
|
|
|
|
|
restore_mode: RESTORE_DEFAULT_OFF
|
|
|
|
|
on_turn_on:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_emma_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_on
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_emma_make_bed
|
2026-02-27 21:53:45 -05:00
|
|
|
on_turn_off:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_emma_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_off
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_emma_make_bed
|
2026-02-27 21:53:45 -05:00
|
|
|
- platform: template
|
2026-02-28 09:41:42 -05:00
|
|
|
name: "Emma - Brush Teeth"
|
|
|
|
|
id: emma_brush_teeth
|
2026-02-27 21:54:59 -05:00
|
|
|
icon: mdi:checkbox-marked-circle
|
2026-02-27 21:53:45 -05:00
|
|
|
optimistic: true
|
|
|
|
|
restore_mode: RESTORE_DEFAULT_OFF
|
|
|
|
|
on_turn_on:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_emma_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_on
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_emma_brush_teeth
|
2026-02-27 21:53:45 -05:00
|
|
|
on_turn_off:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_emma_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_off
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_emma_brush_teeth
|
2026-02-27 21:53:45 -05:00
|
|
|
- platform: template
|
2026-02-28 09:41:42 -05:00
|
|
|
name: "Emma - Tidy Room"
|
|
|
|
|
id: emma_tidy_room
|
2026-02-27 21:54:59 -05:00
|
|
|
icon: mdi:checkbox-marked-circle
|
2026-02-27 21:53:45 -05:00
|
|
|
optimistic: true
|
|
|
|
|
restore_mode: RESTORE_DEFAULT_OFF
|
|
|
|
|
on_turn_on:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_emma_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_on
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_emma_tidy_room
|
2026-02-27 21:53:45 -05:00
|
|
|
on_turn_off:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_emma_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_off
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_emma_tidy_room
|
2026-02-27 21:53:45 -05:00
|
|
|
- platform: template
|
2026-02-28 09:41:42 -05:00
|
|
|
name: "Emma - Homework"
|
|
|
|
|
id: emma_homework
|
2026-02-27 21:54:59 -05:00
|
|
|
icon: mdi:checkbox-marked-circle
|
2026-02-27 21:53:45 -05:00
|
|
|
optimistic: true
|
|
|
|
|
restore_mode: RESTORE_DEFAULT_OFF
|
|
|
|
|
on_turn_on:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_emma_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_on
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_emma_homework
|
2026-02-27 21:53:45 -05:00
|
|
|
on_turn_off:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_emma_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_off
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_emma_homework
|
2026-02-27 21:53:45 -05:00
|
|
|
- platform: template
|
2026-02-28 09:41:42 -05:00
|
|
|
name: "Emma - Feed Dog"
|
|
|
|
|
id: emma_feed_dog
|
2026-02-27 21:54:59 -05:00
|
|
|
icon: mdi:checkbox-marked-circle
|
2026-02-27 21:53:45 -05:00
|
|
|
optimistic: true
|
|
|
|
|
restore_mode: RESTORE_DEFAULT_OFF
|
|
|
|
|
on_turn_on:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_emma_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_on
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_emma_feed_dog
|
2026-02-27 21:53:45 -05:00
|
|
|
on_turn_off:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_emma_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_off
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_emma_feed_dog
|
2026-02-27 21:53:45 -05:00
|
|
|
|
2026-02-28 09:41:42 -05:00
|
|
|
# ── Liam's chores ──────────────────────────
|
2026-02-27 22:17:51 -05:00
|
|
|
- platform: template
|
2026-02-28 09:41:42 -05:00
|
|
|
name: "Liam - Make Bed"
|
|
|
|
|
id: liam_make_bed
|
2026-02-27 21:54:59 -05:00
|
|
|
icon: mdi:checkbox-marked-circle
|
2026-02-27 21:53:45 -05:00
|
|
|
optimistic: true
|
|
|
|
|
restore_mode: RESTORE_DEFAULT_OFF
|
|
|
|
|
on_turn_on:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_liam_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_on
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_liam_make_bed
|
2026-02-27 21:53:45 -05:00
|
|
|
on_turn_off:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_liam_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_off
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_liam_make_bed
|
2026-02-27 21:53:45 -05:00
|
|
|
- platform: template
|
2026-02-28 09:41:42 -05:00
|
|
|
name: "Liam - Brush Teeth"
|
|
|
|
|
id: liam_brush_teeth
|
2026-02-27 21:54:59 -05:00
|
|
|
icon: mdi:checkbox-marked-circle
|
2026-02-27 21:53:45 -05:00
|
|
|
optimistic: true
|
|
|
|
|
restore_mode: RESTORE_DEFAULT_OFF
|
|
|
|
|
on_turn_on:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_liam_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_on
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_liam_brush_teeth
|
2026-02-27 21:53:45 -05:00
|
|
|
on_turn_off:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_liam_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_off
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_liam_brush_teeth
|
2026-02-27 21:53:45 -05:00
|
|
|
- platform: template
|
2026-02-28 09:41:42 -05:00
|
|
|
name: "Liam - Set Table"
|
|
|
|
|
id: liam_set_table
|
2026-02-27 21:54:59 -05:00
|
|
|
icon: mdi:checkbox-marked-circle
|
2026-02-27 21:53:45 -05:00
|
|
|
optimistic: true
|
|
|
|
|
restore_mode: RESTORE_DEFAULT_OFF
|
|
|
|
|
on_turn_on:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_liam_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_on
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_liam_set_table
|
2026-02-27 21:53:45 -05:00
|
|
|
on_turn_off:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_liam_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_off
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_liam_set_table
|
2026-02-27 21:53:45 -05:00
|
|
|
- platform: template
|
2026-02-28 09:41:42 -05:00
|
|
|
name: "Liam - Take Out Trash"
|
|
|
|
|
id: liam_take_out_trash
|
2026-02-27 21:54:59 -05:00
|
|
|
icon: mdi:checkbox-marked-circle
|
2026-02-27 21:53:45 -05:00
|
|
|
optimistic: true
|
|
|
|
|
restore_mode: RESTORE_DEFAULT_OFF
|
|
|
|
|
on_turn_on:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_liam_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_on
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_liam_take_out_trash
|
2026-02-27 21:53:45 -05:00
|
|
|
on_turn_off:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_liam_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_off
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_liam_take_out_trash
|
2026-02-27 21:53:45 -05:00
|
|
|
|
2026-02-28 09:41:42 -05:00
|
|
|
# ── Zoe's chores ──────────────────────────
|
2026-02-27 22:17:51 -05:00
|
|
|
- platform: template
|
2026-02-28 09:41:42 -05:00
|
|
|
name: "Zoe - Make Bed"
|
|
|
|
|
id: zoe_make_bed
|
2026-02-27 21:54:59 -05:00
|
|
|
icon: mdi:checkbox-marked-circle
|
2026-02-27 21:53:45 -05:00
|
|
|
optimistic: true
|
|
|
|
|
restore_mode: RESTORE_DEFAULT_OFF
|
|
|
|
|
on_turn_on:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_zoe_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_on
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_zoe_make_bed
|
2026-02-27 21:53:45 -05:00
|
|
|
on_turn_off:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_zoe_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_off
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_zoe_make_bed
|
2026-02-27 21:53:45 -05:00
|
|
|
- platform: template
|
2026-02-28 09:41:42 -05:00
|
|
|
name: "Zoe - Brush Teeth"
|
|
|
|
|
id: zoe_brush_teeth
|
2026-02-27 21:54:59 -05:00
|
|
|
icon: mdi:checkbox-marked-circle
|
2026-02-27 21:53:45 -05:00
|
|
|
optimistic: true
|
|
|
|
|
restore_mode: RESTORE_DEFAULT_OFF
|
|
|
|
|
on_turn_on:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_zoe_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_on
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_zoe_brush_teeth
|
2026-02-27 21:53:45 -05:00
|
|
|
on_turn_off:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_zoe_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_off
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_zoe_brush_teeth
|
2026-02-27 21:53:45 -05:00
|
|
|
- platform: template
|
2026-02-28 09:41:42 -05:00
|
|
|
name: "Zoe - Water Plants"
|
|
|
|
|
id: zoe_water_plants
|
2026-02-27 21:54:59 -05:00
|
|
|
icon: mdi:checkbox-marked-circle
|
2026-02-27 21:53:45 -05:00
|
|
|
optimistic: true
|
|
|
|
|
restore_mode: RESTORE_DEFAULT_OFF
|
|
|
|
|
on_turn_on:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_zoe_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_on
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_zoe_water_plants
|
2026-02-27 21:53:45 -05:00
|
|
|
on_turn_off:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_zoe_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_off
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_zoe_water_plants
|
2026-02-27 21:53:45 -05:00
|
|
|
- platform: template
|
2026-02-28 09:41:42 -05:00
|
|
|
name: "Zoe - Homework"
|
|
|
|
|
id: zoe_homework
|
2026-02-27 21:54:59 -05:00
|
|
|
icon: mdi:checkbox-marked-circle
|
2026-02-27 21:53:45 -05:00
|
|
|
optimistic: true
|
|
|
|
|
restore_mode: RESTORE_DEFAULT_OFF
|
|
|
|
|
on_turn_on:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_zoe_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_on
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_zoe_homework
|
2026-02-27 21:53:45 -05:00
|
|
|
on_turn_off:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_zoe_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_off
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_zoe_homework
|
2026-02-27 21:53:45 -05:00
|
|
|
- platform: template
|
2026-02-28 09:41:42 -05:00
|
|
|
name: "Zoe - Tidy Room"
|
|
|
|
|
id: zoe_tidy_room
|
2026-02-27 21:54:59 -05:00
|
|
|
icon: mdi:checkbox-marked-circle
|
2026-02-27 21:53:45 -05:00
|
|
|
optimistic: true
|
|
|
|
|
restore_mode: RESTORE_DEFAULT_OFF
|
|
|
|
|
on_turn_on:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_zoe_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_on
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_zoe_tidy_room
|
2026-02-27 21:53:45 -05:00
|
|
|
on_turn_off:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_zoe_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_off
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_zoe_tidy_room
|
2026-02-27 21:53:45 -05:00
|
|
|
- platform: template
|
2026-02-28 09:41:42 -05:00
|
|
|
name: "Zoe - Practice Piano"
|
|
|
|
|
id: zoe_practice_piano
|
2026-02-27 21:54:59 -05:00
|
|
|
icon: mdi:checkbox-marked-circle
|
2026-02-27 21:53:45 -05:00
|
|
|
optimistic: true
|
|
|
|
|
restore_mode: RESTORE_DEFAULT_OFF
|
|
|
|
|
on_turn_on:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_zoe_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_on
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_zoe_practice_piano
|
2026-02-27 21:53:45 -05:00
|
|
|
on_turn_off:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: update_zoe_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
- homeassistant.service:
|
|
|
|
|
service: switch.turn_off
|
|
|
|
|
data:
|
2026-02-28 09:41:42 -05:00
|
|
|
entity_id: switch.chore_tracker_zoe_practice_piano
|
2026-02-27 21:53:45 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
# ── Sensors — reported to HA ─────────────────────────────────────────────────
|
|
|
|
|
sensor:
|
|
|
|
|
- platform: template
|
2026-02-28 09:41:42 -05:00
|
|
|
name: "Emma Chores Done"
|
|
|
|
|
id: emma_chores_done
|
2026-02-27 21:53:45 -05:00
|
|
|
accuracy_decimals: 0
|
|
|
|
|
update_interval: 2s
|
|
|
|
|
lambda: |-
|
|
|
|
|
int done = 0;
|
2026-02-28 09:41:42 -05:00
|
|
|
if (id(emma_make_bed).state) done++;
|
|
|
|
|
if (id(emma_brush_teeth).state) done++;
|
|
|
|
|
if (id(emma_tidy_room).state) done++;
|
|
|
|
|
if (id(emma_homework).state) done++;
|
|
|
|
|
if (id(emma_feed_dog).state) done++;
|
2026-02-27 21:53:45 -05:00
|
|
|
return done;
|
|
|
|
|
|
|
|
|
|
- platform: template
|
2026-02-28 09:41:42 -05:00
|
|
|
name: "Liam Chores Done"
|
|
|
|
|
id: liam_chores_done
|
2026-02-27 21:53:45 -05:00
|
|
|
accuracy_decimals: 0
|
|
|
|
|
update_interval: 2s
|
|
|
|
|
lambda: |-
|
|
|
|
|
int done = 0;
|
2026-02-28 09:41:42 -05:00
|
|
|
if (id(liam_make_bed).state) done++;
|
|
|
|
|
if (id(liam_brush_teeth).state) done++;
|
|
|
|
|
if (id(liam_set_table).state) done++;
|
|
|
|
|
if (id(liam_take_out_trash).state) done++;
|
2026-02-27 21:53:45 -05:00
|
|
|
return done;
|
|
|
|
|
|
|
|
|
|
- platform: template
|
2026-02-28 09:41:42 -05:00
|
|
|
name: "Zoe Chores Done"
|
|
|
|
|
id: zoe_chores_done
|
2026-02-27 21:53:45 -05:00
|
|
|
accuracy_decimals: 0
|
|
|
|
|
update_interval: 2s
|
|
|
|
|
lambda: |-
|
|
|
|
|
int done = 0;
|
2026-02-28 09:41:42 -05:00
|
|
|
if (id(zoe_make_bed).state) done++;
|
|
|
|
|
if (id(zoe_brush_teeth).state) done++;
|
|
|
|
|
if (id(zoe_water_plants).state) done++;
|
|
|
|
|
if (id(zoe_homework).state) done++;
|
|
|
|
|
if (id(zoe_tidy_room).state) done++;
|
|
|
|
|
if (id(zoe_practice_piano).state) done++;
|
2026-02-27 21:53:45 -05:00
|
|
|
return done;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-02-27 21:54:59 -05:00
|
|
|
# ── Scripts — reset + UI update ───────────────────────────────────────────────
|
2026-02-27 21:53:45 -05:00
|
|
|
script:
|
2026-02-28 09:41:42 -05:00
|
|
|
- id: reset_emma_chores
|
2026-02-27 21:53:45 -05:00
|
|
|
mode: single
|
|
|
|
|
then:
|
|
|
|
|
- lambda: |-
|
2026-02-28 09:41:42 -05:00
|
|
|
id(emma_make_bed).turn_off();
|
|
|
|
|
id(emma_brush_teeth).turn_off();
|
|
|
|
|
id(emma_tidy_room).turn_off();
|
|
|
|
|
id(emma_homework).turn_off();
|
|
|
|
|
id(emma_feed_dog).turn_off();
|
|
|
|
|
- script.execute: update_emma_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
|
|
|
|
|
|
2026-02-28 09:41:42 -05:00
|
|
|
- id: update_emma_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
mode: single
|
|
|
|
|
then:
|
|
|
|
|
- lambda: |-
|
2026-02-28 09:41:42 -05:00
|
|
|
int done = (id(emma_make_bed).state ? 1 : 0) + (id(emma_brush_teeth).state ? 1 : 0) + (id(emma_tidy_room).state ? 1 : 0) + (id(emma_homework).state ? 1 : 0) + (id(emma_feed_dog).state ? 1 : 0);
|
2026-02-27 21:54:59 -05:00
|
|
|
int total = 5;
|
|
|
|
|
char buf[24];
|
2026-02-27 21:53:45 -05:00
|
|
|
|
2026-02-27 21:54:59 -05:00
|
|
|
// Progress bar + label
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_bar_set_value(id(progress_bar_emma), done, LV_ANIM_ON);
|
2026-02-27 21:54:59 -05:00
|
|
|
snprintf(buf, sizeof(buf), "%d / 5", done);
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_label_set_text(id(progress_label_emma), buf);
|
2026-02-27 21:53:45 -05:00
|
|
|
|
2026-02-27 21:54:59 -05:00
|
|
|
// All-done message in sidebar
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_label_set_text(id(all_done_label_emma), done == total ? "All done!" : "");
|
2026-02-27 21:54:59 -05:00
|
|
|
|
2026-02-28 08:49:25 -05:00
|
|
|
// Home button: RED outline = incomplete, SOLID GREEN = all done
|
2026-02-27 21:53:45 -05:00
|
|
|
if (done == total) {
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_obj_set_style_bg_opa(id(home_btn_emma), LV_OPA_COVER, LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_bg_color(id(home_btn_emma), lv_color_hex(0x6BCB77), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(home_btn_emma), 0, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(home_status_emma), "\u2713 all done!");
|
|
|
|
|
lv_obj_set_style_text_color(id(home_status_emma), lv_color_hex(0xFFFFFF), LV_PART_MAIN);
|
2026-02-27 21:53:45 -05:00
|
|
|
} else {
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_obj_set_style_bg_opa(id(home_btn_emma), LV_OPA_TRANSP, LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(home_btn_emma), lv_color_hex(0xFF4757), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(home_btn_emma), 5, LV_PART_MAIN);
|
2026-02-27 21:53:45 -05:00
|
|
|
snprintf(buf, sizeof(buf), "%d left", total - done);
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_label_set_text(id(home_status_emma), buf);
|
|
|
|
|
lv_obj_set_style_text_color(id(home_status_emma), lv_color_hex(0xFF4757), LV_PART_MAIN);
|
2026-02-27 21:53:45 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-27 21:54:59 -05:00
|
|
|
// Card colours
|
2026-02-28 09:41:42 -05:00
|
|
|
if (id(emma_make_bed).state) {
|
|
|
|
|
lv_obj_set_style_bg_color(id(card_emma_make_bed), lv_color_hex(0xF0FFF4), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_emma_make_bed), lv_color_hex(0x6BCB77), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_emma_make_bed), 3, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_emma_make_bed), "\u2705");
|
2026-02-27 21:53:45 -05:00
|
|
|
} else {
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_obj_set_style_bg_color(id(card_emma_make_bed), lv_color_hex(0xFFFFFF), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_emma_make_bed), lv_color_hex(0xEEEEEE), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_emma_make_bed), 2, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_emma_make_bed), "");
|
2026-02-27 21:53:45 -05:00
|
|
|
}
|
2026-02-28 09:41:42 -05:00
|
|
|
if (id(emma_brush_teeth).state) {
|
|
|
|
|
lv_obj_set_style_bg_color(id(card_emma_brush_teeth), lv_color_hex(0xF0FFF4), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_emma_brush_teeth), lv_color_hex(0x6BCB77), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_emma_brush_teeth), 3, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_emma_brush_teeth), "\u2705");
|
2026-02-27 21:53:45 -05:00
|
|
|
} else {
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_obj_set_style_bg_color(id(card_emma_brush_teeth), lv_color_hex(0xFFFFFF), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_emma_brush_teeth), lv_color_hex(0xEEEEEE), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_emma_brush_teeth), 2, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_emma_brush_teeth), "");
|
2026-02-27 21:53:45 -05:00
|
|
|
}
|
2026-02-28 09:41:42 -05:00
|
|
|
if (id(emma_tidy_room).state) {
|
|
|
|
|
lv_obj_set_style_bg_color(id(card_emma_tidy_room), lv_color_hex(0xF0FFF4), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_emma_tidy_room), lv_color_hex(0x6BCB77), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_emma_tidy_room), 3, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_emma_tidy_room), "\u2705");
|
2026-02-27 21:53:45 -05:00
|
|
|
} else {
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_obj_set_style_bg_color(id(card_emma_tidy_room), lv_color_hex(0xFFFFFF), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_emma_tidy_room), lv_color_hex(0xEEEEEE), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_emma_tidy_room), 2, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_emma_tidy_room), "");
|
2026-02-27 21:53:45 -05:00
|
|
|
}
|
2026-02-28 09:41:42 -05:00
|
|
|
if (id(emma_homework).state) {
|
|
|
|
|
lv_obj_set_style_bg_color(id(card_emma_homework), lv_color_hex(0xF0FFF4), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_emma_homework), lv_color_hex(0x6BCB77), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_emma_homework), 3, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_emma_homework), "\u2705");
|
2026-02-27 21:53:45 -05:00
|
|
|
} else {
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_obj_set_style_bg_color(id(card_emma_homework), lv_color_hex(0xFFFFFF), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_emma_homework), lv_color_hex(0xEEEEEE), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_emma_homework), 2, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_emma_homework), "");
|
2026-02-27 21:53:45 -05:00
|
|
|
}
|
2026-02-28 09:41:42 -05:00
|
|
|
if (id(emma_feed_dog).state) {
|
|
|
|
|
lv_obj_set_style_bg_color(id(card_emma_feed_dog), lv_color_hex(0xF0FFF4), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_emma_feed_dog), lv_color_hex(0x6BCB77), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_emma_feed_dog), 3, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_emma_feed_dog), "\u2705");
|
2026-02-27 21:53:45 -05:00
|
|
|
} else {
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_obj_set_style_bg_color(id(card_emma_feed_dog), lv_color_hex(0xFFFFFF), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_emma_feed_dog), lv_color_hex(0xEEEEEE), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_emma_feed_dog), 2, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_emma_feed_dog), "");
|
2026-02-27 21:53:45 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2026-02-28 09:41:42 -05:00
|
|
|
- id: reset_liam_chores
|
2026-02-27 21:53:45 -05:00
|
|
|
mode: single
|
|
|
|
|
then:
|
|
|
|
|
- lambda: |-
|
2026-02-28 09:41:42 -05:00
|
|
|
id(liam_make_bed).turn_off();
|
|
|
|
|
id(liam_brush_teeth).turn_off();
|
|
|
|
|
id(liam_set_table).turn_off();
|
|
|
|
|
id(liam_take_out_trash).turn_off();
|
|
|
|
|
- script.execute: update_liam_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
|
|
|
|
|
|
2026-02-28 09:41:42 -05:00
|
|
|
- id: update_liam_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
mode: single
|
|
|
|
|
then:
|
|
|
|
|
- lambda: |-
|
2026-02-28 09:41:42 -05:00
|
|
|
int done = (id(liam_make_bed).state ? 1 : 0) + (id(liam_brush_teeth).state ? 1 : 0) + (id(liam_set_table).state ? 1 : 0) + (id(liam_take_out_trash).state ? 1 : 0);
|
2026-02-27 21:54:59 -05:00
|
|
|
int total = 4;
|
|
|
|
|
char buf[24];
|
2026-02-27 21:53:45 -05:00
|
|
|
|
2026-02-27 21:54:59 -05:00
|
|
|
// Progress bar + label
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_bar_set_value(id(progress_bar_liam), done, LV_ANIM_ON);
|
2026-02-27 21:54:59 -05:00
|
|
|
snprintf(buf, sizeof(buf), "%d / 4", done);
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_label_set_text(id(progress_label_liam), buf);
|
2026-02-27 21:53:45 -05:00
|
|
|
|
2026-02-27 21:54:59 -05:00
|
|
|
// All-done message in sidebar
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_label_set_text(id(all_done_label_liam), done == total ? "All done!" : "");
|
2026-02-27 21:54:59 -05:00
|
|
|
|
2026-02-28 08:49:25 -05:00
|
|
|
// Home button: RED outline = incomplete, SOLID GREEN = all done
|
2026-02-27 21:53:45 -05:00
|
|
|
if (done == total) {
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_obj_set_style_bg_opa(id(home_btn_liam), LV_OPA_COVER, LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_bg_color(id(home_btn_liam), lv_color_hex(0x6BCB77), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(home_btn_liam), 0, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(home_status_liam), "\u2713 all done!");
|
|
|
|
|
lv_obj_set_style_text_color(id(home_status_liam), lv_color_hex(0xFFFFFF), LV_PART_MAIN);
|
2026-02-27 21:53:45 -05:00
|
|
|
} else {
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_obj_set_style_bg_opa(id(home_btn_liam), LV_OPA_TRANSP, LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(home_btn_liam), lv_color_hex(0xFF4757), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(home_btn_liam), 5, LV_PART_MAIN);
|
2026-02-27 21:53:45 -05:00
|
|
|
snprintf(buf, sizeof(buf), "%d left", total - done);
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_label_set_text(id(home_status_liam), buf);
|
|
|
|
|
lv_obj_set_style_text_color(id(home_status_liam), lv_color_hex(0xFF4757), LV_PART_MAIN);
|
2026-02-27 21:53:45 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-27 21:54:59 -05:00
|
|
|
// Card colours
|
2026-02-28 09:41:42 -05:00
|
|
|
if (id(liam_make_bed).state) {
|
|
|
|
|
lv_obj_set_style_bg_color(id(card_liam_make_bed), lv_color_hex(0xF0FFF4), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_liam_make_bed), lv_color_hex(0x6BCB77), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_liam_make_bed), 3, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_liam_make_bed), "\u2705");
|
2026-02-27 21:53:45 -05:00
|
|
|
} else {
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_obj_set_style_bg_color(id(card_liam_make_bed), lv_color_hex(0xFFFFFF), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_liam_make_bed), lv_color_hex(0xEEEEEE), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_liam_make_bed), 2, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_liam_make_bed), "");
|
2026-02-27 21:53:45 -05:00
|
|
|
}
|
2026-02-28 09:41:42 -05:00
|
|
|
if (id(liam_brush_teeth).state) {
|
|
|
|
|
lv_obj_set_style_bg_color(id(card_liam_brush_teeth), lv_color_hex(0xF0FFF4), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_liam_brush_teeth), lv_color_hex(0x6BCB77), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_liam_brush_teeth), 3, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_liam_brush_teeth), "\u2705");
|
2026-02-27 21:53:45 -05:00
|
|
|
} else {
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_obj_set_style_bg_color(id(card_liam_brush_teeth), lv_color_hex(0xFFFFFF), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_liam_brush_teeth), lv_color_hex(0xEEEEEE), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_liam_brush_teeth), 2, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_liam_brush_teeth), "");
|
2026-02-27 21:53:45 -05:00
|
|
|
}
|
2026-02-28 09:41:42 -05:00
|
|
|
if (id(liam_set_table).state) {
|
|
|
|
|
lv_obj_set_style_bg_color(id(card_liam_set_table), lv_color_hex(0xF0FFF4), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_liam_set_table), lv_color_hex(0x6BCB77), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_liam_set_table), 3, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_liam_set_table), "\u2705");
|
2026-02-27 21:53:45 -05:00
|
|
|
} else {
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_obj_set_style_bg_color(id(card_liam_set_table), lv_color_hex(0xFFFFFF), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_liam_set_table), lv_color_hex(0xEEEEEE), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_liam_set_table), 2, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_liam_set_table), "");
|
2026-02-27 21:53:45 -05:00
|
|
|
}
|
2026-02-28 09:41:42 -05:00
|
|
|
if (id(liam_take_out_trash).state) {
|
|
|
|
|
lv_obj_set_style_bg_color(id(card_liam_take_out_trash), lv_color_hex(0xF0FFF4), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_liam_take_out_trash), lv_color_hex(0x6BCB77), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_liam_take_out_trash), 3, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_liam_take_out_trash), "\u2705");
|
2026-02-27 21:53:45 -05:00
|
|
|
} else {
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_obj_set_style_bg_color(id(card_liam_take_out_trash), lv_color_hex(0xFFFFFF), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_liam_take_out_trash), lv_color_hex(0xEEEEEE), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_liam_take_out_trash), 2, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_liam_take_out_trash), "");
|
2026-02-27 21:53:45 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2026-02-28 09:41:42 -05:00
|
|
|
- id: reset_zoe_chores
|
2026-02-27 21:53:45 -05:00
|
|
|
mode: single
|
|
|
|
|
then:
|
|
|
|
|
- lambda: |-
|
2026-02-28 09:41:42 -05:00
|
|
|
id(zoe_make_bed).turn_off();
|
|
|
|
|
id(zoe_brush_teeth).turn_off();
|
|
|
|
|
id(zoe_water_plants).turn_off();
|
|
|
|
|
id(zoe_homework).turn_off();
|
|
|
|
|
id(zoe_tidy_room).turn_off();
|
|
|
|
|
id(zoe_practice_piano).turn_off();
|
|
|
|
|
- script.execute: update_zoe_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
|
|
|
|
|
|
2026-02-28 09:41:42 -05:00
|
|
|
- id: update_zoe_ui
|
2026-02-27 21:53:45 -05:00
|
|
|
mode: single
|
|
|
|
|
then:
|
|
|
|
|
- lambda: |-
|
2026-02-28 09:41:42 -05:00
|
|
|
int done = (id(zoe_make_bed).state ? 1 : 0) + (id(zoe_brush_teeth).state ? 1 : 0) + (id(zoe_water_plants).state ? 1 : 0) + (id(zoe_homework).state ? 1 : 0) + (id(zoe_tidy_room).state ? 1 : 0) + (id(zoe_practice_piano).state ? 1 : 0);
|
2026-02-27 21:54:59 -05:00
|
|
|
int total = 6;
|
|
|
|
|
char buf[24];
|
2026-02-27 21:53:45 -05:00
|
|
|
|
2026-02-27 21:54:59 -05:00
|
|
|
// Progress bar + label
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_bar_set_value(id(progress_bar_zoe), done, LV_ANIM_ON);
|
2026-02-27 21:54:59 -05:00
|
|
|
snprintf(buf, sizeof(buf), "%d / 6", done);
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_label_set_text(id(progress_label_zoe), buf);
|
2026-02-27 21:53:45 -05:00
|
|
|
|
2026-02-27 21:54:59 -05:00
|
|
|
// All-done message in sidebar
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_label_set_text(id(all_done_label_zoe), done == total ? "All done!" : "");
|
2026-02-27 21:54:59 -05:00
|
|
|
|
2026-02-28 08:49:25 -05:00
|
|
|
// Home button: RED outline = incomplete, SOLID GREEN = all done
|
2026-02-27 21:53:45 -05:00
|
|
|
if (done == total) {
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_obj_set_style_bg_opa(id(home_btn_zoe), LV_OPA_COVER, LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_bg_color(id(home_btn_zoe), lv_color_hex(0x6BCB77), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(home_btn_zoe), 0, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(home_status_zoe), "\u2713 all done!");
|
|
|
|
|
lv_obj_set_style_text_color(id(home_status_zoe), lv_color_hex(0xFFFFFF), LV_PART_MAIN);
|
2026-02-27 21:53:45 -05:00
|
|
|
} else {
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_obj_set_style_bg_opa(id(home_btn_zoe), LV_OPA_TRANSP, LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(home_btn_zoe), lv_color_hex(0xFF4757), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(home_btn_zoe), 5, LV_PART_MAIN);
|
2026-02-27 21:53:45 -05:00
|
|
|
snprintf(buf, sizeof(buf), "%d left", total - done);
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_label_set_text(id(home_status_zoe), buf);
|
|
|
|
|
lv_obj_set_style_text_color(id(home_status_zoe), lv_color_hex(0xFF4757), LV_PART_MAIN);
|
2026-02-27 21:53:45 -05:00
|
|
|
}
|
|
|
|
|
|
2026-02-27 21:54:59 -05:00
|
|
|
// Card colours
|
2026-02-28 09:41:42 -05:00
|
|
|
if (id(zoe_make_bed).state) {
|
|
|
|
|
lv_obj_set_style_bg_color(id(card_zoe_make_bed), lv_color_hex(0xF0FFF4), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_zoe_make_bed), lv_color_hex(0x6BCB77), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_zoe_make_bed), 3, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_zoe_make_bed), "\u2705");
|
2026-02-27 21:53:45 -05:00
|
|
|
} else {
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_obj_set_style_bg_color(id(card_zoe_make_bed), lv_color_hex(0xFFFFFF), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_zoe_make_bed), lv_color_hex(0xEEEEEE), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_zoe_make_bed), 2, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_zoe_make_bed), "");
|
2026-02-27 21:53:45 -05:00
|
|
|
}
|
2026-02-28 09:41:42 -05:00
|
|
|
if (id(zoe_brush_teeth).state) {
|
|
|
|
|
lv_obj_set_style_bg_color(id(card_zoe_brush_teeth), lv_color_hex(0xF0FFF4), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_zoe_brush_teeth), lv_color_hex(0x6BCB77), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_zoe_brush_teeth), 3, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_zoe_brush_teeth), "\u2705");
|
2026-02-27 21:53:45 -05:00
|
|
|
} else {
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_obj_set_style_bg_color(id(card_zoe_brush_teeth), lv_color_hex(0xFFFFFF), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_zoe_brush_teeth), lv_color_hex(0xEEEEEE), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_zoe_brush_teeth), 2, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_zoe_brush_teeth), "");
|
2026-02-27 21:53:45 -05:00
|
|
|
}
|
2026-02-28 09:41:42 -05:00
|
|
|
if (id(zoe_water_plants).state) {
|
|
|
|
|
lv_obj_set_style_bg_color(id(card_zoe_water_plants), lv_color_hex(0xF0FFF4), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_zoe_water_plants), lv_color_hex(0x6BCB77), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_zoe_water_plants), 3, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_zoe_water_plants), "\u2705");
|
2026-02-27 21:53:45 -05:00
|
|
|
} else {
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_obj_set_style_bg_color(id(card_zoe_water_plants), lv_color_hex(0xFFFFFF), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_zoe_water_plants), lv_color_hex(0xEEEEEE), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_zoe_water_plants), 2, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_zoe_water_plants), "");
|
2026-02-27 21:53:45 -05:00
|
|
|
}
|
2026-02-28 09:41:42 -05:00
|
|
|
if (id(zoe_homework).state) {
|
|
|
|
|
lv_obj_set_style_bg_color(id(card_zoe_homework), lv_color_hex(0xF0FFF4), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_zoe_homework), lv_color_hex(0x6BCB77), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_zoe_homework), 3, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_zoe_homework), "\u2705");
|
2026-02-27 21:53:45 -05:00
|
|
|
} else {
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_obj_set_style_bg_color(id(card_zoe_homework), lv_color_hex(0xFFFFFF), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_zoe_homework), lv_color_hex(0xEEEEEE), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_zoe_homework), 2, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_zoe_homework), "");
|
2026-02-27 21:53:45 -05:00
|
|
|
}
|
2026-02-28 09:41:42 -05:00
|
|
|
if (id(zoe_tidy_room).state) {
|
|
|
|
|
lv_obj_set_style_bg_color(id(card_zoe_tidy_room), lv_color_hex(0xF0FFF4), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_zoe_tidy_room), lv_color_hex(0x6BCB77), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_zoe_tidy_room), 3, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_zoe_tidy_room), "\u2705");
|
2026-02-27 21:53:45 -05:00
|
|
|
} else {
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_obj_set_style_bg_color(id(card_zoe_tidy_room), lv_color_hex(0xFFFFFF), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_zoe_tidy_room), lv_color_hex(0xEEEEEE), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_zoe_tidy_room), 2, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_zoe_tidy_room), "");
|
2026-02-27 21:53:45 -05:00
|
|
|
}
|
2026-02-28 09:41:42 -05:00
|
|
|
if (id(zoe_practice_piano).state) {
|
|
|
|
|
lv_obj_set_style_bg_color(id(card_zoe_practice_piano), lv_color_hex(0xF0FFF4), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_zoe_practice_piano), lv_color_hex(0x6BCB77), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_zoe_practice_piano), 3, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_zoe_practice_piano), "\u2705");
|
2026-02-27 21:53:45 -05:00
|
|
|
} else {
|
2026-02-28 09:41:42 -05:00
|
|
|
lv_obj_set_style_bg_color(id(card_zoe_practice_piano), lv_color_hex(0xFFFFFF), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_color(id(card_zoe_practice_piano), lv_color_hex(0xEEEEEE), LV_PART_MAIN);
|
|
|
|
|
lv_obj_set_style_border_width(id(card_zoe_practice_piano), 2, LV_PART_MAIN);
|
|
|
|
|
lv_label_set_text(id(check_zoe_practice_piano), "");
|
2026-02-27 21:53:45 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# ── LVGL UI ───────────────────────────────────────────────────────────────────
|
|
|
|
|
lvgl:
|
|
|
|
|
displays:
|
|
|
|
|
- main_display
|
|
|
|
|
touchscreens:
|
|
|
|
|
- touch
|
|
|
|
|
theme:
|
2026-02-28 08:13:13 -05:00
|
|
|
button:
|
2026-02-27 21:53:45 -05:00
|
|
|
radius: 20
|
|
|
|
|
border_width: 0
|
|
|
|
|
pages:
|
|
|
|
|
- id: page_home
|
|
|
|
|
bg_color: 0xFFF9F0
|
|
|
|
|
widgets:
|
|
|
|
|
- label:
|
|
|
|
|
x: 0
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 36
|
2026-02-27 21:53:45 -05:00
|
|
|
width: 800
|
|
|
|
|
align: TOP_MID
|
2026-02-27 21:54:59 -05:00
|
|
|
text: "Chore Tracker"
|
2026-02-27 21:53:45 -05:00
|
|
|
text_font: font_title
|
|
|
|
|
text_color: 0x2D3436
|
|
|
|
|
- label:
|
|
|
|
|
x: 0
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 90
|
2026-02-27 21:53:45 -05:00
|
|
|
width: 800
|
|
|
|
|
align: TOP_MID
|
|
|
|
|
text: "Tap a name to check off chores"
|
|
|
|
|
text_font: font_small
|
|
|
|
|
text_color: 0xB2BEC3
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 640
|
|
|
|
|
y: 424
|
|
|
|
|
width: 148
|
2026-02-27 21:53:45 -05:00
|
|
|
height: 40
|
|
|
|
|
bg_color: 0xFF4757
|
|
|
|
|
radius: 12
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: reset_emma_chores
|
|
|
|
|
- script.execute: reset_liam_chores
|
|
|
|
|
- script.execute: reset_zoe_chores
|
2026-02-27 21:53:45 -05:00
|
|
|
widgets:
|
|
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-28 08:49:25 -05:00
|
|
|
text: "Reset All"
|
2026-02-27 21:53:45 -05:00
|
|
|
text_color: 0xFFFFFF
|
|
|
|
|
text_font: font_tiny
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: home_btn_emma
|
2026-02-27 21:53:45 -05:00
|
|
|
x: 80
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 130
|
2026-02-27 21:53:45 -05:00
|
|
|
width: 200
|
2026-02-27 21:54:59 -05:00
|
|
|
height: 210
|
2026-02-27 21:53:45 -05:00
|
|
|
bg_color: 0xFFFFFF
|
|
|
|
|
bg_opa: TRANSP
|
|
|
|
|
border_color: 0xFF4757
|
|
|
|
|
border_width: 5
|
|
|
|
|
radius: 24
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- lvgl.page.show: page_emma
|
2026-02-27 21:53:45 -05:00
|
|
|
widgets:
|
|
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-27 21:54:59 -05:00
|
|
|
y: -45
|
2026-02-28 09:41:42 -05:00
|
|
|
text: ""
|
|
|
|
|
text_font: font_mdi_large
|
2026-02-27 21:53:45 -05:00
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 22
|
2026-02-28 09:41:42 -05:00
|
|
|
text: "Emma"
|
2026-02-27 21:53:45 -05:00
|
|
|
text_font: font_name
|
|
|
|
|
text_color: 0x2D3436
|
|
|
|
|
- label:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: home_status_emma
|
2026-02-27 21:53:45 -05:00
|
|
|
align: CENTER
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 66
|
2026-02-27 21:53:45 -05:00
|
|
|
text: "not done"
|
|
|
|
|
text_font: font_tiny
|
|
|
|
|
text_color: 0xFF4757
|
|
|
|
|
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: home_btn_liam
|
2026-02-27 21:53:45 -05:00
|
|
|
x: 300
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 130
|
2026-02-27 21:53:45 -05:00
|
|
|
width: 200
|
2026-02-27 21:54:59 -05:00
|
|
|
height: 210
|
2026-02-27 21:53:45 -05:00
|
|
|
bg_color: 0xFFFFFF
|
|
|
|
|
bg_opa: TRANSP
|
|
|
|
|
border_color: 0xFF4757
|
|
|
|
|
border_width: 5
|
|
|
|
|
radius: 24
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- lvgl.page.show: page_liam
|
2026-02-27 21:53:45 -05:00
|
|
|
widgets:
|
|
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-27 21:54:59 -05:00
|
|
|
y: -45
|
2026-02-28 09:41:42 -05:00
|
|
|
text: ""
|
|
|
|
|
text_font: font_mdi_large
|
2026-02-27 21:53:45 -05:00
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 22
|
2026-02-28 09:41:42 -05:00
|
|
|
text: "Liam"
|
2026-02-27 21:53:45 -05:00
|
|
|
text_font: font_name
|
|
|
|
|
text_color: 0x2D3436
|
|
|
|
|
- label:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: home_status_liam
|
2026-02-27 21:53:45 -05:00
|
|
|
align: CENTER
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 66
|
2026-02-27 21:53:45 -05:00
|
|
|
text: "not done"
|
|
|
|
|
text_font: font_tiny
|
|
|
|
|
text_color: 0xFF4757
|
|
|
|
|
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: home_btn_zoe
|
2026-02-27 21:53:45 -05:00
|
|
|
x: 520
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 130
|
2026-02-27 21:53:45 -05:00
|
|
|
width: 200
|
2026-02-27 21:54:59 -05:00
|
|
|
height: 210
|
2026-02-27 21:53:45 -05:00
|
|
|
bg_color: 0xFFFFFF
|
|
|
|
|
bg_opa: TRANSP
|
|
|
|
|
border_color: 0xFF4757
|
|
|
|
|
border_width: 5
|
|
|
|
|
radius: 24
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- lvgl.page.show: page_zoe
|
2026-02-27 21:53:45 -05:00
|
|
|
widgets:
|
|
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-27 21:54:59 -05:00
|
|
|
y: -45
|
2026-02-28 09:41:42 -05:00
|
|
|
text: ""
|
|
|
|
|
text_font: font_mdi_large
|
2026-02-27 21:53:45 -05:00
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 22
|
2026-02-28 09:41:42 -05:00
|
|
|
text: "Zoe"
|
2026-02-27 21:53:45 -05:00
|
|
|
text_font: font_name
|
|
|
|
|
text_color: 0x2D3436
|
|
|
|
|
- label:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: home_status_zoe
|
2026-02-27 21:53:45 -05:00
|
|
|
align: CENTER
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 66
|
2026-02-27 21:53:45 -05:00
|
|
|
text: "not done"
|
|
|
|
|
text_font: font_tiny
|
|
|
|
|
text_color: 0xFF4757
|
|
|
|
|
|
|
|
|
|
|
2026-02-28 09:41:42 -05:00
|
|
|
- id: page_emma
|
2026-02-27 21:53:45 -05:00
|
|
|
bg_color: 0xFFF9F0
|
|
|
|
|
widgets:
|
|
|
|
|
|
|
|
|
|
# ── Sidebar ──────────────────────────────────────────────────────────
|
|
|
|
|
- obj:
|
|
|
|
|
x: 0
|
|
|
|
|
y: 0
|
2026-02-27 21:54:59 -05:00
|
|
|
width: 172
|
2026-02-27 21:53:45 -05:00
|
|
|
height: 480
|
|
|
|
|
bg_color: 0x4D96FF
|
|
|
|
|
border_width: 0
|
|
|
|
|
radius: 0
|
|
|
|
|
pad_all: 0
|
|
|
|
|
widgets:
|
|
|
|
|
- label:
|
|
|
|
|
x: 0
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 22
|
|
|
|
|
width: 172
|
2026-02-27 21:53:45 -05:00
|
|
|
align: TOP_MID
|
2026-02-28 09:41:42 -05:00
|
|
|
text: ""
|
|
|
|
|
text_font: font_mdi_large
|
2026-02-27 21:53:45 -05:00
|
|
|
- label:
|
|
|
|
|
x: 0
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 76
|
|
|
|
|
width: 172
|
2026-02-27 21:53:45 -05:00
|
|
|
align: TOP_MID
|
2026-02-28 09:41:42 -05:00
|
|
|
text: "Emma"
|
2026-02-27 21:53:45 -05:00
|
|
|
text_font: font_name
|
|
|
|
|
text_color: 0xFFFFFF
|
|
|
|
|
- bar:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: progress_bar_emma
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 14
|
|
|
|
|
y: 132
|
|
|
|
|
width: 144
|
2026-02-27 21:53:45 -05:00
|
|
|
height: 16
|
|
|
|
|
bg_color: 0x2A6FCC
|
|
|
|
|
indicator:
|
|
|
|
|
bg_color: 0xFFFFFF
|
|
|
|
|
value: 0
|
|
|
|
|
min_value: 0
|
2026-02-27 21:54:59 -05:00
|
|
|
max_value: 5
|
2026-02-27 21:53:45 -05:00
|
|
|
- label:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: progress_label_emma
|
2026-02-27 21:53:45 -05:00
|
|
|
x: 0
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 156
|
|
|
|
|
width: 172
|
2026-02-27 21:53:45 -05:00
|
|
|
align: TOP_MID
|
2026-02-27 21:54:59 -05:00
|
|
|
text: "0 / 5"
|
|
|
|
|
text_font: font_small
|
2026-02-27 21:53:45 -05:00
|
|
|
text_color: 0xDDEEFF
|
|
|
|
|
- label:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: all_done_label_emma
|
2026-02-27 21:53:45 -05:00
|
|
|
x: 0
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 192
|
|
|
|
|
width: 172
|
2026-02-27 21:53:45 -05:00
|
|
|
align: TOP_MID
|
|
|
|
|
text: ""
|
|
|
|
|
text_font: font_small
|
|
|
|
|
text_color: 0xFFFFFF
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 14
|
|
|
|
|
y: 364
|
|
|
|
|
width: 144
|
2026-02-27 21:53:45 -05:00
|
|
|
height: 44
|
|
|
|
|
bg_color: 0xFF4757
|
|
|
|
|
radius: 14
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: reset_emma_chores
|
2026-02-27 21:53:45 -05:00
|
|
|
widgets:
|
|
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-28 08:49:25 -05:00
|
|
|
text: "Reset"
|
2026-02-27 21:53:45 -05:00
|
|
|
text_color: 0xFFFFFF
|
|
|
|
|
text_font: font_small
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 14
|
|
|
|
|
y: 420
|
|
|
|
|
width: 144
|
|
|
|
|
height: 44
|
2026-02-27 21:53:45 -05:00
|
|
|
bg_color: 0x2A6FCC
|
|
|
|
|
radius: 14
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
|
|
|
|
- lvgl.page.show: page_home
|
|
|
|
|
widgets:
|
|
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-28 08:49:25 -05:00
|
|
|
text: "Home"
|
2026-02-27 21:53:45 -05:00
|
|
|
text_color: 0xFFFFFF
|
|
|
|
|
text_font: font_small
|
|
|
|
|
|
|
|
|
|
# ── Chore cards ───────────────────────────────────────────────────────
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: card_emma_make_bed
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 182
|
2026-02-27 21:53:45 -05:00
|
|
|
y: 10
|
2026-02-27 21:54:59 -05:00
|
|
|
width: 196
|
2026-02-27 21:53:45 -05:00
|
|
|
height: 138
|
|
|
|
|
bg_color: 0xFFFFFF
|
|
|
|
|
border_color: 0xEEEEEE
|
|
|
|
|
border_width: 2
|
|
|
|
|
radius: 20
|
|
|
|
|
shadow_color: 0xCCCCCC
|
|
|
|
|
shadow_width: 4
|
|
|
|
|
shadow_ofs_y: 3
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- switch.toggle: emma_make_bed
|
2026-02-27 21:53:45 -05:00
|
|
|
widgets:
|
|
|
|
|
- label:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: check_emma_make_bed
|
2026-02-27 21:53:45 -05:00
|
|
|
align: TOP_RIGHT
|
|
|
|
|
x: -10
|
|
|
|
|
y: 8
|
|
|
|
|
text: ""
|
|
|
|
|
text_font: font_med
|
|
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
|
|
|
|
y: -34
|
2026-02-28 09:41:42 -05:00
|
|
|
text: ""
|
|
|
|
|
text_font: font_mdi_small
|
2026-02-27 21:53:45 -05:00
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 17
|
2026-02-27 21:53:45 -05:00
|
|
|
text: "Make Bed"
|
|
|
|
|
text_font: font_small
|
|
|
|
|
text_color: 0x2D3436
|
|
|
|
|
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: card_emma_brush_teeth
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 388
|
2026-02-27 21:53:45 -05:00
|
|
|
y: 10
|
2026-02-27 21:54:59 -05:00
|
|
|
width: 196
|
2026-02-27 21:53:45 -05:00
|
|
|
height: 138
|
|
|
|
|
bg_color: 0xFFFFFF
|
|
|
|
|
border_color: 0xEEEEEE
|
|
|
|
|
border_width: 2
|
|
|
|
|
radius: 20
|
|
|
|
|
shadow_color: 0xCCCCCC
|
|
|
|
|
shadow_width: 4
|
|
|
|
|
shadow_ofs_y: 3
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- switch.toggle: emma_brush_teeth
|
2026-02-27 21:53:45 -05:00
|
|
|
widgets:
|
|
|
|
|
- label:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: check_emma_brush_teeth
|
2026-02-27 21:53:45 -05:00
|
|
|
align: TOP_RIGHT
|
|
|
|
|
x: -10
|
|
|
|
|
y: 8
|
|
|
|
|
text: ""
|
|
|
|
|
text_font: font_med
|
|
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
|
|
|
|
y: -34
|
2026-02-28 09:41:42 -05:00
|
|
|
text: ""
|
|
|
|
|
text_font: font_mdi_small
|
2026-02-27 21:53:45 -05:00
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 17
|
2026-02-27 21:53:45 -05:00
|
|
|
text: "Brush Teeth"
|
|
|
|
|
text_font: font_small
|
|
|
|
|
text_color: 0x2D3436
|
|
|
|
|
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: card_emma_tidy_room
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 594
|
2026-02-27 21:53:45 -05:00
|
|
|
y: 10
|
2026-02-27 21:54:59 -05:00
|
|
|
width: 196
|
2026-02-27 21:53:45 -05:00
|
|
|
height: 138
|
|
|
|
|
bg_color: 0xFFFFFF
|
|
|
|
|
border_color: 0xEEEEEE
|
|
|
|
|
border_width: 2
|
|
|
|
|
radius: 20
|
|
|
|
|
shadow_color: 0xCCCCCC
|
|
|
|
|
shadow_width: 4
|
|
|
|
|
shadow_ofs_y: 3
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- switch.toggle: emma_tidy_room
|
2026-02-27 21:53:45 -05:00
|
|
|
widgets:
|
|
|
|
|
- label:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: check_emma_tidy_room
|
2026-02-27 21:53:45 -05:00
|
|
|
align: TOP_RIGHT
|
|
|
|
|
x: -10
|
|
|
|
|
y: 8
|
|
|
|
|
text: ""
|
|
|
|
|
text_font: font_med
|
|
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
|
|
|
|
y: -34
|
2026-02-28 09:41:42 -05:00
|
|
|
text: ""
|
|
|
|
|
text_font: font_mdi_small
|
2026-02-27 21:53:45 -05:00
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 17
|
2026-02-27 21:53:45 -05:00
|
|
|
text: "Tidy Room"
|
|
|
|
|
text_font: font_small
|
|
|
|
|
text_color: 0x2D3436
|
|
|
|
|
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: card_emma_homework
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 182
|
2026-02-27 21:53:45 -05:00
|
|
|
y: 158
|
2026-02-27 21:54:59 -05:00
|
|
|
width: 196
|
2026-02-27 21:53:45 -05:00
|
|
|
height: 138
|
|
|
|
|
bg_color: 0xFFFFFF
|
|
|
|
|
border_color: 0xEEEEEE
|
|
|
|
|
border_width: 2
|
|
|
|
|
radius: 20
|
|
|
|
|
shadow_color: 0xCCCCCC
|
|
|
|
|
shadow_width: 4
|
|
|
|
|
shadow_ofs_y: 3
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- switch.toggle: emma_homework
|
2026-02-27 21:53:45 -05:00
|
|
|
widgets:
|
|
|
|
|
- label:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: check_emma_homework
|
2026-02-27 21:53:45 -05:00
|
|
|
align: TOP_RIGHT
|
|
|
|
|
x: -10
|
|
|
|
|
y: 8
|
|
|
|
|
text: ""
|
|
|
|
|
text_font: font_med
|
|
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
|
|
|
|
y: -34
|
2026-02-28 09:41:42 -05:00
|
|
|
text: ""
|
|
|
|
|
text_font: font_mdi_small
|
2026-02-27 21:53:45 -05:00
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 17
|
2026-02-27 21:53:45 -05:00
|
|
|
text: "Homework"
|
|
|
|
|
text_font: font_small
|
|
|
|
|
text_color: 0x2D3436
|
|
|
|
|
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: card_emma_feed_dog
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 388
|
2026-02-27 21:53:45 -05:00
|
|
|
y: 158
|
2026-02-27 21:54:59 -05:00
|
|
|
width: 196
|
2026-02-27 21:53:45 -05:00
|
|
|
height: 138
|
|
|
|
|
bg_color: 0xFFFFFF
|
|
|
|
|
border_color: 0xEEEEEE
|
|
|
|
|
border_width: 2
|
|
|
|
|
radius: 20
|
|
|
|
|
shadow_color: 0xCCCCCC
|
|
|
|
|
shadow_width: 4
|
|
|
|
|
shadow_ofs_y: 3
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- switch.toggle: emma_feed_dog
|
2026-02-27 21:53:45 -05:00
|
|
|
widgets:
|
|
|
|
|
- label:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: check_emma_feed_dog
|
2026-02-27 21:53:45 -05:00
|
|
|
align: TOP_RIGHT
|
|
|
|
|
x: -10
|
|
|
|
|
y: 8
|
|
|
|
|
text: ""
|
|
|
|
|
text_font: font_med
|
|
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
|
|
|
|
y: -34
|
2026-02-28 09:41:42 -05:00
|
|
|
text: ""
|
|
|
|
|
text_font: font_mdi_small
|
2026-02-27 21:53:45 -05:00
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 17
|
|
|
|
|
text: "Feed Dog"
|
2026-02-27 21:53:45 -05:00
|
|
|
text_font: font_small
|
|
|
|
|
text_color: 0x2D3436
|
|
|
|
|
|
|
|
|
|
|
2026-02-28 09:41:42 -05:00
|
|
|
- id: page_liam
|
2026-02-27 21:53:45 -05:00
|
|
|
bg_color: 0xFFF9F0
|
|
|
|
|
widgets:
|
|
|
|
|
|
|
|
|
|
# ── Sidebar ──────────────────────────────────────────────────────────
|
|
|
|
|
- obj:
|
|
|
|
|
x: 0
|
|
|
|
|
y: 0
|
2026-02-27 21:54:59 -05:00
|
|
|
width: 172
|
2026-02-27 21:53:45 -05:00
|
|
|
height: 480
|
|
|
|
|
bg_color: 0xC77DFF
|
|
|
|
|
border_width: 0
|
|
|
|
|
radius: 0
|
|
|
|
|
pad_all: 0
|
|
|
|
|
widgets:
|
|
|
|
|
- label:
|
|
|
|
|
x: 0
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 22
|
|
|
|
|
width: 172
|
2026-02-27 21:53:45 -05:00
|
|
|
align: TOP_MID
|
2026-02-28 09:41:42 -05:00
|
|
|
text: ""
|
|
|
|
|
text_font: font_mdi_large
|
2026-02-27 21:53:45 -05:00
|
|
|
- label:
|
|
|
|
|
x: 0
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 76
|
|
|
|
|
width: 172
|
2026-02-27 21:53:45 -05:00
|
|
|
align: TOP_MID
|
2026-02-28 09:41:42 -05:00
|
|
|
text: "Liam"
|
2026-02-27 21:53:45 -05:00
|
|
|
text_font: font_name
|
|
|
|
|
text_color: 0xFFFFFF
|
|
|
|
|
- bar:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: progress_bar_liam
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 14
|
|
|
|
|
y: 132
|
|
|
|
|
width: 144
|
2026-02-27 21:53:45 -05:00
|
|
|
height: 16
|
|
|
|
|
bg_color: 0x8B42CC
|
|
|
|
|
indicator:
|
|
|
|
|
bg_color: 0xFFFFFF
|
|
|
|
|
value: 0
|
|
|
|
|
min_value: 0
|
2026-02-27 21:54:59 -05:00
|
|
|
max_value: 4
|
2026-02-27 21:53:45 -05:00
|
|
|
- label:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: progress_label_liam
|
2026-02-27 21:53:45 -05:00
|
|
|
x: 0
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 156
|
|
|
|
|
width: 172
|
2026-02-27 21:53:45 -05:00
|
|
|
align: TOP_MID
|
2026-02-27 21:54:59 -05:00
|
|
|
text: "0 / 4"
|
|
|
|
|
text_font: font_small
|
2026-02-27 21:53:45 -05:00
|
|
|
text_color: 0xDDEEFF
|
|
|
|
|
- label:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: all_done_label_liam
|
2026-02-27 21:53:45 -05:00
|
|
|
x: 0
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 192
|
|
|
|
|
width: 172
|
2026-02-27 21:53:45 -05:00
|
|
|
align: TOP_MID
|
|
|
|
|
text: ""
|
|
|
|
|
text_font: font_small
|
|
|
|
|
text_color: 0xFFFFFF
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 14
|
|
|
|
|
y: 364
|
|
|
|
|
width: 144
|
2026-02-27 21:53:45 -05:00
|
|
|
height: 44
|
|
|
|
|
bg_color: 0xFF4757
|
|
|
|
|
radius: 14
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: reset_liam_chores
|
2026-02-27 21:53:45 -05:00
|
|
|
widgets:
|
|
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-28 08:49:25 -05:00
|
|
|
text: "Reset"
|
2026-02-27 21:53:45 -05:00
|
|
|
text_color: 0xFFFFFF
|
|
|
|
|
text_font: font_small
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 14
|
|
|
|
|
y: 420
|
|
|
|
|
width: 144
|
|
|
|
|
height: 44
|
2026-02-27 21:53:45 -05:00
|
|
|
bg_color: 0x8B42CC
|
|
|
|
|
radius: 14
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
|
|
|
|
- lvgl.page.show: page_home
|
|
|
|
|
widgets:
|
|
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-28 08:49:25 -05:00
|
|
|
text: "Home"
|
2026-02-27 21:53:45 -05:00
|
|
|
text_color: 0xFFFFFF
|
|
|
|
|
text_font: font_small
|
|
|
|
|
|
|
|
|
|
# ── Chore cards ───────────────────────────────────────────────────────
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: card_liam_make_bed
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 182
|
2026-02-27 21:53:45 -05:00
|
|
|
y: 10
|
2026-02-27 21:54:59 -05:00
|
|
|
width: 196
|
2026-02-27 21:53:45 -05:00
|
|
|
height: 138
|
|
|
|
|
bg_color: 0xFFFFFF
|
|
|
|
|
border_color: 0xEEEEEE
|
|
|
|
|
border_width: 2
|
|
|
|
|
radius: 20
|
|
|
|
|
shadow_color: 0xCCCCCC
|
|
|
|
|
shadow_width: 4
|
|
|
|
|
shadow_ofs_y: 3
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- switch.toggle: liam_make_bed
|
2026-02-27 21:53:45 -05:00
|
|
|
widgets:
|
|
|
|
|
- label:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: check_liam_make_bed
|
2026-02-27 21:53:45 -05:00
|
|
|
align: TOP_RIGHT
|
|
|
|
|
x: -10
|
|
|
|
|
y: 8
|
|
|
|
|
text: ""
|
|
|
|
|
text_font: font_med
|
|
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
|
|
|
|
y: -34
|
2026-02-28 09:41:42 -05:00
|
|
|
text: ""
|
|
|
|
|
text_font: font_mdi_small
|
2026-02-27 21:53:45 -05:00
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 17
|
2026-02-27 21:53:45 -05:00
|
|
|
text: "Make Bed"
|
|
|
|
|
text_font: font_small
|
|
|
|
|
text_color: 0x2D3436
|
|
|
|
|
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: card_liam_brush_teeth
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 388
|
2026-02-27 21:53:45 -05:00
|
|
|
y: 10
|
2026-02-27 21:54:59 -05:00
|
|
|
width: 196
|
2026-02-27 21:53:45 -05:00
|
|
|
height: 138
|
|
|
|
|
bg_color: 0xFFFFFF
|
|
|
|
|
border_color: 0xEEEEEE
|
|
|
|
|
border_width: 2
|
|
|
|
|
radius: 20
|
|
|
|
|
shadow_color: 0xCCCCCC
|
|
|
|
|
shadow_width: 4
|
|
|
|
|
shadow_ofs_y: 3
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- switch.toggle: liam_brush_teeth
|
2026-02-27 21:53:45 -05:00
|
|
|
widgets:
|
|
|
|
|
- label:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: check_liam_brush_teeth
|
2026-02-27 21:53:45 -05:00
|
|
|
align: TOP_RIGHT
|
|
|
|
|
x: -10
|
|
|
|
|
y: 8
|
|
|
|
|
text: ""
|
|
|
|
|
text_font: font_med
|
|
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
|
|
|
|
y: -34
|
2026-02-28 09:41:42 -05:00
|
|
|
text: ""
|
|
|
|
|
text_font: font_mdi_small
|
2026-02-27 21:53:45 -05:00
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 17
|
2026-02-27 21:53:45 -05:00
|
|
|
text: "Brush Teeth"
|
|
|
|
|
text_font: font_small
|
|
|
|
|
text_color: 0x2D3436
|
|
|
|
|
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: card_liam_set_table
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 594
|
2026-02-27 21:53:45 -05:00
|
|
|
y: 10
|
2026-02-27 21:54:59 -05:00
|
|
|
width: 196
|
2026-02-27 21:53:45 -05:00
|
|
|
height: 138
|
|
|
|
|
bg_color: 0xFFFFFF
|
|
|
|
|
border_color: 0xEEEEEE
|
|
|
|
|
border_width: 2
|
|
|
|
|
radius: 20
|
|
|
|
|
shadow_color: 0xCCCCCC
|
|
|
|
|
shadow_width: 4
|
|
|
|
|
shadow_ofs_y: 3
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- switch.toggle: liam_set_table
|
2026-02-27 21:53:45 -05:00
|
|
|
widgets:
|
|
|
|
|
- label:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: check_liam_set_table
|
2026-02-27 21:53:45 -05:00
|
|
|
align: TOP_RIGHT
|
|
|
|
|
x: -10
|
|
|
|
|
y: 8
|
|
|
|
|
text: ""
|
|
|
|
|
text_font: font_med
|
|
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
|
|
|
|
y: -34
|
2026-02-28 09:41:42 -05:00
|
|
|
text: ""
|
|
|
|
|
text_font: font_mdi_small
|
2026-02-27 21:53:45 -05:00
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 17
|
2026-02-27 21:53:45 -05:00
|
|
|
text: "Set Table"
|
|
|
|
|
text_font: font_small
|
|
|
|
|
text_color: 0x2D3436
|
|
|
|
|
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: card_liam_take_out_trash
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 182
|
2026-02-27 21:53:45 -05:00
|
|
|
y: 158
|
2026-02-27 21:54:59 -05:00
|
|
|
width: 196
|
2026-02-27 21:53:45 -05:00
|
|
|
height: 138
|
|
|
|
|
bg_color: 0xFFFFFF
|
|
|
|
|
border_color: 0xEEEEEE
|
|
|
|
|
border_width: 2
|
|
|
|
|
radius: 20
|
|
|
|
|
shadow_color: 0xCCCCCC
|
|
|
|
|
shadow_width: 4
|
|
|
|
|
shadow_ofs_y: 3
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- switch.toggle: liam_take_out_trash
|
2026-02-27 21:53:45 -05:00
|
|
|
widgets:
|
|
|
|
|
- label:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: check_liam_take_out_trash
|
2026-02-27 21:53:45 -05:00
|
|
|
align: TOP_RIGHT
|
|
|
|
|
x: -10
|
|
|
|
|
y: 8
|
|
|
|
|
text: ""
|
|
|
|
|
text_font: font_med
|
|
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
|
|
|
|
y: -34
|
2026-02-28 09:41:42 -05:00
|
|
|
text: ""
|
|
|
|
|
text_font: font_mdi_small
|
2026-02-27 21:53:45 -05:00
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 17
|
2026-02-27 21:53:45 -05:00
|
|
|
text: "Take Out Trash"
|
|
|
|
|
text_font: font_small
|
|
|
|
|
text_color: 0x2D3436
|
|
|
|
|
|
|
|
|
|
|
2026-02-28 09:41:42 -05:00
|
|
|
- id: page_zoe
|
2026-02-27 21:53:45 -05:00
|
|
|
bg_color: 0xFFF9F0
|
|
|
|
|
widgets:
|
|
|
|
|
|
|
|
|
|
# ── Sidebar ──────────────────────────────────────────────────────────
|
|
|
|
|
- obj:
|
|
|
|
|
x: 0
|
|
|
|
|
y: 0
|
2026-02-27 21:54:59 -05:00
|
|
|
width: 172
|
2026-02-27 21:53:45 -05:00
|
|
|
height: 480
|
|
|
|
|
bg_color: 0xFF6B9D
|
|
|
|
|
border_width: 0
|
|
|
|
|
radius: 0
|
|
|
|
|
pad_all: 0
|
|
|
|
|
widgets:
|
|
|
|
|
- label:
|
|
|
|
|
x: 0
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 22
|
|
|
|
|
width: 172
|
2026-02-27 21:53:45 -05:00
|
|
|
align: TOP_MID
|
2026-02-28 09:41:42 -05:00
|
|
|
text: ""
|
|
|
|
|
text_font: font_mdi_large
|
2026-02-27 21:53:45 -05:00
|
|
|
- label:
|
|
|
|
|
x: 0
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 76
|
|
|
|
|
width: 172
|
2026-02-27 21:53:45 -05:00
|
|
|
align: TOP_MID
|
2026-02-28 09:41:42 -05:00
|
|
|
text: "Zoe"
|
2026-02-27 21:53:45 -05:00
|
|
|
text_font: font_name
|
|
|
|
|
text_color: 0xFFFFFF
|
|
|
|
|
- bar:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: progress_bar_zoe
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 14
|
|
|
|
|
y: 132
|
|
|
|
|
width: 144
|
2026-02-27 21:53:45 -05:00
|
|
|
height: 16
|
|
|
|
|
bg_color: 0xCC3A6F
|
|
|
|
|
indicator:
|
|
|
|
|
bg_color: 0xFFFFFF
|
|
|
|
|
value: 0
|
|
|
|
|
min_value: 0
|
2026-02-27 21:54:59 -05:00
|
|
|
max_value: 6
|
2026-02-27 21:53:45 -05:00
|
|
|
- label:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: progress_label_zoe
|
2026-02-27 21:53:45 -05:00
|
|
|
x: 0
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 156
|
|
|
|
|
width: 172
|
2026-02-27 21:53:45 -05:00
|
|
|
align: TOP_MID
|
2026-02-27 21:54:59 -05:00
|
|
|
text: "0 / 6"
|
|
|
|
|
text_font: font_small
|
2026-02-27 21:53:45 -05:00
|
|
|
text_color: 0xDDEEFF
|
|
|
|
|
- label:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: all_done_label_zoe
|
2026-02-27 21:53:45 -05:00
|
|
|
x: 0
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 192
|
|
|
|
|
width: 172
|
2026-02-27 21:53:45 -05:00
|
|
|
align: TOP_MID
|
|
|
|
|
text: ""
|
|
|
|
|
text_font: font_small
|
|
|
|
|
text_color: 0xFFFFFF
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 14
|
|
|
|
|
y: 364
|
|
|
|
|
width: 144
|
2026-02-27 21:53:45 -05:00
|
|
|
height: 44
|
|
|
|
|
bg_color: 0xFF4757
|
|
|
|
|
radius: 14
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- script.execute: reset_zoe_chores
|
2026-02-27 21:53:45 -05:00
|
|
|
widgets:
|
|
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-28 08:49:25 -05:00
|
|
|
text: "Reset"
|
2026-02-27 21:53:45 -05:00
|
|
|
text_color: 0xFFFFFF
|
|
|
|
|
text_font: font_small
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 14
|
|
|
|
|
y: 420
|
|
|
|
|
width: 144
|
|
|
|
|
height: 44
|
2026-02-27 21:53:45 -05:00
|
|
|
bg_color: 0xCC3A6F
|
|
|
|
|
radius: 14
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
|
|
|
|
- lvgl.page.show: page_home
|
|
|
|
|
widgets:
|
|
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-28 08:49:25 -05:00
|
|
|
text: "Home"
|
2026-02-27 21:53:45 -05:00
|
|
|
text_color: 0xFFFFFF
|
|
|
|
|
text_font: font_small
|
|
|
|
|
|
|
|
|
|
# ── Chore cards ───────────────────────────────────────────────────────
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: card_zoe_make_bed
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 182
|
2026-02-27 21:53:45 -05:00
|
|
|
y: 10
|
2026-02-27 21:54:59 -05:00
|
|
|
width: 196
|
2026-02-27 21:53:45 -05:00
|
|
|
height: 138
|
|
|
|
|
bg_color: 0xFFFFFF
|
|
|
|
|
border_color: 0xEEEEEE
|
|
|
|
|
border_width: 2
|
|
|
|
|
radius: 20
|
|
|
|
|
shadow_color: 0xCCCCCC
|
|
|
|
|
shadow_width: 4
|
|
|
|
|
shadow_ofs_y: 3
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- switch.toggle: zoe_make_bed
|
2026-02-27 21:53:45 -05:00
|
|
|
widgets:
|
|
|
|
|
- label:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: check_zoe_make_bed
|
2026-02-27 21:53:45 -05:00
|
|
|
align: TOP_RIGHT
|
|
|
|
|
x: -10
|
|
|
|
|
y: 8
|
|
|
|
|
text: ""
|
|
|
|
|
text_font: font_med
|
|
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
|
|
|
|
y: -34
|
2026-02-28 09:41:42 -05:00
|
|
|
text: ""
|
|
|
|
|
text_font: font_mdi_small
|
2026-02-27 21:53:45 -05:00
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 17
|
2026-02-27 21:53:45 -05:00
|
|
|
text: "Make Bed"
|
|
|
|
|
text_font: font_small
|
|
|
|
|
text_color: 0x2D3436
|
|
|
|
|
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: card_zoe_brush_teeth
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 388
|
2026-02-27 21:53:45 -05:00
|
|
|
y: 10
|
2026-02-27 21:54:59 -05:00
|
|
|
width: 196
|
2026-02-27 21:53:45 -05:00
|
|
|
height: 138
|
|
|
|
|
bg_color: 0xFFFFFF
|
|
|
|
|
border_color: 0xEEEEEE
|
|
|
|
|
border_width: 2
|
|
|
|
|
radius: 20
|
|
|
|
|
shadow_color: 0xCCCCCC
|
|
|
|
|
shadow_width: 4
|
|
|
|
|
shadow_ofs_y: 3
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- switch.toggle: zoe_brush_teeth
|
2026-02-27 21:53:45 -05:00
|
|
|
widgets:
|
|
|
|
|
- label:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: check_zoe_brush_teeth
|
2026-02-27 21:53:45 -05:00
|
|
|
align: TOP_RIGHT
|
|
|
|
|
x: -10
|
|
|
|
|
y: 8
|
|
|
|
|
text: ""
|
|
|
|
|
text_font: font_med
|
|
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
|
|
|
|
y: -34
|
2026-02-28 09:41:42 -05:00
|
|
|
text: ""
|
|
|
|
|
text_font: font_mdi_small
|
2026-02-27 21:53:45 -05:00
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 17
|
2026-02-27 21:53:45 -05:00
|
|
|
text: "Brush Teeth"
|
|
|
|
|
text_font: font_small
|
|
|
|
|
text_color: 0x2D3436
|
|
|
|
|
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: card_zoe_water_plants
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 594
|
2026-02-27 21:53:45 -05:00
|
|
|
y: 10
|
2026-02-27 21:54:59 -05:00
|
|
|
width: 196
|
2026-02-27 21:53:45 -05:00
|
|
|
height: 138
|
|
|
|
|
bg_color: 0xFFFFFF
|
|
|
|
|
border_color: 0xEEEEEE
|
|
|
|
|
border_width: 2
|
|
|
|
|
radius: 20
|
|
|
|
|
shadow_color: 0xCCCCCC
|
|
|
|
|
shadow_width: 4
|
|
|
|
|
shadow_ofs_y: 3
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- switch.toggle: zoe_water_plants
|
2026-02-27 21:53:45 -05:00
|
|
|
widgets:
|
|
|
|
|
- label:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: check_zoe_water_plants
|
2026-02-27 21:53:45 -05:00
|
|
|
align: TOP_RIGHT
|
|
|
|
|
x: -10
|
|
|
|
|
y: 8
|
|
|
|
|
text: ""
|
|
|
|
|
text_font: font_med
|
|
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
|
|
|
|
y: -34
|
2026-02-28 09:41:42 -05:00
|
|
|
text: ""
|
|
|
|
|
text_font: font_mdi_small
|
2026-02-27 21:53:45 -05:00
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-27 21:54:59 -05:00
|
|
|
y: 17
|
2026-02-27 21:53:45 -05:00
|
|
|
text: "Water Plants"
|
|
|
|
|
text_font: font_small
|
|
|
|
|
text_color: 0x2D3436
|
2026-02-27 21:54:59 -05:00
|
|
|
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: card_zoe_homework
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 182
|
|
|
|
|
y: 158
|
|
|
|
|
width: 196
|
|
|
|
|
height: 138
|
|
|
|
|
bg_color: 0xFFFFFF
|
|
|
|
|
border_color: 0xEEEEEE
|
|
|
|
|
border_width: 2
|
|
|
|
|
radius: 20
|
|
|
|
|
shadow_color: 0xCCCCCC
|
|
|
|
|
shadow_width: 4
|
|
|
|
|
shadow_ofs_y: 3
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- switch.toggle: zoe_homework
|
2026-02-27 21:54:59 -05:00
|
|
|
widgets:
|
|
|
|
|
- label:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: check_zoe_homework
|
2026-02-27 21:54:59 -05:00
|
|
|
align: TOP_RIGHT
|
|
|
|
|
x: -10
|
|
|
|
|
y: 8
|
|
|
|
|
text: ""
|
|
|
|
|
text_font: font_med
|
2026-02-27 21:53:45 -05:00
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
2026-02-27 21:54:59 -05:00
|
|
|
y: -34
|
2026-02-28 09:41:42 -05:00
|
|
|
text: ""
|
|
|
|
|
text_font: font_mdi_small
|
2026-02-27 21:54:59 -05:00
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
|
|
|
|
y: 17
|
|
|
|
|
text: "Homework"
|
|
|
|
|
text_font: font_small
|
|
|
|
|
text_color: 0x2D3436
|
|
|
|
|
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: card_zoe_tidy_room
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 388
|
|
|
|
|
y: 158
|
|
|
|
|
width: 196
|
|
|
|
|
height: 138
|
|
|
|
|
bg_color: 0xFFFFFF
|
|
|
|
|
border_color: 0xEEEEEE
|
|
|
|
|
border_width: 2
|
|
|
|
|
radius: 20
|
|
|
|
|
shadow_color: 0xCCCCCC
|
|
|
|
|
shadow_width: 4
|
|
|
|
|
shadow_ofs_y: 3
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- switch.toggle: zoe_tidy_room
|
2026-02-27 21:54:59 -05:00
|
|
|
widgets:
|
|
|
|
|
- label:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: check_zoe_tidy_room
|
2026-02-27 21:54:59 -05:00
|
|
|
align: TOP_RIGHT
|
|
|
|
|
x: -10
|
|
|
|
|
y: 8
|
|
|
|
|
text: ""
|
|
|
|
|
text_font: font_med
|
|
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
|
|
|
|
y: -34
|
2026-02-28 09:41:42 -05:00
|
|
|
text: ""
|
|
|
|
|
text_font: font_mdi_small
|
2026-02-27 21:54:59 -05:00
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
|
|
|
|
y: 17
|
|
|
|
|
text: "Tidy Room"
|
|
|
|
|
text_font: font_small
|
|
|
|
|
text_color: 0x2D3436
|
|
|
|
|
|
2026-02-28 08:13:13 -05:00
|
|
|
- button:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: card_zoe_practice_piano
|
2026-02-27 21:54:59 -05:00
|
|
|
x: 594
|
|
|
|
|
y: 158
|
|
|
|
|
width: 196
|
|
|
|
|
height: 138
|
|
|
|
|
bg_color: 0xFFFFFF
|
|
|
|
|
border_color: 0xEEEEEE
|
|
|
|
|
border_width: 2
|
|
|
|
|
radius: 20
|
|
|
|
|
shadow_color: 0xCCCCCC
|
|
|
|
|
shadow_width: 4
|
|
|
|
|
shadow_ofs_y: 3
|
|
|
|
|
on_click:
|
|
|
|
|
then:
|
2026-02-28 09:41:42 -05:00
|
|
|
- switch.toggle: zoe_practice_piano
|
2026-02-27 21:54:59 -05:00
|
|
|
widgets:
|
|
|
|
|
- label:
|
2026-02-28 09:41:42 -05:00
|
|
|
id: check_zoe_practice_piano
|
2026-02-27 21:54:59 -05:00
|
|
|
align: TOP_RIGHT
|
|
|
|
|
x: -10
|
|
|
|
|
y: 8
|
|
|
|
|
text: ""
|
|
|
|
|
text_font: font_med
|
|
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
|
|
|
|
y: -34
|
2026-02-28 09:41:42 -05:00
|
|
|
text: ""
|
|
|
|
|
text_font: font_mdi_small
|
2026-02-27 21:54:59 -05:00
|
|
|
- label:
|
|
|
|
|
align: CENTER
|
|
|
|
|
y: 17
|
|
|
|
|
text: "Practice Piano"
|
|
|
|
|
text_font: font_small
|
|
|
|
|
text_color: 0x2D3436
|
|
|
|
|
|
2026-02-27 22:15:50 -05:00
|
|
|
|