Eedc - Energie Effizienz Data Center

EEDC – Energie Effizienz Data Center | PV-Analyse Add-on für Home Assistant

Hallo zusammen,

ich möchte euch mein selbst entwickeltes Home Assistant Add-on vorstellen: eedc (Energie Effizienz Data Center) – eine vollständige Auswertungs- und Wirtschaftlichkeitsplattform für Anlagen wie PV (Wechselrichter, Module, Speicher, Wallbox), Wärmepumpe, E-Auto oder Balkonkraftwerk.

Kernprinzipien:

  • :locked: Alles lokal – Keine Cloud, keine Registrierung, alle Daten bleiben bei euch

  • :house: Standalone-fähig – Funktioniert mit oder ohne Home Assistant

  • :date: Monatliche Granularität – Ideal für Jahresauswertungen und ROI-Tracking


:control_knobs: Das Cockpit (v2.3.0 – frisch überarbeitet)

Das Dashboard zeigt jetzt auf einen Blick:

  • Hero-Leiste mit den 3 wichtigsten KPIs und Trend-Vergleich zum Vorjahr (▲/▼)

  • Energie-Fluss-Diagramm: Wohin fließt euer PV-Strom? Woher kommt euer Hausverbrauch?

  • Ring-Gauges für Autarkie und Eigenverbrauchsquote

  • Sparkline mit monatlichen PV-Erträgen über den gesamten Zeitraum

  • Amortisations-Fortschrittsbalken mit geschätztem Amortisationsjahr


:bar_chart: Auswertungen (6 Tabs)

Tab Inhalt
Energie Monats-Charts, Jahresvergleich, Delta-Indikatoren
PV-Anlage String-Performance, SOLL-IST vs. PVGIS, Degradation
Komponenten Speicher-Effizienz, WP-JAZ, E-Auto-Quellen, Wallbox, BKW
Finanzen Einspeisung, Einsparungen, Netto-Ertrag, Amortisation
CO2 Vermiedene Emissionen, Vergleich zu Netzbezug
Investitionen ROI pro Komponente, Jahres-Rendite p.a.

:handshake: Community-Vergleich (optional)

Wer möchte, kann seine anonymisierten Daten mit der Community teilen:

  • Nur Bundesland/Land wird übertragen – keine Adresse, keine PLZ

  • 6 Analyse-Tabs: Übersicht, PV-Ertrag, Komponenten, Regional, Trends, Statistiken

  • Achievements (z.B. Autarkiemeister, Solarprofi) und Rang-Badges (Top 10%)

  • Choropleth-Karte mit Bundesland-Vergleich

  • Jederzeit löschbar

Community-Server: energy.raunet.eu


:high_voltage: Unterstützte Komponenten

PV-Anlage (inkl. String-Vergleich) • Batteriespeicher (AC & DC) • E-Auto (V2H-fähig) • Wärmepumpe (JAZ/SCOP/COP) • Wallbox • Balkonkraftwerk • Sonstiges


:rocket: Installation

  1. HA → Einstellungen → Add-ons → Add-on Store → ⋮ → Repositories

  2. URL hinzufügen: https://github.com/supernova1963/eedc-homeassistant

  3. “EEDC” installieren, starten, in Sidebar anzeigen aktivieren

  4. Demo-Daten laden (ein Klick) – sofort alle Features ausprobieren

Alternativ als Docker-Container ohne HA:

docker run -p 8099:8099 -v $(pwd)/data:/data supernova1963/eedc:latest


:package: Tech Stack

Backend: FastAPI + SQLAlchemy + SQLite | Frontend: React + TypeScript + Tailwind + Recharts


Feedback, Feature-Wünsche und Fehlerberichte gerne als GitHub Issue oder direkt hier im Thread.

Links:

Update: v2.8.2 – Automatischer Cloud-Import

Hallo zusammen,

seit dem letzten Update hier hat sich einiges getan. EEDC ist inzwischen bei v2.8.2 – die Kinderkrankheiten aus der Beta-Phase sind behoben, und es gibt ein großes neues Feature:

