Wissen, wann Energie am günstigsten ist, rechtzeitig zum Nutzen
Auf jedem Bildschirm können Sie die Preise von gestern lesen. Schwierig ist es zu wissen, jetzt gerade, ob diese 15-Minuten-Periode eine der günstigen ist – und etwas darauf reagieren zu lassen, ohne dass Sie selbst einen Preisvergleich von Hand schreiben und jedes Mal neu schreiben, wenn sich Ihr Tarif ändert.
Den Vergleich macht der Hub. Er ermittelt nach den Regeln, die Sie festlegen, welche Perioden die günstigen sind, und veröffentlicht eine kleine Nachricht, die sagt, was jetzt offen ist und was als Nächstes öffnet. Etwas anderes liest diese Nachricht und handelt danach.
⚠️ Der Hub schaltet nichts. Es gibt kein Relais an ihm und keine Einstellung, die ihn etwas ein- oder ausschalten lässt. Er berechnet Zeitfenster und veröffentlicht sie. Die Entscheidung und das Schalten gehören zu dem, was die Benachrichtigung liest – einer Home-Assistant-Automation, einem Diverter, einem Ladegerät, das MQTT selbst abonniert. Wenn Sie ein Gerät gesucht haben, das eine Last nach Preis steuert, ist dies nicht dieses Gerät.
Nicht nur für dynamische Preise
Die Regeln arbeiten mit dem All-in-Kaufpreis jeder 15-Minuten-Periode: dem dynamischen Preis, wenn einer diese Periode abdeckt, und sonst dem Zonensatz Ihres Tarifs mit seinen Entgelten. Ein Hub mit einem einfachen zeitabhängigen Tarif bekommt also ebenfalls günstige Zeitfenster – sie folgen einfach Ihren eigenen Zonen, und zeitabhängige Netzentgelte zählen im Vergleich wie alles Übrige.
Das heißt, diese Seite lohnt sich, ob Sie dynamische Preise nutzen oder nicht. Was sich mit einem Marktpreis ändert, ist, wie stark sich die günstigen Perioden von Tag zu Tag verschieben; der Mechanismus bleibt derselbe.
Die Regeln brauchen eine gestellte Uhr des Hubs, und sie verwenden die eigene Zeitzone des Hubs, um festzulegen, was „ein Tag“ und „07:00“ bedeuten – siehe Time.
Drei Arten von Regeln
Bis zu acht Regeln, jede mit einem Namen, den Sie wählen, und jede einzeln ein- und ausschaltbar. Ein Name darf höchstens 23 Byte lang sein, so wie der Hub ihn speichert – die App sagt das klar, und ein kyrillischer Buchstabe zählt als zwei.
Preis unter einem Wert
Die App nennt sie Price below a level. Sie geben einen Preis an, bei oder unter dem das Zeitfenster öffnet, und einen Preis, bei oder über dem es schließt – das Zeitfenster ist ein Signal, und was damit zu tun ist, bleibt bei dem, was es liest.
| Parameter | |
|---|---|
on_below |
aktiv, solange der All-in-Kaufpreis bei diesem Wert oder darunter liegt |
off_above |
bleibt aktiv, bis der Preis diesen Wert erreicht; muss gleich oder größer als on_below sein |
Die beiden Werte gibt es, damit ein Preis, der um eine Zahl schwankt, das Zeitfenster nicht in jeder Periode ein- und ausschaltet. Setzen Sie beide gleich, bekommen Sie genau dieses Flackern – lassen Sie also einen Abstand zwischen ihnen.
Verwenden Sie sie, wenn Ihre Schwelle absolut ist: „läuft, solange Strom unter 10 Cent kostet, immer wenn das passiert.“
Günstigste Perioden in einem Zeitraum
Die App nennt sie Cheapest periods in a time span — «for a load that can run any time in a span, such as a water heater». Sie geben eine Anzahl von 15-Minuten-Perioden an und die Stunden, innerhalb derer gesucht wird.
| Parameter | |
|---|---|
periods |
1 bis 96, je 15 Minuten |
from_h, to_h |
das tägliche Zeitfenster in lokalen Stunden; to_h gleich oder vor from_h reicht über Mitternacht, und gleiche Stunden bedeuten die vollen 24 Stunden |
consecutive |
wenn eingeschaltet, müssen die Perioden ein ununterbrochener Block sein |
Verwenden Sie sie, wenn Ihnen die Laufzeit bekannt ist: „die vier günstigsten 15-Minuten-Perioden zwischen 22:00 und 06:00.“ Mit eingeschaltetem consecutive bekommen Sie eine ununterbrochene Stunde statt vier verstreuter Einzelperioden – das ist, was Sie für alles wollen, das Unterbrechungen nicht verträgt.
Günstigste Perioden vor einer Uhrzeit
Die App nennt sie Cheapest periods before a time — «for a load that must be done by a time, such as an EV by 07:00». Gleiche Idee wie oben, verankert an der Stunde, bis zu der es fertig sein muss.
| Parameter | |
|---|---|
periods |
1 bis 96 |
deadline_h |
die lokale Stunde, bis zu der es fertig sein muss |
consecutive |
wie oben |
Der Hub betrachtet jeden Tag die 24 Stunden, die mit dieser Stunde enden, und wählt darin die günstigsten Perioden aus.
Verwenden Sie sie, wenn die Frist die eigentliche Einschränkung ist: „geben Sie ihm zwei Stunden Laufzeit vor 07:00 und wählen Sie die zwei günstigsten Stunden der Nacht dafür.“
Eine Regel wird abgelehnt statt stillschweigend gekürzt, wenn sie sich nicht erfüllen lässt – wer mehr Perioden verlangt, als das Zeitfenster enthält, bekommt zurück, welches Feld falsch ist. Das ist Absicht: Ein Zeitfenster, das still passend gemacht wird, wäre eine andere Regel als die, die Sie geschrieben haben.
Zwei Markierungen, für den Fall, dass Sie kein Zeitfenster brauchen
Neben den Regeln gibt es zwei einfache Werte:
| Markierung | Wahr, solange |
|---|---|
| Buy is cheap below | der Kaufpreis jetzt bei oder unter dem Wert liegt, den Sie festlegen |
| Sell is low below | der Verkaufspreis jetzt bei oder unter dem Wert liegt, den Sie festlegen – Export ist wenig oder nichts wert |
Lassen Sie einen Wert ungesetzt, bleibt seine Markierung falsch. Das sind keine Zeitfenster: Es gibt keine Hysterese und keine Vorausplanung, nur eine Aussage über den Preis genau jetzt. Die Verkaufsmarkierung ist die, auf die man an einem Standort mit eigener Erzeugung achten sollte: Sie ist das günstige Signal, um die eigene Energie zu nutzen, statt sie einzuspeisen.
Was veröffentlicht wird
Eine Nachricht, unter einem Kilobyte, auf rbgrid/<mac>/price — retained, damit alles, was sich später verbindet, sofort den aktuellen Zustand erhält. Außerdem unter GET /api/v1/signal und im ESPHome-Build über rbgrid_cmd.
| Feld | Was es Ihnen sagt |
|---|---|
period_from, period_until |
die 15-Minuten-Periode, um die es geht |
buy, sell, currency |
der Preis jetzt |
price_state, provenance |
der Zustand des dynamischen Preises und woher dieser Preis stammt: Ihre Quelle, das Backup, ein Push aus Home Assistant, der Stundenmittelwert oder Ihr Tarif |
rank_buy, rank_sell |
wo diese Periode in ihrem lokalen Tag liegt, 1 ist die günstigste; 0 bedeutet noch nicht bekannt |
periods_today |
wie viele der heutigen Perioden bekannt sind – der Nenner für diesen Rang |
windows[] |
ein Eintrag pro aktivierter Regel: ihr Name, ob sie aktiv ist, bis wann und wann sie als Nächstes beginnt |
buy_cheap, sell_low |
die beiden Markierungen |
ts, v |
wann die Nachricht erstellt wurde und ihre Schemaversion |
Es ist ein Zustand, kein Ereignis
Die Benachrichtigung wird bei jeder 15-Minuten-Grenze erneut veröffentlicht und sofort, wann immer sich etwas ändert – ein Zeitfenster öffnet oder schließt sich, neue Preise kommen an, eine Regel oder ein Wert wird bearbeitet.
Bauen Sie Ihre Automation auf dem aktuellen Wert auf, nicht auf dem Eintreffen einer Nachricht. Ein Verbraucher, der jede Veröffentlichung als Ereignis behandelt, löst über ein langes Zeitfenster immer wieder aus und verpasst einen Übergang, der passierte, während er offline war. Ein Verbraucher, der windows[].active liest und nach dem handelt, was dort steht, liegt in jedem Moment richtig, auch im Moment der Wiederverbindung – dafür ist retained da.
Öffnungen und Schließungen werden außerdem in das eigene Protokoll des Hubs geschrieben, wo Sie sie danach in Events lesen können:
price: window 'Boiler' on until <time>
price: window 'Boiler' off, next <time>
Das Beispiel, ehrlich dargestellt
Ein Boiler, der in den günstigsten zwei Stunden der Nacht läuft:
- Im Hub: eine Regel namens
Boiler, Typ cheapest periods of a daily window, 8 Perioden, 22:00 bis 06:00,consecutiveeingeschaltet. - In Home Assistant: eine Automation, ausgelöst durch das MQTT-Topic
rbgrid/<mac>/price(oder im ESPHome-Build durch die eigene Entität des Hubs). - Ihre Bedingung liest den Eintrag mit dem Namen
Boilerinwindows[]. Aktiv – Home Assistant schaltet den Boiler-Schalter ein. Nicht aktiv – sie schaltet ihn aus.
Jede Entscheidung in dieser Liste nach Schritt 1 gehört Home Assistant. Der Hub hat einen Satz beigetragen: diese Periode liegt im Zeitfenster, das Sie beschrieben haben. Ein Diverter oder ein Ladegerät, das das Topic selbst abonniert, funktioniert genauso, und die Aufteilung ist dieselbe: Der Hub stellt eine Tatsache über den Preis fest, das andere Gerät entscheidet, was damit zu tun ist.
Das heißt auch, dass der Hub nicht der Grund sein kann, warum etwas nicht lief. Wenn die Automation nicht ausgelöst hat, ist die Benachrichtigung das Erste, was man lesen sollte – sie sagt, was der Hub geglaubt hat, und das lässt sich prüfen.
Was es nicht tut
- Keinerlei Schalten durch den Hub. Das ist das ganze Design, keine Lücke, die auf Füllung wartet.
- Acht Regeln. Eine neunte wird abgelehnt, nicht stillschweigend verworfen.
- Keine Zeitfenster auf der Verkaufsseite. Zeitfenster nutzen den All-in-Kaufpreis; für den Export verwenden Sie die Markierung sell is low.
- Ohne gestellte Uhr passiert nichts. Regeln beschreiben Stunden und Tage, und ein Hub, dessen Uhr nicht synchronisiert ist, kann sie nicht einordnen.
Wenn es nicht wie erwartet funktioniert: was zu prüfen ist
Ein Zeitfenster öffnet sich nie.
Lesen Sie die Benachrichtigung selbst – windows[] enthält für jede aktivierte Regel next_start. Ist next_start vorhanden, arbeitet die Regel, und Sie sind nur zu früh dran. Fehlt die Regel in der Liste, ist sie ausgeschaltet.
Ein Zeitfenster öffnet jeden Tag zu einer anderen Zeit, und ich hatte eine feste erwartet. Das ist eine Regel für günstigste Perioden, die ihre Aufgabe erfüllt: Die günstigen Perioden wandern, wenn die Preise wandern. Wenn Sie jeden Tag dieselben Stunden wollen, brauchen Sie eine Zone in Ihrem Tarif, kein Zeitfenster.
Das Zeitfenster flackert ein und aus. Eine Regel Price below a level mit zwei zu eng beieinanderliegenden Werten, und ein Preis, der dazwischen liegt. Vergrößern Sie den Abstand zwischen Einschalten und Ausschalten.
Meine Regel wurde beim Speichern abgelehnt. Die Antwort nennt das Feld. Die üblichen zwei: mehr Perioden, als das Zeitfenster aufnehmen kann, oder ein Ausschaltpreis unter dem Einschaltpreis.
Zeitfenster ignorieren den dynamischen Preis und folgen stattdessen meinem Tarif.
Sie folgen dem All-in-Kaufpreis jeder Periode, der auf den Tarif zurückfällt, wann immer kein dynamischer Preis diese Periode abdeckt. Prüfen Sie das Feld provenance in der Benachrichtigung: plan bedeutet dort, dass für diese Periode kein Marktpreis galt – siehe Woher Ihr Preis kommt.
rank_buy ist 0.
Der Rang hat noch keinen Nenner: Die heutigen Preise sind noch nicht vollständig bekannt. Er füllt sich, während die Preise eintreffen.
Meine Automation löst durch ein und dasselbe Zeitfenster immer wieder aus.
Sie löst auf die Nachricht aus, statt den Zustand zu lesen. Die Benachrichtigung wird absichtlich alle 15 Minuten erneut veröffentlicht; machen Sie die Automation stattdessen von windows[].active abhängig.
Meine Automation hat ein Zeitfenster verpasst, das laut Protokoll geöffnet wurde. Der Verbraucher war beim Übergang offline und wartet auf ein Ereignis, das bereits stattgefunden hat. Lesen Sie beim Verbinden die retained-Nachricht – dafür ist sie gespeichert.
Die Stunden stimmen um einen festen Versatz nicht. Die Regeln verwenden die eigene Zeitzone des Hubs, nicht die Ihres Telefons oder die von Home Assistant. Prüfen Sie Time.
Ich möchte, dass das Zeitfenster auch meinen Leistungspreis berücksichtigt. Das tut es nicht – Zeitfenster beziehen sich auf den Preis pro Kilowattstunde. Der höchste Bezug eines Abrechnungszeitraums wird separat gemessen und in nichts eingepreist: siehe Import peaks.
⚠️ Für jede Arbeit im Inneren eines Elektrokastens einen qualifizierten Elektriker rufen.