Skip to content

Latest commit

 

History

History
101 lines (90 loc) · 5.26 KB

File metadata and controls

101 lines (90 loc) · 5.26 KB

Changelog

v0.3.0 (laufend)

Added (kommerziell)

  • strompreis-keys CLI. Verwaltung von API-Keys: create, list, verify, revoke. Keys werden einmalig beim Erzeugen angezeigt, danach nur gemasked. Tiers (free/pro/enterprise) und Daily-Limits konfigurierbar.
  • B2C überarbeitet. Templates nach b2c/templates/ (Jinja2) ausgelagert, Affiliate-IDs/URLs kommen aus Env-Variablen statt hartcodierter Platzhalter. Savings-Modell dokumentiert; Konstanten via Env tunable. PLZ-Feld entfernt (wurde ohnehin nicht genutzt). Impressum/Datenschutz-Links für DSGVO.
  • database.get_api_keys() und database.revoke_api_key() als Wiederverwendbare Helper für CLI und künftige Admin-UI.

Added

Added

  • MCP Python SDK Integration. Server läuft jetzt auf dem offiziellen mcp.server.fastmcp.FastMCP. Vorteile: korrekte Protocol-Version, automatisch generierte Tool-Schemas aus Type-Hints, alle Transporte (stdio/SSE/streamable-http) out-of-the-box.
  • Resources API. Zusätzlich zu den Tools gibt es nun read-only URIs:
    • strompreis://prices/live — aktuelle SMARD-Serie
    • strompreis://prices/history — DB-Historie (30 Tage)
    • strompreis://db/status — DB-Gesundheit als JSON
  • Tests (55). Vollständiges pytest-Scaffold: SMARD-Client, Database (inkl. v1→v2 Migration), Forecast (Auktion vs. Statistik), Server-Tools und -Resources. Alle Tests offline via Fixtures.
  • CI (GitHub Actions). Lint (ruff + format-check) und Test-Matrix (Python 3.11/3.12/3.13) bei jedem Push/PR.
  • Structured logging via logging-Modul (statt print), konfigurierbar über STROMPREIS_LOG_LEVEL.
  • Multi-Transport. STROMPREIS_TRANSPORT=stdio|sse|streamable-http.

Fixed

  • Einheitenkonvertierung korrigiert. SMARD veröffentlicht Day-Ahead-Preise als EUR/MWh × 1000. Die frühere Rechnung /1000 (forecast) bzw. /10 (B2C) lieferte teils um Faktor 10/1000 falsche ct/kWh-Werte. Neu gibt es eine zentrale eur_mwh_to_ct_kwh()-Hilfsfunktion.
  • Dedup auf price_data. timestamp_utc ist jetzt UNIQUE. Vorher hat der 15-min-Cron dieselben Stundenwerte immer wieder eingefügt. Bestehende v1-Datenbanken werden beim Start automatisch migriert (Schema-Version 2).
  • notifications/initialized antwortet nicht mehr. (Im SDK automatisch korrekt gehandhabt.)
  • store_prices zählt jetzt wirklich neue Zeilen, nicht mehr total_changes.
  • database.init_db() committet Migrationen korrekt. Bisher lief _migrate() außerhalb des Commit-Scopes; auf frischen DBs wurde der Schema-Version-Bump verworfen.
  • store_prices toleriert fehlende optionale Felder (load/wind/solar).

Changed

  • Forecast nutzt Day-Ahead-Auktionspreise. Innerhalb des Auktionshorizonts (~24–36 h) liefert price_forecast die echten, verbindlichen Börsenpreise mit confidence = 1.0 und source: "auction". Erst dahinter greift die statistische Schätzung (source: "statistical").
  • Rate-Limits sind persistent in der DB, nicht mehr In-Memory. db_status zeigt jetzt die echten Abrufzahlen inkl. keyless-Quote.
  • Generation-Data (Solar/Wind/Load) wird gecacht (5 min TTL).
  • certifi als Abhängigkeit für HTTPS ohne System-CA-Store.

Notes

  • Migration bestehender Datenbanken passiert automatisch beim ersten Start. Duplikate werden auf den jeweils neuesten Eintrag pro Timestamp kollabiert; Daten gehen nicht verloren.

Fixed

  • Einheitenkonvertierung korrigiert. SMARD veröffentlicht Day-Ahead-Preise als EUR/MWh × 1000. Die frühere Rechnung /1000 (forecast) bzw. /10 (B2C) lieferte teils um Faktor 10/1000 falsche ct/kWh-Werte. Neu gibt es eine zentrale eur_mwh_to_ct_kwh()-Hilfsfunktion.
  • Dedup auf price_data. timestamp_utc ist jetzt UNIQUE. Vorher hat der 15-min-Cron dieselben Stundenwerte immer wieder eingefügt. Bestehende v1-Datenbanken werden beim Start automatisch migriert (Schema-Version 2).
  • notifications/initialized antwortet nicht mehr. JSON-RPC-Notifications dürfen laut Spec keine Response erhalten; manche Clients stolperten darüber.
  • store_prices zählt jetzt wirklich neue Zeilen, nicht mehr total_changes (was durch die Dedup-Logik falsch war).

Changed

  • Forecast nutzt Day-Ahead-Auktionspreise. Innerhalb des Auktionshorizonts (~24–36 h) liefert price_forecast die echten, verbindlichen Börsenpreise mit confidence = 1.0 und source: "auction". Erst dahinter greift die statistische Schätzung (source: "statistical"). best_hours() zeigt pro Stunde die Herkunft an (✓ / ~).
  • Rate-Limits sind persistent in der DB, nicht mehr In-Memory. Keyless-Modus zählt Aufrufe mit api_key = NULL in usage_log — überlebt Server-Restarts und mehrere Prozesse. db_status zeigt jetzt die echten Abrufzahlen.
  • Generation-Data (Solar/Wind/Load) wird gecacht (5 min TTL), analog zu Prices. Reduziert SMARD-Abrufe des Collectors deutlich.
  • certifi als Abhängigkeit, damit HTTPS auch auf Systemen ohne System-CA-Store funktioniert.

Added

  • source-Feld in jedem Forecast-Eintrag ("auction" | "statistical").

Notes

  • Migration bestehender Datenbanken passiert automatisch beim ersten Start. Duplikate werden auf den jeweils neuesten Eintrag pro Timestamp kollabiert; Daten gehen nicht verloren.