Cloud-Import für 11 Hersteller – EEDC holt eure Monatsdaten automatisch aus der Hersteller-Cloud:

  • Dachanlagen: SolarEdge, Fronius, Huawei, Growatt, Sungrow, Deye/Solarman, Viessmann GridBox, EcoFlow

  • Balkonkraftwerke: EcoFlow PowerStream, Anker SOLIX, Hoymiles (HMS/HM/HMT)

Ihr gebt einfach eure App-Zugangsdaten ein (dieselben wie bei eurem Hersteller), testet die Verbindung, und EEDC zieht sich die historischen Daten. Für Hersteller die nicht dabei sind gibt’s einen Custom-Import für CSV/JSON mit Feld-Mapping.

Außerdem neu seit v2.0.3: Monatsabschluss-Wizard, dynamischer Tarif, 9 Geräte-Connectors (SMA, Fronius, go-eCharger, Shelly 3EM, OpenDTU u.a.) und der Community-Vergleich funktioniert jetzt stabil.

Tester gesucht: Die 11 Cloud-Import-Provider sind alle noch ungetestet mit echten Geräten. Wenn jemand einen der genannten Wechselrichter hat – ich freue mich über Rückmeldung ob die Daten korrekt ankommen. Installation ist unverändert über HACS oder Docker möglich.

GitHub: https://github.com/supernova1963/eedc-homeassistant

Hallo zusammen,

großes Update — EEDC ist jetzt bei v3.1 und hat seit dem letzten Post hier einiges dazubekommen:

Live-Dashboard mit Energiefluss-Diagramm
Das Herzstück von v3.0: Ein animiertes Flussdiagramm das in Echtzeit zeigt, wohin der Strom fließt. PV, Batterie, Netz, Wallbox, Wärmepumpe — alles als animierte Linien mit kW-Anzeige. Dazu SoC-Pegel, Heute-kWh und ein Tagesverlauf als Butterfly-Chart.

MQTT-Inbound
Wer MariaDB als Recorder nutzt, konnte bisher die HA-Statistik-Funktion nicht nutzen. Jetzt gibt es MQTT als Alternative: Eine HA-Automation schickt die Sensordaten an EEDC. Der Automations-Generator in den Einstellungen erstellt die passende YAML.

Monatsübersicht & Langzeit-Auswertung
Energie-Bilanz, Autarkie, Netto-Ertrag in €, Vorjahresvergleich — alles auf einen Blick.

Tagesverlauf

Installation wie gehabt als HA Add-on:
Repository-URL: GitHub - supernova1963/eedc-homeassistant: EEDC - Energie Effizienz Data Center als Home Assistant Add-on · GitHub

Wer es ausprobiert — Feedback ist immer willkommen!

1 „Gefällt mir“

Warum ich eedc ständig um Geräte erweitere, die ich selbst gar nicht besitze

Hallo zusammen,

sicher fragt ihr euch: “Warum baut der Unterstützung für Fronius, Huawei, Growatt, go-eCharger etc. ein — er hat doch selbst nur SMA?”

Die Antwort ist simpel: der anonyme Community-Benchmark.

Unter https://energy.raunet.eu können eedc-Nutzer ihre PV-Anlage anonym mit anderen vergleichen — Eigenverbrauch, Autarkie, Wirtschaftlichkeit, COP bei Wärmepumpen. Je mehr Anlagen mitmachen, desto aussagekräftiger werden die Vergleichswerte.

Das Problem: Wenn nur SMA-Nutzer mitmachen können, bleibt der Benchmark eine Filterblase. Damit die Zahlen wirklich etwas aussagen, brauchen wir Vielfalt — unterschiedliche Wechselrichter, Speicher, Regionen, Anlagengrößen.

Jede neue Schnittstelle, jeder neue Connector senkt die Hürde für einen weiteren Teilnehmer. Wenn jemand mit einer Fronius-Anlage seine Daten in 5 Minuten importieren kann statt sie manuell abzutippen, steigt die Chance enorm, dass er auch am Benchmark teilnimmt.

