7.1 KiB
Fix: haStrom API zeitabhängige Abfrage
Problem
Die haStrom FLEX PRO API wurde immer mit start_date=heute&end_date=morgen abgefragt, auch vor 14:00 Uhr.
Folge: HTTP 500 Error, da die API die Preise für morgen erst ab 14:00 Uhr bereitstellt.
URL vorher:
http://eex.stwhas.de/api/spotprices/flexpro?start_date=20251125&end_date=20251126
Lösung
Zeitabhängige API-Abfrage
VOR 14:00 Uhr (00:00 - 13:59:59):
- Nur heute abfragen:
end_date=heute - Tomorrow-Daten sind noch nicht verfügbar
AB 14:00 Uhr (14:00 - 23:59:59):
- Heute + morgen abfragen:
end_date=morgen - Tomorrow-Daten sind jetzt verfügbar
Code-Änderungen in hastrom_flex_extended.py
Zeile 29-46 (vorher):
today = now.strftime("%Y%m%d")
tomorrow = tomorrow_date.strftime("%Y%m%d")
url = f"http://eex.stwhas.de/api/spotprices/flexpro?start_date={today}&end_date={tomorrow}"
Zeile 29-46 (nachher):
today = now.strftime("%Y%m%d")
tomorrow = tomorrow_date.strftime("%Y%m%d")
hr = int(now.strftime("%H"))
# Zeitabhängige API-Abfrage
if hr < 14:
end_date = today
log.info(f"Lade Preise nur für {today} (vor 14:00 - Tomorrow nicht verfügbar)")
else:
end_date = tomorrow
log.info(f"Lade Preise für {today} bis {tomorrow} (ab 14:00 - Tomorrow verfügbar)")
url = f"http://eex.stwhas.de/api/spotprices/flexpro?start_date={today}&end_date={end_date}"
Verbessertes Logging
Zeile 162-189: Logging zeigt jetzt klar:
- Ob Tomorrow-Daten ERWARTET werden (nach 14:00)
- Ob Tomorrow-Daten tatsächlich VERFÜGBAR sind
- Warnung wenn sie verfügbar sein sollten, aber fehlen
Beispiel-Output VOR 14:00:
📊 haStrom FLEX PRO Extended - Preise aktualisiert:
├─ Heute: 24 Stunden
└─ Morgen: 0 Stunden (noch nicht erwartet vor 14:00)
📈 Heute: Min=24.49, Max=47.50, Avg=35.67 ct/kWh
Beispiel-Output NACH 14:00:
📊 haStrom FLEX PRO Extended - Preise aktualisiert:
├─ Heute: 24 Stunden
└─ Morgen: 24 Stunden ✓ verfügbar (nach 14:00)
📈 Heute: Min=24.49, Max=47.50, Avg=35.67 ct/kWh
📈 Morgen: Min=28.29, Max=60.57, Avg=44.23 ct/kWh
Installation
Schritt 1: Script aktualisieren
# Kopiere das aktualisierte Script nach Home Assistant
cp openems/hastrom_flex_extended.py /config/pyscript/
Schritt 2: PyScript neu laden
In Home Assistant → Developer Tools → Services:
service: pyscript.reload
data: {}
Schritt 3: Manueller Test
Teste die Preis-Abfrage manuell:
service: pyscript.getprices_extended
data: {}
Prüfe dann die Logs auf:
- Korrekte Zeitlogik ("Lade Preise nur für..." oder "Lade Preise für...bis...")
- Keine HTTP 500 Errors mehr
- Tomorrow-Daten verfügbar nach 14:00
Auswirkungen auf Battery Optimizer
Vor 14:00 Uhr
- Battery Optimizer wird um 14:05 getriggert
- Zu diesem Zeitpunkt sind Tomorrow-Daten bereits verfügbar
- Keine Auswirkung auf normale Operation
Bei stündlichen Updates (jede volle Stunde)
- VOR 14:00: Sensor hat nur Heute-Daten
- NACH 14:00: Sensor hat Heute + Morgen-Daten
- Battery Optimizer kann damit umgehen (checkt
tomorrow_availableFlag)
Bei manuellen Trigger vor 14:00
Wenn du den Battery Optimizer manuell vor 14:00 triggerst:
service: pyscript.calculate_charging_schedule
data: {}
Dann:
- Er lädt nur Heute-Daten
- Optimiert nur für die verbleibenden Stunden des heutigen Tages
has_tomorrow_data = falseim Schedule- Um 14:05 läuft automatische Neu-Berechnung mit Tomorrow-Daten
Automatische Updates
Das Script hat drei automatische Trigger:
1. Stündlich (jede volle Stunde)
@time_trigger("cron(0 * * * *)")
- Hält Preise aktuell
- Nutzt zeitabhängige Logik
2. Um 14:05 Uhr (wenn Tomorrow verfügbar wird)
@time_trigger("cron(5 14 * * *)")
- Extra Update für Tomorrow-Preise
- Triggert Battery Optimizer Neuberechnung
3. Um Mitternacht
@time_trigger("cron(5 0 * * *)")
- Update für neuen Tag
- "Morgen" wird zu "Heute"
Testing-Szenarien
Test 1: Vor 14:00 Uhr
# Setze System-Zeit auf 10:00 (nur für Test)
# Oder warte bis vor 14:00
Erwartetes Verhalten:
- API-Call mit
end_date=heute - Log: "Lade Preise nur für {heute}"
tomorrow_available = false- Kein HTTP 500 Error
Test 2: Nach 14:00 Uhr
# Setze System-Zeit auf 15:00 (nur für Test)
# Oder warte bis nach 14:00
Erwartetes Verhalten:
- API-Call mit
end_date=morgen - Log: "Lade Preise für {heute} bis {morgen}"
tomorrow_available = true- 24 + 24 = 48 Stunden Preise
Test 3: Grenzfall 13:59 → 14:00
# Um 13:59 ausführen, dann um 14:00
Erwartetes Verhalten:
- 13:59: Nur heute
- 14:00: Heute + morgen (stündlicher Trigger)
- 14:05: Extra-Update für Battery Optimizer
Monitoring
Prüfe Sensor-Attributes
In Home Assistant → Developer Tools → States:
sensor.hastrom_flex_pro_ext
Attributes zu prüfen:
tomorrow_available: true/falsetomorrow_count: 0 oder 24prices_tomorrow: Array (leer oder 24 Einträge)last_update: Timestamp
Prüfe Logs
Suche in Home Assistant Logs nach:
haStrom FLEX PRO Extended - Preise aktualisiert
Vor 14:00:
Lade Preise nur für 20251125 (vor 14:00 - Tomorrow nicht verfügbar)
└─ Morgen: 0 Stunden (noch nicht erwartet vor 14:00)
Nach 14:00:
Lade Preise für 20251125 bis 20251126 (ab 14:00 - Tomorrow verfügbar)
└─ Morgen: 24 Stunden ✓ verfügbar (nach 14:00)
Fehlerbehandlung
Wenn Tomorrow-Daten fehlen NACH 14:00
Symptom: Log zeigt:
⚠ Morgen: 0 Stunden ⚠ NICHT verfügbar (sollte verfügbar sein nach 14:00!)
Mögliche Ursachen:
- API ist down oder verzögert
- Preise wurden noch nicht publiziert
- API-Endpoint hat sich geändert
Lösung:
- Prüfe API manuell:
http://eex.stwhas.de/api/spotprices/flexpro?start_date=YYYYMMDD&end_date=YYYYMMDD - Warte 30 Minuten und prüfe erneut (stündlicher Update)
- Trigger manuell:
pyscript.getprices_extended
Wenn HTTP 500 Error VOR 14:00
Wenn der Fehler jetzt trotzdem noch auftritt:
Prüfe:
- Ist die Zeitzone korrekt? (CET/CEST)
- Ist die System-Zeit korrekt?
- Log-Output: Welche URL wird aufgerufen?
Debug:
# In den Logs sollte stehen:
"Lade Preise nur für 20251125 (vor 14:00 - Tomorrow nicht verfügbar)"
# URL sollte sein:
"...?start_date=20251125&end_date=20251125"
Zusammenfassung
Was wurde gefixt
✅ Zeitabhängige API-Abfrage (VOR 14:00 vs. NACH 14:00) ✅ Verhindert HTTP 500 Error bei fehlenden Tomorrow-Daten ✅ Besseres Logging für Debugging ✅ Klarere Kommunikation über erwartete vs. verfügbare Daten
Was bleibt gleich
- Automatische Updates (stündlich, 14:05, Mitternacht)
- Sensor-Namen und Attributes
- Integration mit Battery Optimizer
- API-Endpoint und Feldnamen
Nächste Schritte
- ✅ Script aktualisieren und neu laden
- ✅ Logs prüfen für korrekte Zeitlogik
- ✅ Um 14:05 beobachten ob Tomorrow-Update funktioniert
- ✅ Heute Nacht prüfen ob Laden funktioniert
Version
- hastrom_flex_extended.py: v1.1.0
- Datum: 2025-11-25
- Fix: Zeitabhängige API-Abfrage