Calendar data retrieval via "get calendar events" in automation and
text_helpers.
This commit is contained in:
+26
-26
@@ -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");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user