Was aktuell unterstützt wird:

  • Cloud-Import: SolarEdge, Fronius, Huawei, Growatt, Deye/Solarman

  • Lokale Connectors: SMA, Fronius, Kostal, Shelly, OpenDTU, sonnenBatterie, Tasmota, go-eCharger

  • Portal-Import: SMA Sunny Portal, Fronius Solar.web, SMA eCharger, EVCC

  • HA-Sensoren + MQTT als universelle Brücke

Und trotzdem fehlen noch viele Hersteller. Wenn jemand von euch Lust hat, einen neuen Connector beizutragen oder auch nur die API-Doku seines Wechselrichters zu teilen — das hilft enorm.

Am Ende profitieren alle: Je breiter die Datenbasis, desto besser kann jeder einzelne einschätzen, ob seine Anlage gut performt oder ob da noch Luft nach oben ist.

Schaut euch den Benchmark gerne mal an: https://energy.raunet.eu
und installiert die Standalone - Variante über GitHub - supernova1963/eedc: EEDC - Energie Effizienz Data Center: Standalone PV-Analyse mit optionaler Cloud-Provider-Integration · GitHub
oder die Homeassistant App (ehm. AddOn) über GitHub - supernova1963/eedc-homeassistant: EEDC - Energie Effizienz Data Center als Home Assistant Add-on · GitHub

Gernot

Hallo,

sieht sehr interessant aus. Könntest du die App auch für Italien anbieten?

Hallo @mhl,

die größten Herausforderungen sind Prognosen PVGIS sollte funktionieren wenn man latitude und longitude händisch einträgt. Aber alles was vom DWD kommt (u.a. Bright Sky) und ggf. die Strompreisabrechnung könnten nicht passen. Ach ja, auch der Community Vergleich kennt nur Deutsche Postleitzahlen.

Eine Übersetzung ist derzeit nicht geplant.

Schon probiert?

Hallo,

bin noch am probieren, da meine Anlage erst geliefert und montiert wird. Bezüglich Wetterquellen bin ich da entspannt, lediglich DVD funktioniert nicht, Open-Meteo und Open-Meteo-Solar scheinen zu funktionieren, genauso wie die PVGIS prognosen.

Auf den Vergleich könnte ich verzichten, eine Übersetzung wird im nördlichsten Teil von Italien nicht benötigt :wink: zumindest nicht von mir.

Warum wird die Strompreisberechnung nicht funktionieren? Preise sowie Vergütung kann man manuell eintrage oder?

Wäre es für dich ein großer Aufwand das ganze auf Italien zu erweitern bzw. was würdest du dazu benötigen? Soll keine blöde Frage sein sondern ehrliches Interesse.

Hallo @mhl,

gute Nachricht: Italien/Südtirol-Support ist jetzt eingebaut. Die Änderungen sind:

  • “Italien” als Land wählbar im Anlagen-Setup

  • USt-Satz wird automatisch auf 22% gesetzt bei Auswahl von IT

  • Italienische PLZ (CAP) werden korrekt akzeptiert

  • Community-Vergleich funktioniert mit Länderkennung “IT”

Was bereits vorher funktioniert hat und weiterhin geht:

  • PVGIS-Prognosen (Koordinaten manuell eintragen)

  • Open-Meteo / Open-Meteo Solar als Wetterdatenquelle

  • Strompreise & Einspeisevergütung manuell konfigurierbar

  • Währung € passt sowieso

Die Änderungen sind auf main und werden mit dem nächsten Add-on-Update automatisch verfügbar. Wenn du nicht auf das nächste Release warten möchtest, kannst du im Add-on Store über 3-Punkte-Menü oben rechts nach Updates suchen dann auf eedc - Energie Effizienz Data Center → Neu aufbauen

Viel Erfolg mit der neuen Anlage in Südtirol! :snow_capped_mountain::sun:

1 „Gefällt mir“

wow, top und vielen Dank. bin schon gespannt, sobald meine Anlage läuft, wie es aussieht.

Edit: wirst du noch weitere Wechselrichter usw. hinzufügen? Sigenergy z.B.

Nutzt du das Homeassistant AddOn oder die Standalone Variante?

Das Homeassistant AddOn übernimmt alles aus der jeweiligen Homeassistant Integration. Einmal zuordnen und der Monatsabschluss ist bis auf Sonderkosten vorgefüllt, Live Daten, Stunden und Tagesdaten werden automatisch gefüllt.

Die Standalone Variante läuft entsprechend dem HA-AddOn mit dem MQTT-Inbound.

Nur wenn das nicht möglich ist gibt es die Connectoren und Importe. Zur Sigenergy:

Option Machbarkeit Empfehlung
HA-Integration + EEDC Sensor-Mapping Sofort nutzbar Bester Weg für HA-Nutzer
MQTT-Inbound via sigenergy2mqtt Sofort nutzbar Auch ohne HA möglich
EEDC Connector (Modbus direkt) Möglich, aber aufwändig Nur sinnvoll wenn kein HA vorhanden
Cloud-Import API nicht öffentlich genug dokumentiert Derzeit nicht empfehlenswert
Portal-Import (CSV) Kein CSV-Export bekannt Nicht möglich

Empfehlung: Sigenergy in HA einbinden (HACS-Integration oder sigenergy2mqtt), dann EEDC Sensor-Mapping konfigurieren. Das funktioniert bereits ohne jede Codeänderung.

vielen Dank für die Erklärung, ich nutze EEDC auf HA somit sollte das importieren der Sensoren keine Problem darstellen.

eine weitere Idee wäre noch, die Solar Forecast AI @Tom-HA als mögliche Prognoseschnittstelle zu implementieren(Seine Prognose funktioniert, zumindest hier, ziemlich gut). Weiß nicht ob das möglich ist, aber Tom denke ich, wäre hier sicher offen dafür. Fragen könnte man mal.

Interessante Idee.
Ich habe mir Solar Forecast AI angeschaut. Das Repo auf github ist nicht offen und frei verfügbar.
Wir haben die Prognose im Live-Dashboard noch einmal mit den frei verfügbaren Tools (GTI statt GHI) verbessert.
Aufgrund der Beschreibung von Solar Forecast ML V18 “Sarpeidon” ist der erhöhte Genauigkeit (93–97% accuracy) für Steuerungen wahrscheinlich wesentlich. Für Analysen und Wirtschaftlichkeit-Berechnungen reichen die etwas verbesserte Prognose (geschätzt 85 -90%) nach unserer Einschätzung aus.
Man könnte, mit einem sehr hohen Aufwand, die ermittelten Werte aus Solar Forecast über ein Sensor-Mapping integrieren. Dafür müssten aber sehr viele Fallback - Routinen sicherstellen, dass, - bei nicht vorhandenem Mapping -, eine andere Berechnung erfolgt.

1 „Gefällt mir“

Ich habe heute Morgen die 3.3.6 installiert. Unten in der Zeile steht noch die 3.3.3

Im Systemlog sehe jede Menge Fehler. Der Community Vergleich funktioniert auch nicht.
Hier das Log:

  File "/usr/local/lib/python3.11/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
