diff --git a/x3_dashboard/config.yaml b/x3_dashboard/config.yaml index f0625e4..ccfd2f3 100644 --- a/x3_dashboard/config.yaml +++ b/x3_dashboard/config.yaml @@ -21,7 +21,7 @@ options: title: "Küche Dashboard" subtitle: "Home Assistant Status" refresh_seconds: 300 - calendar_blacklist: "Gemeinsame Mittagspause,Gemeinsamer Mensa,Block ZDI Jour Fixe,Terminblock ZDI,Regelmäßiger Austausch SC Würzburg" + calendar_blacklist: "Gemeinsame Mittagspause,Block ZDI Jour Fixe,Terminblock ZDI,Regelmäßiger Austausch SC Würzburg" message_history_hours: 168 message_history_limit: 50 messages_per_page: 5 diff --git a/x3_dashboard/server.py b/x3_dashboard/server.py index 30e9d85..8491704 100644 --- a/x3_dashboard/server.py +++ b/x3_dashboard/server.py @@ -21,6 +21,7 @@ import html import io import json import os +import sys from http import HTTPStatus from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer from pathlib import Path @@ -477,14 +478,20 @@ def build_calendar_events(states: dict[str, dict[str, Any] | None], now: dt.date data = json.loads(resp.read().decode("utf-8")) events = data.get("service_response", {}).get(cal_id, {}).get("events", []) for ev in events: + start_raw = ev.get("start", "?") + if isinstance(start_raw, dict): + start_raw = start_raw.get("dateTime", start_raw.get("date", "?")) + end_raw = ev.get("end", "?") + if isinstance(end_raw, dict): + end_raw = end_raw.get("dateTime", end_raw.get("date", "?")) all_events.append({ "summary": ev.get("summary", "?"), - "start": ev.get("start", "?"), - "end": ev.get("end", "?"), + "start": start_raw, + "end": end_raw, "source": "caldav", }) - except Exception: - pass + except Exception as exc: + print(f"calendar fetch error for {cal_id}: {exc}", file=sys.stderr) if local_sensor_id: sensor_state = states.get("local_calendar_sensor") @@ -941,16 +948,10 @@ def render_status_image(feed: dict[str, Any]) -> Any: draw.text((24, y), f"Innen: {office['temperature_c']} C", font=body_font, fill=0) y += 32 draw.text((24, y), f"Aussen: {office['outside_temp_c']} C", font=body_font, fill=0) - y += 32 - draw.text((24, y), f"Solar: {office.get('solar_daily', 'unknown')} kWh", font=body_font, fill=0) - y += 32 - draw.text((24, y), f"Batterie: {office.get('battery_soc', 'unknown')}%", font=body_font, fill=0) - y += 32 - draw.text((24, y), f"Netz: {office.get('power_consumption', 'unknown')} kWh", font=body_font, fill=0) - draw.line((24, 330, DISPLAY_WIDTH - 24, 330), fill=0, width=2) + draw.line((24, 260, DISPLAY_WIDTH - 24, 260), fill=0, width=2) events = feed.get("calendar_events", []) - y = 350 + y = 284 if not events: draw.text((24, y), "Keine Termine", font=body_font, fill=0) else: