Fix CalDAV event parsing, remove solar/battery/netz from BMP, remove Gemeinsamer Mensa from blacklist

This commit is contained in:
Tilman Hampl
2026-09-01 08:39:38 +02:00
parent 5ca6e47d51
commit e171f0e3f0
2 changed files with 14 additions and 13 deletions
+1 -1
View File
@@ -21,7 +21,7 @@ options:
title: "Küche Dashboard" title: "Küche Dashboard"
subtitle: "Home Assistant Status" subtitle: "Home Assistant Status"
refresh_seconds: 300 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_hours: 168
message_history_limit: 50 message_history_limit: 50
messages_per_page: 5 messages_per_page: 5
+13 -12
View File
@@ -21,6 +21,7 @@ import html
import io import io
import json import json
import os import os
import sys
from http import HTTPStatus from http import HTTPStatus
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
from pathlib import Path 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")) data = json.loads(resp.read().decode("utf-8"))
events = data.get("service_response", {}).get(cal_id, {}).get("events", []) events = data.get("service_response", {}).get(cal_id, {}).get("events", [])
for ev in 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({ all_events.append({
"summary": ev.get("summary", "?"), "summary": ev.get("summary", "?"),
"start": ev.get("start", "?"), "start": start_raw,
"end": ev.get("end", "?"), "end": end_raw,
"source": "caldav", "source": "caldav",
}) })
except Exception: except Exception as exc:
pass print(f"calendar fetch error for {cal_id}: {exc}", file=sys.stderr)
if local_sensor_id: if local_sensor_id:
sensor_state = states.get("local_calendar_sensor") 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) draw.text((24, y), f"Innen: {office['temperature_c']} C", font=body_font, fill=0)
y += 32 y += 32
draw.text((24, y), f"Aussen: {office['outside_temp_c']} C", font=body_font, fill=0) 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", []) events = feed.get("calendar_events", [])
y = 350 y = 284
if not events: if not events:
draw.text((24, y), "Keine Termine", font=body_font, fill=0) draw.text((24, y), "Keine Termine", font=body_font, fill=0)
else: else: