Decision Windows — „Gib mir die günstigsten X Stunden“

GET /v1/decision/windows — N günstigste Stunden / Flex-Segmente. Loxone Wallbox: Flex Windows. Offene API; Community 120 Anfragen/Tag.

Was macht diese Funktion?

Sie sagen der API zum Beispiel:

„Ich brauche 4 Stunden Laden irgendwann in den nächsten 2 Tagen. Wann sind die günstigsten?“

Die API antwortet mit konkreten Startzeiten (und Preisen) — nicht nur mit einer Ampel.

Alltagsbeispiel: Geschirrspüler oder Wallbox: „Suche die 3 billigsten Stunden bis morgen Abend.“

Wann nutzen?

  • Sie kennen die Anzahl Stunden (oder kWh + Leistung) schon
  • Sie wollen keine Speicher-SOC-Rechnung auf unserer Seite

Wenn die API aus SOC, Verbrauch und PV berechnen soll, wie viele Stunden nötig sind → Hours Demand.

Endpoint


GET https://api.spotpriceapi.com/v1/decision/windows

Community-Key oder höher. Header: X-API-Key: sf_live_YOUR_KEY

Die Idee in einem Bild


Sie:  count=4, Zeitraum von jetzt bis +48h, mode=cheapest
API:  02:00, 03:00, 13:00, 14:00  (Beispiel-Startstunden)

Wichtige Parameter (einfach)

ParameterBedeutungBeispiel
countWie viele Stunden?4
start / endSuchfensterISO-Zeitangaben
modecheapest oder expensivegünstigste / teuerste
roleconsume (Netzbezug) oder exportmeist consume
timezoneZeitzoneEurope/Vienna
allocationVerteilung über Tageglobal oder day_first

Es gibt weitere Filter (Pausen, erlaubte Stunden, …) — für den Einstieg reichen die oben.

Minimal-Beispiel


curl "https://api.spotpriceapi.com/v1/decision/windows?count=4&mode=cheapest&role=consume&timezone=Europe/Vienna&allocation=global&start=2026-08-01T00:00:00%2B02:00&end=2026-08-03T00:00:00%2B02:00" \
  -H "X-API-Key: sf_live_YOUR_KEY"

Antwort verstehen

FeldEinfach
decision_statusok = Fenster nutzbar
slots[]Die gewählten Stunden (Start, oft Preis — Modellpreis, nie überschrieben; Auswahl/Ranking rechnet immer damit)
slots[].dump_risk_pct / dump_scenario_ct_kwhAus der Forecast-Stunde: pct 0…100; Scenario = Dump wenn pct > 0, sonst derselbe Punktpreis wie price_ct_kwh (immer nutzbar) — rein additiv, ändert die Auswahl nicht
day_planOptional: wie viele Stunden pro Kalendertag

In Loxone: oft „Demand = heutige Stundenquote“ an den Spot-Preis-Optimierer — Anleitung: Loxone Windows. Die Slots können zusätzlich dump_risk_pct / dump_scenario_ct_kwh tragen; der Standard-Parser liest sie nicht mit — rein additiv, kein Pflichtfeld.

Häufige Fehler

  • start nach end → HTTP 400 invalid_range
  • Weder count noch energy_kwh/segments → HTTP 400 incomplete_request
  • mode / role weggelassen → Default cheapest / consume (kein 400)
  • Weder ISO-start/end noch window_start_hour+window_end_hour noch flex_pack noch slot_id (Sparvo-Merge) → HTTP 400 incomplete_request
  • count größer als der Tier-Horizont (168 Full / 48 Basic) → HTTP 400
  • Zu niedriger Tarif: kein HTTP-Fehler, sondern decision_status: not_available bei HTTP 200

Häufige Verwechslung

WindowsHours Demand
Sie legen N festAPI berechnet N aus SOC/Last/PV
Legacy GET; Flex/Loxone auch POSTPOST mit JSON-Body

Nächste Schritte

Flex v1.1 (Lasten Ein/Aus) — optional

count wählt N günstige Stunden in einem Fenster — nicht die Wallbox. Die Wallbox (und Relais/Pool) ist ein Flex-Slot: Sparvo-Gerät + Zeitplan (API-Feld recipes), PicoC-Slot im Portal EMS Anbindung, PicoC Ein/Aus. Ohne Flex-Parameter bleibt die Antwort windows_v1.

ParameterBedeutung
segmentsKomma-Liste oder Zahl, z. B. 7 oder 3,5
segment_consecutiveoff, soft oder required
hours_completedBereits geladene Stunden im aktiven Segment
current_segment_indexAktives Segment (0-basiert)
repeat_dailyWird zurückgegeben; in v0.4 nicht angewendet (Wallbox = ein Fenster; Phase 2+)
deadline_strictWird zurückgegeben; nach end sind Slots/Demand immer 0 (soft-continue reserved)
deadline_hourSparvo spätester Start 0–23 (inkl.) — nicht Fenster-end. Ohne window_* leitet die API die Stunden aus ISO-start/end ab (18:00→06:00 bleibt Overnight-sicher). Liegt die Deadline außerhalb des Fensters, wird sie ignoriert (Fenster bleibt).
slot_idFlex-Slot (1 / slot_3 / wallbox_1) — Merge aus Sparvo wenn flex_pack fehlt. Ein PicoC-Ausgang 1–8 pro Anlage
window_start_hour / window_end_hourRollierendes Fenster (0–23, Overnight ok) — statt ISO-start/end
flex_packLoxone: gepackte I4/I5/I6/hours_completed für ein <v.0>

Mit Flex-Parametern: decision_engine: windows_v1.1, Block ems direkt nach decision_status. ems.current_segment_hours / hours_needed_today = Restbedarf (0 bei Segment fertig). window.hours_requested ebenfalls Restbedarf. ems.next_slot_start = nächste Stunde ab der aktuellen vollen Stunde. deadline_reached ist true sobald now ≥ end (auch ohne deadline_strict).

GET (curl/Skripte) — Query-Parameter wie bisher. POST (Loxone VO) — wie Hours ein Analog: {"slot_id":"3","flex_pack":<v.0>}. slot_id fest tippen. flex_pack=0 gilt als weggelassen (Sparvo-Merge); Pack nur mit Laufzeit/Stecker (Segmente=0) merged trotzdem. mode/role Default cheapest/consume. Keine Named-Tags <v.Vi…>, keine fünf <v.n> als fünf Drähte.


curl -X POST "https://api.spotpriceapi.com/v1/decision/windows" \
  -H "X-API-Key: sf_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"window_start_hour\":18,\"window_end_hour\":6,\"segments\":7,\"segment_consecutive\":\"soft\",\"mode\":\"cheapest\",\"role\":\"consume\",\"timezone\":\"Europe/Vienna\",\"hours_completed\":2,\"slot_id\":\"wallbox_1\"}"

curl "https://api.spotpriceapi.com/v1/decision/windows?window_start_hour=18&window_end_hour=6&segments=7&segment_consecutive=soft&mode=cheapest&role=consume&timezone=Europe/Vienna&hours_completed=2" \
  -H "X-API-Key: sf_live_YOUR_KEY"

Details: Flex Windows Wallbox.

Device Schedules (Sparvo → EMS)


GET https://api.spotpriceapi.com/v1/plant/device-schedules

Liefert EMS-gebundene Geräte (api_linked): Zeitpläne aus Sparvo, PicoC-Slot via Portal EMS Anbindung (/settings/ems). Felder u. a. slot_id, recipes[] (UI: Zeitplan), Treffer-recipe, segments, window_*. Community-Key.

Mit SpotpriceAPI starten

Community registrieren oder Code-Beispiele mit Ihrem persönlichen Key.

Live API-Status