Calendar data retrieval via "get calendar events" in automation and

text_helpers.
This commit is contained in:
2026-07-10 13:33:34 +02:00
parent 67a0a03093
commit df047f61fb
5 changed files with 177 additions and 62 deletions
+26 -26
View File
@@ -237,25 +237,25 @@ text_sensor:
entity_id: weather.zuhause
id: weather
# ── Kalender-Ereignisse (from HA template sensors) ──
# ── Kalender-Ereignisse (from HA input_text helpers) ──
- platform: homeassistant
entity_id: sensor.kalender_heute_privat
id: kalender_heute_privat_text
id: kalender_heute_privat
internal: true
- platform: homeassistant
entity_id: sensor.kalender_heute_arbeit
id: kalender_heute_arbeit_text
id: kalender_heute_arbeit
internal: true
- platform: homeassistant
entity_id: sensor.kalender_heute_privat_uhrzeit
id: kalender_heute_privat_uhrzeit
entity_id: sensor.kalender_morgen_privat
id: kalender_morgen_privat
internal: true
- platform: homeassistant
entity_id: sensor.kalender_heute_arbeit_uhrzeit
id: kalender_heute_arbeit_uhrzeit
entity_id: sensor.kalender_morgen_arbeit
id: kalender_morgen_arbeit
internal: true
graph:
@@ -1170,33 +1170,24 @@ display:
/* Event lines (Privat / Arbeit) */
int eventOffsetY = 90;
// Helper lambda: draw one event line at given Y offset with the given text sensor id
// Privat today
if (id(kalender_heute_privat_text).has_state() && !id(kalender_heute_privat_text).state.empty()) {
if (id(kalender_heute_privat).has_state() && !id(kalender_heute_privat).state.empty()) {
it.print(10 + leftX, 50 + leftY + eventOffsetY, id(mdi_med), TextAlign::BASELINE_LEFT, "\U0001f32e" );
if (id(kalender_heute_privat_uhrzeit).has_state() && !id(kalender_heute_privat_uhrzeit).state.empty()) {
it.printf(40 + leftX, 50 + leftY + eventOffsetY, id(sub_sensor_font), "%s ", id(kalender_heute_privat_uhrzeit).state.substr(0, 5).c_str());
}
size_t max_len = 38;
// Split by │ separator and display first line of events
auto parts = id(kalender_heute_privat).state.c_str();
it.printf(40 + leftX, 50 + leftY + eventOffsetY, id(sub_sensor_font), "%s",
id(kalender_heute_privat_text).state.substr(
id(kalender_heute_privat_uhrzeit).has_state() && !id(kalender_heute_privat_uhrzeit).state.empty()
? 6 : 0, max_len).c_str());
id(kalender_heute_privat).state.substr(0, 60).c_str());
} else {
it.print(10 + leftX, 50 + leftY + eventOffsetY, id(mdi_med), TextAlign::BASELINE_LEFT, "\U0001f32e" );
it.printf(40 + leftX, 50 + leftY + eventOffsetY, id(sub_sensor_font), "Kein Termin");
}
// Arbeit today
if (id(kalender_heute_arbeit_text).has_state() && !id(kalender_heute_arbeit_text).state.empty()) {
if (id(kalender_heute_arbeit).has_state() && !id(kalender_heute_arbeit).state.empty()) {
it.print(10 + leftX, 85 + leftY + eventOffsetY, id(mdi_med), TextAlign::BASELINE_LEFT, "\U0001f32e" );
if (id(kalender_heute_arbeit_uhrzeit).has_state() && !id(kalender_heute_arbeit_uhrzeit).state.empty()) {
it.printf(40 + leftX, 85 + leftY + eventOffsetY, id(sub_sensor_font), "%s ", id(kalender_heute_arbeit_uhrzeit).state.substr(0, 5).c_str());
}
size_t max_len = 38;
it.printf(40 + leftX, 85 + leftY + eventOffsetY, id(sub_sensor_font), "%s",
id(kalender_heute_arbeit_text).state.substr(
id(kalender_heute_arbeit_uhrzeit).has_state() && !id(kalender_heute_arbeit_uhrzeit).state.empty()
? 6 : 0, max_len).c_str());
id(kalender_heute_arbeit).state.substr(0, 60).c_str());
} else {
it.print(10 + leftX, 85 + leftY + eventOffsetY, id(mdi_med), TextAlign::BASELINE_LEFT, "\U0001f32e" );
it.printf(40 + leftX, 85 + leftY + eventOffsetY, id(sub_sensor_font), "Kein Termin");
@@ -1215,12 +1206,21 @@ display:
it.printf(205 + rightX, 45 + rightY, id(sensor_unit), "%02d.%04d.", tomorrow_month, tomorrow_year);
/* Event lines (Privat / Arbeit) */
// TODO: tomorrow events via HA template sensors
if (!id(kalender_heute_privat_text).has_state() || id(kalender_heute_privat_text).state.empty()) {
// Privat tomorrow
if (id(kalender_morgen_privat).has_state() && !id(kalender_morgen_privat).state.empty()) {
it.print(10 + rightX, 50 + rightY + eventOffsetY, id(mdi_med), TextAlign::BASELINE_LEFT, "\U0001f32e" );
it.printf(40 + rightX, 50 + rightY + eventOffsetY, id(sub_sensor_font), "%s",
id(kalender_morgen_privat).state.substr(0, 60).c_str());
} else {
it.print(10 + rightX, 50 + rightY + eventOffsetY, id(mdi_med), TextAlign::BASELINE_LEFT, "\U0001f32e" );
it.printf(40 + rightX, 50 + rightY + eventOffsetY, id(sub_sensor_font), "Kein Termin");
}
if (!id(kalender_heute_arbeit_text).has_state() || id(kalender_heute_arbeit_text).state.empty()) {
// Arbeit tomorrow
if (id(kalender_morgen_arbeit).has_state() && !id(kalender_morgen_arbeit).state.empty()) {
it.print(10 + rightX, 85 + rightY + eventOffsetY, id(mdi_med), TextAlign::BASELINE_LEFT, "\U0001f32e" );
it.printf(40 + rightX, 85 + rightY + eventOffsetY, id(sub_sensor_font), "%s",
id(kalender_morgen_arbeit).state.substr(0, 60).c_str());
} else {
it.print(10 + rightX, 85 + rightY + eventOffsetY, id(mdi_med), TextAlign::BASELINE_LEFT, "\U0001f32e" );
it.printf(40 + rightX, 85 + leftY + eventOffsetY, id(sub_sensor_font), "Kein Termin");
}