INFO:     192.168.178.25:0 - "GET /api/community/trends/12_monate HTTP/1.1" 500 Internal Server Error
ERROR:    Exception in ASGI application
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 416, in run_asgi
    result = await app(  # type: ignore[func-returns-value]
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__
    return await self.app(scope, receive, send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1160, in __call__
    await super().__call__(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 107, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 186, in __call__
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 164, in __call__
    await self.app(scope, receive, _send)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 87, in __call__
    await self.app(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 716, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 736, in app
    await route.handle(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 290, in handle
    await self.app(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 130, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 116, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 670, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 324, in run_endpoint_function
    return await dependant.call(**values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/backend/api/routes/community.py", line 545, in get_trends
    return response.json()
           ^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 832, in json
    return jsonlib.loads(self.content, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
INFO:     192.168.178.25:0 - "GET /api/community/benchmark/1?zeitraum=letzter_monat HTTP/1.1" 404 Not Found
INFO:     192.168.178.25:0 - "GET /api/community/statistics/global HTTP/1.1" 500 Internal Server Error
ERROR:    Exception in ASGI application
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 416, in run_asgi
    result = await app(  # type: ignore[func-returns-value]
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__
    return await self.app(scope, receive, send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1160, in __call__
    await super().__call__(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 107, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 186, in __call__
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 164, in __call__
    await self.app(scope, receive, _send)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 87, in __call__
    await self.app(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 716, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 736, in app
    await route.handle(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 290, in handle
    await self.app(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 130, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 116, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 670, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 324, in run_endpoint_function
    return await dependant.call(**values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/backend/api/routes/community.py", line 355, in get_global_statistics
    return response.json()
           ^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 832, in json
    return jsonlib.loads(self.content, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
INFO:     192.168.178.25:0 - "GET /api/community/statistics/rankings/spez_ertrag?limit=10 HTTP/1.1" 500 Internal Server Error
ERROR:    Exception in ASGI application
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 416, in run_asgi
    result = await app(  # type: ignore[func-returns-value]
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__
    return await self.app(scope, receive, send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1160, in __call__
    await super().__call__(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 107, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 186, in __call__
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 164, in __call__
    await self.app(scope, receive, _send)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/cors.py", line 87, in __call__
    await self.app(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 63, in __call__
    await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 716, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 736, in app
    await route.handle(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 290, in handle
    await self.app(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 130, in app
    await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app
    raise exc
  File "/usr/local/lib/python3.11/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app
    await app(scope, receive, sender)
  File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 116, in app
    response = await f(request)
               ^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 670, in app
    raw_response = await run_endpoint_function(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 324, in run_endpoint_function
    return await dependant.call(**values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/backend/api/routes/community.py", line 456, in get_ranking
    return response.json()
           ^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/httpx/_models.py", line 832, in json
    return jsonlib.loads(self.content, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
INFO:     192.168.178.25:0 - "GET /api/community/benchmark/1?zeitraum=letzter_monat HTTP/1.1" 404 Not Found
INFO:     192.168.178.25:0 - "GET /api/community/benchmark/1?zeitraum=letzter_monat HTTP/1.1" 404 Not Found
INFO:     192.168.178.25:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/monatsdaten/aggregiert/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/cockpit/uebersicht/1 HTTP/1.1" 200 OK
INFO:     127.0.0.1:60768 - "GET /api/health HTTP/1.1" 200 OK
INFO:     127.0.0.1:53818 - "GET /api/health HTTP/1.1" 200 OK
INFO:     127.0.0.1:40120 - "GET /api/health HTTP/1.1" 200 OK

Sorry, heute morgen musste ich den eedc-community server neu aufbauen. s.a.

[3.3.5] - 2026-03-22
Hinzugefügt
Community-Reset-Hinweis: Banner auf der Community-Seite informiert Nutzer, dass die Community-Daten durch einen Server-Vorfall am 22.03.2026 verloren gegangen sind und bittet um erneutes Teilen. Der Hinweis kann geschlossen werden und erscheint dann nicht mehr.
Hinweis
Durch eine fehlerhafte Server-Wartung wurden alle Community-Benchmark-Daten gelöscht. Der Community-Server läuft wieder — bitte teile deine Anlagendaten erneut unter Community → Daten teilen, damit der Benchmark wieder aufgebaut werden kann. Wir entschuldigen uns für die Unannehmlichkeiten.

Seit dem, weitere Änderung:

3.4.0] - 2026-03-22
Hinzugefügt
Solar Forecast ML Integration: Optionale Anbindung von Solar Forecast ML (SFML) im Wetter-Widget. Zeigt ML-basierte PV-Prognose als lila KPI (~XX kWh ML) und gepunktete lila Chart-Linie neben der EEDC-Prognose. Konfiguration über Sensor-Zuordnung → Live-Sensoren → Solar Forecast ML. Rein optional — ohne SFML ändert sich nichts.
Verbessert
Dokumentation aktualisiert: Versionsnummern auf v3.3 in 16 Dokumentationsdateien, Architektur-Doku mit neuen Hooks und Shared Components ergänzt.
docs/ aufgeräumt: Abgeschlossene Pläne archiviert, CSV-Testdaten verschoben, doppelte Screenshots bereinigt.
[3.3.6] - 2026-03-22
Verbessert
Frontend-Refactoring Phase 7 abgeschlossen: Alle 27 Seiten auf gemeinsame Hooks (useSelectedAnlage, useApiData) und Komponenten (DataLoadingState, PageHeader) migriert. Ca. 300 Zeilen dupliziertes Boilerplate entfernt. Konsistente Anlage-Selektion mit localStorage-Persistierung über alle Seiten.

Protoll wieder sauber:

===================================
  EEDC - Energie Daten Center
  Version: 3.4.0
===================================
Log Level: info
Database: /data/eedc.db
INFO:     Started server process [1]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8099 (Press CTRL+C to quit)
  HA-Integration: aktiv (SUPERVISOR_TOKEN gesetzt)
EEDC Backend startet...
Datenbank initialisiert.
Scheduler gestartet.
INFO:     127.0.0.1:50576 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/settings HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/settings HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/monatsabschluss/naechster/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/monatsdaten/aggregiert/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/cockpit/uebersicht/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/updates/check HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/anlagen/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/community/benchmark/1?zeitraum=letzte_12_monate HTTP/1.1" 200 OK
INFO:     127.0.0.1:49026 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1/tagesverlauf HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.5.3:0 - "GET /api/live/1/tagesverlauf HTTP/1.1" 200 OK
INFO:     192.168.5.3:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     127.0.0.1:59138 - "GET /api/health HTTP/1.1" 200 OK
INFO:     127.0.0.1:37232 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1/tagesverlauf HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.5.3:0 - "GET /api/live/1/tagesverlauf HTTP/1.1" 200 OK
INFO:     192.168.5.3:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     127.0.0.1:43002 - "GET /api/health HTTP/1.1" 200 OK
INFO:     127.0.0.1:54574 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/monatsdaten/aggregiert/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/cockpit/uebersicht/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1/tagesverlauf HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.5.3:0 - "GET /api/live/1/tagesverlauf HTTP/1.1" 200 OK
INFO:     192.168.5.3:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1/wetter HTTP/1.1" 200 OK
INFO:     192.168.5.3:0 - "GET /api/live/1/wetter HTTP/1.1" 200 OK
INFO:     127.0.0.1:45468 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1/tagesverlauf HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/settings HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/updates/check HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/settings HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/monatsabschluss/naechster/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/monatsdaten/aggregiert/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/cockpit/uebersicht/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     127.0.0.1:46724 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.5.3:0 - "GET /api/live/1/tagesverlauf HTTP/1.1" 200 OK
INFO:     192.168.5.3:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1/tagesverlauf HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     127.0.0.1:37986 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     127.0.0.1:55328 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.5.3:0 - "GET /api/live/1/tagesverlauf HTTP/1.1" 200 OK
INFO:     192.168.5.3:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1/tagesverlauf HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     127.0.0.1:57608 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET / HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /assets/index-BsqQ4CSn.js HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /assets/index-BKV9Z5Rh.css HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/settings HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/mqtt/status HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/updates/check HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/settings HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/monatsabschluss/naechster/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1/tagesverlauf HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1/wetter HTTP/1.1" 200 OK
INFO:     192.168.1.102:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     127.0.0.1:59216 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.5.3:0 - "GET /api/live/1/tagesverlauf HTTP/1.1" 200 OK
INFO:     192.168.5.3:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     127.0.0.1:40492 - "GET /api/health HTTP/1.1" 200 OK
INFO:     127.0.0.1:42158 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.5.3:0 - "GET /api/live/1/tagesverlauf HTTP/1.1" 200 OK
INFO:     192.168.5.3:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     127.0.0.1:39914 - "GET /api/health HTTP/1.1" 200 OK
INFO:     127.0.0.1:53510 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.5.3:0 - "GET /api/live/1/wetter HTTP/1.1" 200 OK
INFO:     192.168.5.3:0 - "GET /api/live/1/tagesverlauf HTTP/1.1" 200 OK
INFO:     192.168.5.3:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     127.0.0.1:41386 - "GET /api/health HTTP/1.1" 200 OK
INFO:     127.0.0.1:52268 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.5.3:0 - "GET /api/live/1/tagesverlauf HTTP/1.1" 200 OK
INFO:     192.168.5.3:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     127.0.0.1:45542 - "GET /api/health HTTP/1.1" 200 OK
INFO:     127.0.0.1:47788 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.5.3:0 - "GET /api/live/1/tagesverlauf HTTP/1.1" 200 OK
INFO:     192.168.5.3:0 - "GET /api/live/1 HTTP/1.1" 200 OK

Sorry,
Gernot

Verstanden, ist ja kein Problem. Ich vermutete den Fehler erst bei mir beimUpdate auf die 3.3.6.
Nun ich auf die 3.4.0. Die Fehler im Log treten nicht mehr auf (siehe Log).
Eine Frage zur Integration Solar Forecast ML. Ich habe bei mir keine Einstellung dazu gefunden. Wo muss ich “suchen”?

EEDC Backend wird beendet...
===================================
  EEDC - Energie Daten Center
  Version: 3.4.0
===================================
Log Level: info
Database: /data/eedc.db

INFO:     Started server process [1]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8099 (Press CTRL+C to quit)
  HA-Integration: aktiv (SUPERVISOR_TOKEN gesetzt)
EEDC Backend startet...
Datenbank initialisiert.
Scheduler gestartet.
INFO:     127.0.0.1:46928 - "GET /api/health HTTP/1.1" 200 OK
INFO:     127.0.0.1:54174 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/settings HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/settings HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/monatsabschluss/naechster/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/monatsdaten/aggregiert/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/cockpit/uebersicht/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/updates/check HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/updates/check HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/settings HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/settings HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/monatsdaten/aggregiert/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/cockpit/uebersicht/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/monatsabschluss/naechster/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/mqtt/status HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1/tagesverlauf HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     127.0.0.1:46550 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1/wetter HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/strompreise/?anlage_id=1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/investitionen/?anlage_id=1 HTTP/1.1" 200 OK
INFO:     127.0.0.1:40586 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/pvgis/horizont/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/pvgis/prognose/1/aktiv HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/wetter/provider/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/pvgis/prognose/1/gespeichert HTTP/1.1" 200 OK
INFO:     127.0.0.1:56044 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/pvgis/prognose/1/aktiv HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/pvgis/prognose/1/gespeichert HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/wetter/provider/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/pvgis/horizont/1 HTTP/1.1" 200 OK
INFO:     127.0.0.1:60732 - "GET /api/health HTTP/1.1" 200 OK
INFO:     127.0.0.1:51308 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/sensor-mapping/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/sensor-mapping/1/available-sensors HTTP/1.1" 200 OK
INFO:     127.0.0.1:41352 - "GET /api/health HTTP/1.1" 200 OK
INFO:     127.0.0.1:58018 - "GET /api/health HTTP/1.1" 200 OK
INFO:     127.0.0.1:51124 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "POST /api/sensor-mapping/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/ha/export/mqtt/config HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/ha/export/sensors HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/ha/export/yaml/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/ha/export/sensors/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "POST /api/ha/export/mqtt/test HTTP/1.1" 200 OK
INFO:     127.0.0.1:33054 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "POST /api/ha/export/mqtt/test HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "POST /api/ha/export/mqtt/publish/1 HTTP/1.1" 200 OK
INFO:     127.0.0.1:57092 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/pvgis/prognose/1/aktiv HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/pvgis/horizont/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/pvgis/prognose/1/gespeichert HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/wetter/provider/1 HTTP/1.1" 200 OK
INFO:     127.0.0.1:36620 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/monatsdaten/aggregiert/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/cockpit/uebersicht/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/mqtt/status HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1/wetter HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1/tagesverlauf HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     127.0.0.1:39976 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/anlagen/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/community/benchmark/1?zeitraum=letzte_12_monate HTTP/1.1" 404 Not Found
INFO:     192.168.178.25:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/monatsdaten/aggregiert/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/cockpit/uebersicht/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/anlagen/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/community/benchmark/1?zeitraum=letzte_12_monate HTTP/1.1" 404 Not Found
INFO:     192.168.178.25:0 - "GET /api/live/mqtt/status HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/anlagen/ HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1/wetter HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1/tagesverlauf HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     127.0.0.1:34000 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     127.0.0.1:59408 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1/tagesverlauf HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     127.0.0.1:54778 - "GET /api/health HTTP/1.1" 200 OK
INFO:     192.168.178.25:0 - "GET /api/live/1 HTTP/1.1" 200 OK
INFO:     127.0.0.1:35452 - "GET /api/health HTTP/1.1" 200 OK

Konfiguration über Sensor-Zuordnung → Live-Sensoren → Solar Forecast ML

Da ich zum Testen SFML erstmalig installiert habe, kann ich den Genauigkeitssensor erst in 30 Tagen eintragen.
Im Wetter Widget der Live Seite wird eine neue lila Linie angezeigt.

vg
Gernot

Die Felder zur Eingabe habe ich nun gefunden:

Der Tagesvortrag lässt sich eintragen (sensor.solar_forecast_ml_prognose_heute).
Bei der Genauigkeit gibt es den Sensor: sensor.solar_forecast_ml_o_genauigkeit_30_tage

Er lässt sich aber nicht eintragen. Ich vermute es liegt am im Namen:

Die Werte liegen vor. Vielleicht muss die Validieren im Feld geändert werden. Gut wäre auch die Hinweise in den Feldern auf die aktuellen Bezeichnungen anzupassen.

Vielen Dank für die genaue Beschreibung mit Screenshots!

Behoben in v3.4.2 — das Problem hatte zwei Ursachen:

  1. Sensor-Filter: Der Genauigkeits-Sensor (sensor.solar_forecast_ml_∅_genauigkeit_30_tage) hat die Einheit %. Diese war im Filter für die Sensor-Auswahl nicht als erlaubte Einheit hinterlegt — der Sensor tauchte deshalb im Dropdown nicht auf. Jetzt ist % als erlaubte Einheit aufgenommen.
  2. Placeholder-Texte: Die Hinweistexte in den Eingabefeldern waren veraltet und stimmten nicht mit den tatsächlichen SFML-Sensornamen überein. Jetzt angepasst auf:
  • sensor.solar_forecast_ml_prognose_heute
  • sensor.solar_forecast_ml_prognose_morgen (neu in v3.4.1)
  • sensor.solar_forecast_ml_∅_genauigkeit_30_tage

Bitte nach dem Update auf v3.4.2 testen — der Genauigkeits-Sensor sollte jetzt im Dropdown erscheinen.

Nachtrag v3.4.3 + v3.4.4:

  • Die Placeholder-Texte in v3.4.2 waren noch nicht ganz korrekt. Ab v3.4.3 stimmen sie mit den tatsächlichen Sensornamen überein:
    • sensor.prognose_heute
    • sensor.prognose_morgen
    • sensor.solar_forecast_ml_∅_genauigkeit_30_tage
  • v3.4.4 behebt einen Startfehler, der das Wetter-Widget blockiert hat (fehlende DB-Migration). Bitte direkt auf v3.4.4 updaten.

Hallo Gernot,
ich habe nun auf die 3.4.4 upgedatet. Der Vorgang verlief reibungslos. Die Solar Forecast Werte habe ich eingetragen.
Eine Frage noch zur matt-integration. Ist diese sinnvoll für eine Nutzung im HA Umfeld? Oder wird diese nur benötigt, falls man eedc auf einen dedizierten Host ausführt und die Sensoren an HA übergeben möchte?

Gruß
Martin