platform: waveshare_epaper
id: eink_display
cs_pin: GPIO45
dc_pin: GPIO46
reset_pin: GPIO47
busy_pin: GPIO09
model: 2.90inv2
rotation: 270
full_update_every: 10
update_interval: never
lambda: |-
it.fill(Color::BLACK); // Hintergrund weiß (wegen Invertierung)
// Header
it.print(10, -3, id(font_big), Color::WHITE, “Müllabfuhr”);
it.line(0, 35, 296, 35, Color::WHITE);
// Icon-Logik Funktion
auto get_icon = (std::string name) → const char* {
// Wandelt Text in Kleinbuchstaben um für sicherere Suche
std::transform(name.begin(), name.end(), name.begin(), ::tolower);
if (name.find("haus") != std::string::npos) return "\U000F0A7A";
if (name.find("papier") != std::string::npos) return "\U000F1CCC";
if (name.find("gelb") != std::string::npos) return "\U000F044C";
return "\U000F0A7A"; // Fallback
};
// Spalte 1: Nächster Termin
int col1 = 15;
if (id(t0_name).has_state()) {
// Icon mittig über der Spalte
it.print(74, 40, id(icon_font), Color::WHITE, TextAlign::TOP_CENTER, get_icon(id(t0_name).state));
// Text-Infos
it.print(74, 80, id(font_small), Color::WHITE, TextAlign::TOP_CENTER, id(t0_name).state.c_str());
if (id(t0_tage).state == 0) {
it.print(74, 100, id(font_small), Color::WHITE, TextAlign::TOP_CENTER, "HEUTE");
} else if (id(t0_tage).state == 1) {
it.print(74, 100, id(font_small), Color::WHITE, TextAlign::TOP_CENTER, "MORGEN");
} else {
it.printf(74, 100, id(font_small), Color::WHITE, TextAlign::TOP_CENTER, "In %.0f Tagen", id(t0_tage).state);
}
}
// Spalte 2: Übernächster Termin (Zentriert bei 222px)
if (id(t1_name).has_state()) {
// Icon mittig
it.print(222, 40, id(icon_font), Color::WHITE, TextAlign::TOP_CENTER, get_icon(id(t1_name).state));
// Text-Infos
it.print(222, 80, id(font_small), Color::WHITE, TextAlign::TOP_CENTER, id(t1_name).state.c_str());
if (id(t1_tage).state == 0) {
it.print(222, 100, id(font_small), Color::WHITE, TextAlign::TOP_CENTER, "HEUTE");
} else if (id(t1_tage).state == 1) {
it.print(222, 100, id(font_small), Color::WHITE, TextAlign::TOP_CENTER, "MORGEN");
} else {
it.printf(222, 100, id(font_small), Color::WHITE, TextAlign::TOP_CENTER, "In %.0f Tagen", id(t1_tage).state);
}
}
// — Zeitstempel —
// Nutzt TextAlign::TOP_RIGHT, um bündig an der rechten Kante (290px) zu kleben
it.strftime(290, 2, id(font_tiny), Color::WHITE, TextAlign::TOP_RIGHT, “Stand: %d.%m. %H:%M”, id(ha_time).now());