Add Interstellar and Your Name pages

Interstellar: Gargantua with a time dilation clock (Earth today vs.
Miller's planet), TARS with his settings and remarks about the house,
the Endurance spinning at a solar-driven RPM while a Ranger docks, and
the tesseract's bookshelf with the time in binary dust and the Message's
first word in Morse on a watch.

Your Name: comet Tiamat splitting over Itomori's lake, and
kataware-doki, a countdown to sunset from sun.sun where two silhouettes
stand on the crater rim during the twilight hour.

HomeData gains sunset, sunrise and sun elevation (with an ISO time
parser); wrap() and typed() move to el512_pages.h. Share Tech Mono 22
gets the full Latin set. All pages are in the renderer, checked with
normal, busy and empty data.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
mangavalkandClaude Opus 5.5 committed 2026-10-19 18:59:00 +02:00
1 parent a4ce97d744
commit f46f7ab6c5
22 files changed
+1159 -110

No files matched your search

+91 -4
View File
@@ -22,6 +22,8 @@ esphome:
id(f_ks_jp_big), id(icons_l)};
id(sg_fonts) = {id(f_sg_nixie), id(f_sg_title), id(f_cp_mono), id(f_cp_code), id(f_ks_pixel), id(f_sg_jp)};
id(st_fonts) = {id(f_st_small), id(f_st_medium), id(f_st_large), id(f_ks_text), id(f_ks_pixel)};
id(is_fonts) = {id(f_is_title), id(f_is_large), id(f_cp_mono), id(f_cp_code)};
id(yn_fonts) = {id(f_yn_jp), id(f_yn_hand), id(f_yn_clock), id(f_cp_mono)};
esp32:
board: wemos_d1_mini32
@@ -67,7 +69,7 @@ globals:
- id: plex_updated
type: uint32_t
initial_value: "0"
# Themed pages (Cyberpunk, KonoSuba, Steins;Gate, Star Trek): their fonts and the home data they show.
# Themed pages (Cyberpunk, KonoSuba, Steins;Gate, Star Trek, Interstellar, Your Name): their fonts and the home data they show.
- id: cp_fonts
type: el512::cyber::Fonts
- id: ks_fonts
@@ -76,6 +78,10 @@ globals:
type: el512::steins::Fonts
- id: st_fonts
type: el512::trek::Fonts
- id: is_fonts
type: el512::interstellar::Fonts
- id: yn_fonts
type: el512::yourname::Fonts
- id: cp_home
type: el512::HomeData
@@ -174,7 +180,7 @@ font:
- file: "gfonts://Share Tech Mono"
id: f_cp_code
size: 22
glyphs: " 0123456789ABCDEF.%"
glyphsets: [GF_Latin_Core]
# KonoSuba pages
- file: "gfonts://Cinzel@700"
id: f_ks_title
@@ -231,6 +237,28 @@ font:
id: f_st_large
size: 60
glyphs: " 0123456789:ADELRT"
# Interstellar pages (also use f_cp_mono and f_cp_code)
- file: "gfonts://Michroma"
id: f_is_title
size: 12
glyphsets: [GF_Latin_Core]
- file: "gfonts://Michroma"
id: f_is_large
size: 28
glyphs: " 0123456789:.ARST"
# Your Name pages (also use f_cp_mono)
- file: "gfonts://Yuji Syuku"
id: f_yn_jp
size: 26
glyphs: "君の名は。かたわれ時"
- file: "gfonts://Caveat@700"
id: f_yn_hand
size: 22
glyphsets: [GF_Latin_Core]
- file: "gfonts://Cormorant Garamond@600"
id: f_yn_clock
size: 48
glyphs: "0123456789:"
# --- Data from Home Assistant -------------------------------------------------
text_sensor:
@@ -266,6 +294,14 @@ text_sensor:
- platform: homeassistant
id: printer_state
entity_id: ${printer}
- platform: homeassistant
id: sun_setting
entity_id: sun.sun
attribute: next_setting
- platform: homeassistant
id: sun_rising
entity_id: sun.sun
attribute: next_rising
- platform: homeassistant
id: plex_update
entity_id: update.plex_media_server_mangavalkserver
@@ -294,6 +330,10 @@ sensor:
- platform: homeassistant
id: tautulli_bandwidth
entity_id: sensor.tautulli_total_bandwidth
- platform: homeassistant
id: sun_elev
entity_id: sun.sun
attribute: elevation
# Solar (Enphase Envoy) and grid
- platform: homeassistant
id: solar_power
@@ -439,6 +479,12 @@ select:
- Duty Roster
- Warp Core
- Captain's Log
- Gargantua
- TARS
- Endurance
- Tesseract
- Comet Tiamat
- Kataware-doki
initial_option: Clock
set_action:
- lambda: |-
@@ -467,6 +513,12 @@ select:
else if (x == "Duty Roster") p = id(page_st_roster);
else if (x == "Warp Core") p = id(page_st_warp);
else if (x == "Captain's Log") p = id(page_st_log);
else if (x == "Gargantua") p = id(page_is_gargantua);
else if (x == "TARS") p = id(page_is_tars);
else if (x == "Endurance") p = id(page_is_endurance);
else if (x == "Tesseract") p = id(page_is_tesseract);
else if (x == "Comet Tiamat") p = id(page_yn_comet);
else if (x == "Kataware-doki") p = id(page_yn_twilight);
id(panel).show_page(p);
id(panel).update();
@@ -506,7 +558,9 @@ interval:
id(page_plex), id(page_solar), id(page_cyber_hud), id(page_cyber_breach), id(page_cyber_scan),
id(page_cyber_split), id(page_ks_explosion), id(page_ks_guild), id(page_ks_card),
id(page_ks_battle), id(page_sg_meter), id(page_sg_dmail), id(page_sg_lab), id(page_sg_world),
id(page_st_lcars), id(page_st_roster), id(page_st_warp), id(page_st_log), id(page_still_alive)};
id(page_st_lcars), id(page_st_roster), id(page_st_warp), id(page_st_log),
id(page_is_gargantua), id(page_is_tars), id(page_is_endurance), id(page_is_tesseract),
id(page_yn_comet), id(page_yn_twilight), id(page_still_alive)};
for (size_t i = order.size() - 1; i > 0; i--)
std::swap(order[i], order[random_uint32() % (i + 1)]);
pos = order.size() - 1; // the next step starts at the front
@@ -535,6 +589,9 @@ interval:
d.agenda = id(agenda_events).state;
d.message = id(panel_message).state;
d.printer = id(printer_state).state;
d.sunset = el512::fx::parse_iso_utc(id(sun_setting).state);
d.sunrise = el512::fx::parse_iso_utc(id(sun_rising).state);
d.sun_elevation = id(sun_elev).state;
d.house = id(house_power).state;
d.grid = id(grid_import).state - id(grid_export).state;
d.rooms[0] = {"Woonkamer", id(t_woonkamer).state};
@@ -555,7 +612,9 @@ display:
animated_pages: [page_cyber_hud, page_cyber_breach, page_cyber_scan, page_cyber_split,
page_ks_explosion, page_ks_guild, page_ks_card, page_ks_battle,
page_sg_meter, page_sg_dmail, page_sg_lab, page_sg_world,
page_st_lcars, page_st_roster, page_st_warp, page_st_log]
page_st_lcars, page_st_roster, page_st_warp, page_st_log,
page_is_gargantua, page_is_tars, page_is_endurance, page_is_tesseract,
page_yn_comet, page_yn_twilight]
animation_interval: 66ms
on_page_change:
- then:
@@ -584,6 +643,12 @@ display:
else if (to == id(page_st_roster)) name = "Duty Roster";
else if (to == id(page_st_warp)) name = "Warp Core";
else if (to == id(page_st_log)) name = "Captain's Log";
else if (to == id(page_is_gargantua)) name = "Gargantua";
else if (to == id(page_is_tars)) name = "TARS";
else if (to == id(page_is_endurance)) name = "Endurance";
else if (to == id(page_is_tesseract)) name = "Tesseract";
else if (to == id(page_yn_comet)) name = "Comet Tiamat";
else if (to == id(page_yn_twilight)) name = "Kataware-doki";
if (id(page_select).current_option() != name) id(page_select).publish_state(name);
pages:
# 1. Clock, date and current weather
@@ -853,3 +918,25 @@ display:
- id: page_st_log
lambda: |-
el512::trek::captains_log(*id(panel), id(st_fonts), id(cp_home), id(ha_time).now());
# 25-28. Interstellar pages (components/el512/interstellar.cpp)
- id: page_is_gargantua
lambda: |-
el512::interstellar::gargantua(*id(panel), id(is_fonts), id(ha_time).now());
- id: page_is_tars
lambda: |-
el512::interstellar::tars(*id(panel), id(is_fonts), id(cp_home));
- id: page_is_endurance
lambda: |-
el512::interstellar::endurance(*id(panel), id(is_fonts), id(cp_home), id(ha_time).now());
- id: page_is_tesseract
lambda: |-
el512::interstellar::tesseract(*id(panel), id(is_fonts), id(cp_home), id(ha_time).now());
# 29-30. Your Name pages (components/el512/yourname.cpp)
- id: page_yn_comet
lambda: |-
el512::yourname::comet(*id(panel), id(yn_fonts), id(cp_home), id(ha_time).now());
- id: page_yn_twilight
lambda: |-
el512::yourname::twilight(*id(panel), id(yn_fonts), id(cp_home), id(ha_time).now());