Repository navigation
[BUG] Tibber prices sometimes not loaded #3703
Copy link
Copy link
Closed
Labels
bugSomething isn't workingSomething isn't working
Description
Ich habe weiterhin gelegentlich Probleme beim Laden der Tibber-Preise für den folgenden Tag. Am Abend hat die openwb teilweise die Preise für den folgenden Tag noch nicht geladen. Die Folge sind falsche Planungen des Zielladens, die openwb rechnet dann nur mit den Preisen des aktuellen Tages. Damit wird häufig zu ungünstigeren Zeiten geladen (abends statt in den frühen Morgenstunden).
Ein Verbindungsproblem liegt nicht vor, denn durch den manuellen Aufruf von Einstellungen - Ladeeinstellungen - Übergreifendes - Speichern werden die Preisdaten zeitnah geladen.
openwb Version 2.2.1
Hier ist der Main-Log des ganzen Tages:
2026-07-23 03:25:34,369 - {root:242} - {WARNING:MainThread} - Display wird neu geladen.
2026-07-23 12:44:12,633 - {control.counter_all:107} - {ERROR:MainThread} - Ungültiger Hausverbrauch: -4.893000000000029W, Berücksichtigte Komponenten neben EVU [{'id': 2, 'type': 'cp', 'children': []}, {'id': 1, 'type': 'inverter', 'children': []}]
2026-07-23 12:58:42,708 - {control.counter_all:107} - {ERROR:MainThread} - Ungültiger Hausverbrauch: -48.07100000000037W, Berücksichtigte Komponenten neben EVU [{'id': 2, 'type': 'cp', 'children': []}, {'id': 1, 'type': 'inverter', 'children': []}]
2026-07-23 13:08:32,581 - {control.counter_all:107} - {ERROR:MainThread} - Ungültiger Hausverbrauch: -276.4100000000003W, Berücksichtigte Komponenten neben EVU [{'id': 2, 'type': 'cp', 'children': []}, {'id': 1, 'type': 'inverter', 'children': []}]
2026-07-23 13:11:12,924 - {control.counter_all:107} - {ERROR:MainThread} - Ungültiger Hausverbrauch: -108.1579999999999W, Berücksichtigte Komponenten neben EVU [{'id': 2, 'type': 'cp', 'children': []}, {'id': 1, 'type': 'inverter', 'children': []}]
2026-07-23 13:11:23,185 - {modules.common.simcount._simcount:51} - {WARNING:MainThread} - Time difference between previous state and current state is too large. Set time difference to control interval.
2026-07-23 13:13:13,328 - {control.counter_all:107} - {ERROR:MainThread} - Ungültiger Hausverbrauch: -1.594000000000051W, Berücksichtigte Komponenten neben EVU [{'id': 2, 'type': 'cp', 'children': []}, {'id': 1, 'type': 'inverter', 'children': []}]
2026-07-23 13:13:23,340 - {modules.common.simcount._simcount:51} - {WARNING:MainThread} - Time difference between previous state and current state is too large. Set time difference to control interval.
2026-07-23 13:14:13,261 - {control.counter_all:107} - {ERROR:MainThread} - Ungültiger Hausverbrauch: -139.83799999999997W, Berücksichtigte Komponenten neben EVU [{'id': 2, 'type': 'cp', 'children': []}, {'id': 1, 'type': 'inverter', 'children': []}]
2026-07-23 13:14:53,318 - {control.counter_all:107} - {ERROR:MainThread} - Ungültiger Hausverbrauch: -347.7020000000002W, Berücksichtigte Komponenten neben EVU [{'id': 2, 'type': 'cp', 'children': []}, {'id': 1, 'type': 'inverter', 'children': []}]
2026-07-23 13:15:04,153 - {modules.common.simcount._simcount:51} - {WARNING:MainThread} - Time difference between previous state and current state is too large. Set time difference to control interval.
2026-07-23 13:36:43,331 - {control.counter_all:107} - {ERROR:MainThread} - Ungültiger Hausverbrauch: -11.498999999999796W, Berücksichtigte Komponenten neben EVU [{'id': 2, 'type': 'cp', 'children': []}, {'id': 1, 'type': 'inverter', 'children': []}]
2026-07-23 13:40:07,629 - {modules.utils:15} - {ERROR:MainThread} - Daten wurden noch nicht vollständig empfangen. Timeout abgelaufen, fortsetzen der Regelung.
2026-07-23 13:40:12,635 - {control.data:481} - {ERROR:MainThread} - Modul-Daten wurden noch nicht vollständig empfangen. Timeout abgelaufen, fortsetzen der Regelung.
2026-07-23 13:40:17,681 - {control.data:481} - {ERROR:MainThread} - Modul-Daten wurden noch nicht vollständig empfangen. Timeout abgelaufen, fortsetzen der Regelung.
2026-07-23 13:40:19,547 - {modules.common.simcount._simcount:51} - {WARNING:MainThread} - Time difference between previous state and current state is too large. Set time difference to control interval.
2026-07-23 13:40:21,081 - {helpermodules.utils._thread_handler:50} - {ERROR:MainThread} - Thread smarthome ist bereits aktiv und wird nicht erneut gestartet.
2026-07-23 13:40:24,014 - {helpermodules.utils._thread_handler:50} - {ERROR:MainThread} - Thread smarthome ist bereits aktiv und wird nicht erneut gestartet.
2026-07-23 14:19:42,305 - {control.counter_all:107} - {ERROR:MainThread} - Ungültiger Hausverbrauch: -71.68200000000024W, Berücksichtigte Komponenten neben EVU [{'id': 2, 'type': 'cp', 'children': []}, {'id': 1, 'type': 'inverter', 'children': []}]
2026-07-23 14:19:53,260 - {modules.common.simcount._simcount:51} - {WARNING:MainThread} - Time difference between previous state and current state is too large. Set time difference to control interval.
2026-07-23 16:32:02,876 - {control.counter_all:107} - {ERROR:MainThread} - Ungültiger Hausverbrauch: -53.62900000000002W, Berücksichtigte Komponenten neben EVU [{'id': 2, 'type': 'cp', 'children': []}, {'id': 1, 'type': 'inverter', 'children': []}]
2026-07-23 16:32:13,043 - {modules.common.simcount._simcount:51} - {WARNING:MainThread} - Time difference between previous state and current state is too large. Set time difference to control interval.
2026-07-23 18:39:32,436 - {control.counter_all:107} - {ERROR:MainThread} - Ungültiger Hausverbrauch: -2642.167W, Berücksichtigte Komponenten neben EVU [{'id': 2, 'type': 'cp', 'children': []}, {'id': 1, 'type': 'inverter', 'children': []}]
2026-07-23 20:01:22,461 - {control.counter_all:107} - {ERROR:MainThread} - Ungültiger Hausverbrauch: -3773.2279999999996W, Berücksichtigte Komponenten neben EVU [{'id': 2, 'type': 'cp', 'children': []}, {'id': 1, 'type': 'inverter', 'children': []}]
2026-07-23 20:03:42,492 - {control.counter_all:107} - {ERROR:MainThread} - Ungültiger Hausverbrauch: -2460.559W, Berücksichtigte Komponenten neben EVU [{'id': 2, 'type': 'cp', 'children': []}, {'id': 1, 'type': 'inverter', 'children': []}]
2026-07-23 21:15:02,598 - {helpermodules.setdata:344} - {ERROR:Setdata} - Unbekanntes set-Topic: openWB/set/optional/ep/prices, {'1784833200': 0.0004088, '1784834100': 0.00040760000000000004, '1784835000': 0.00040510000000000003, '1784835900': 0.00040029999999999997, '1784836800': 0.0004125, '1784837700': 0.0004042, '1784838600': 0.0003987, '1784839500': 0.00039, '1784840400': 0.0003956, '1784841300': 0.00038250000000000003, '1784842200': 0.000378, '1784843100': 0.0003726}
2026-07-23 21:15:48,168 - {modules.utils:15} - {ERROR:MainThread} - Daten wurden noch nicht vollständig empfangen. Timeout abgelaufen, fortsetzen der Regelung.
2026-07-23 21:15:53,172 - {control.data:481} - {ERROR:MainThread} - Modul-Daten wurden noch nicht vollständig empfangen. Timeout abgelaufen, fortsetzen der Regelung.
2026-07-23 21:15:53,413 - {modules.common.simcount._simcount:51} - {WARNING:MainThread} - Time difference between previous state and current state is too large. Set time difference to control interval.
2026-07-23 21:15:55,016 - {helpermodules.utils._thread_handler:50} - {ERROR:MainThread} - Thread smarthome ist bereits aktiv und wird nicht erneut gestartet.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working
Activity
seaspotter commentedon Jul 24, 2026
Der Log ist leider nicht auf Details und enthält damit leider nur einige wenige Fehler über den Tag aber keine Details auch zum Abruf der Tibber Daten. Ein Log auf Details hochgeladen auf http://paste.openwb.de wäre da notwendig (zum Zeitpunkt wenn das Problem auftaucht).
EckhardM commentedon Jul 24, 2026
Ich tu mich schwer, den Log Level auf Details zu stellen, da es Tage dauern kann, bis das Problem wieder auftritt. Ich schau trotzdem mal, ob es mir irgendwie gelingt, mehr Informationen bereitzustellen.
Wie oft versucht die openwb derzeit, die Daten abzurufen? Das würde mir helfen, den Log beim Auftreten auf Details zu stellen.
LKuemmel commentedon Jul 28, 2026
weitere Meldung: #3446 (comment)
LKuemmel commentedon Jul 28, 2026
@tpd-opitz
Konntest Du das bei dir auch beobachten? Kommen die Preise evtl nicht mehr pünktlich um 14.00 und es sollte um 18.00 nochmal probiert werden?
EckhardM commentedon Jul 28, 2026
Ich frage die Tibber-Preise für eine andere Anwendung (hat nichts mit openwb zu tun) einmal pro Stunde vom API ab (bei mir jeweils zur Minute 30). Meist stehen die Preise des Folgetags um 13:30 Uhr zur Verfügung, es gibt aber auch Tage, wo diese erst später abgefragt werden können. Daher checke ich immer, ob ich die Preise des Folgetages (und des aktuellen Tages) schon habe, falls nicht, versuche ich sie abzufragen. Das mache ich rund um die Uhr, den Zeitpunkt kann man ja per Zufall in der Stunde verteilen, damit nicht alle Boxen gleichzeitig das API belasten. @tpd-opitz
LKuemmel commentedon Aug 24, 2026
EckhardM
commented
2 weeks ago
Wenn ich sie richtig verstehe, begeistert mich diese Lösung nicht. Wenn im Problemfall die Preise erst um 18 Uhr empfangen werden, wurde ggf. schon zu falschen Preisen geladen. Ich hänge mein Auto häufig schon am Nachmittag mit Zielladen an die Box. Wenn sie nur die Preise bis Mitternacht kennt, plant die Box das komplette Laden noch am gleichen Tag, obwohl es am nächsten Morgen meist günstigere Preise gibt. Außerdem warum macht ihr das für alle Boxen zur gleichen Zeit und baut nicht einen zufälligen Delay über die nächsten 60 Minuten ein? Außerdem gab es schon Tage, da hing das Tibber-API auch um 18 Uhr noch und die Preise standen erst später zur Verfügung. Daher schlage ich eine kontinuierliche Prüfung der Preise des aktuellen und des Folgetags vor.
Mein Lösungsvorschlag:
Vorteil dieser Lösung:
@tpd-opitz @LKuemmel
LKuemmel commentedon Aug 24, 2026
LKuemmel
commented
3 minutes ago
Die Preise werde nicht von allen Boxen gleichzeitig abgefragt, sondern zu einer zufälligen Zeit, die jede openWB selbst generiert, innerhalb der nächsten halben Stunde, nachdem die Preise veröffentlicht werden.
Der Vorschlag, die Preise solange abzufragen, bis die aktuellen Preise da sind, wird in 2.3.1 umgesetzt.
EckhardM commentedon Oct 11, 2026
Unter 2,2.3 funktioniert es so schlecht wie schon lange nicht: Ich hatte jetzt fast täglich um 20 Uhr keine Preise für den Folgetag, was dazu führt, dass das Fahrzeug fälschlicherweise am aktuellen Tag lädt:
Und wieso steht da "Stromtarif: Kein Fehler", wenn offensichtlich die Preise nicht geladen werden konnten?
tpd-opitz commentedon Oct 11, 2026
@EckhardM schaust Du bitte mal, was dann in
openWB/set/optional/ep/flexible_tariff/get/next_query_timesteht? (wenn möglich bitte in ein verständliches Datum übersetzten...)Bisher sehen der copilot und ich noch nicht, wie das passieren kann... :o(
[update]
@LKuemmel
Die Tarifdaten werden jetzt in jedem Regelzyklus abgefragt, das führt wahrscheinlich zu Problemen mit der concurrency.
Ursprünglich erfolgte der Abruf nur alle 5 Minuten.
EckhardM commentedon Oct 12, 2026
@tpd-opitz Ich finde die
next_query_timenur unteropenWB/optional/ep/flexible_tariff/get/next_query_time, da steht jetzt (09:12 Uhr) der Wert1791805500,was heute 13:45 ist - das passt erstmal.philipberghoff commentedon Oct 12, 2026
Perfekt, wenn das Problem angegangen wird. Ich habe hier gerade angeregt, noch eine Möglichkeit zu schaffen, den API-Call manuell anzustoßen. Vielen Dank!
tpd-opitz commentedon Oct 12, 2026
Ich versuche gerade raus zu bekommen, warum das Update der Preise im normalen Regelzyklus aufgerufen wird. ich denke, es liegt daran, dass es beim Booten über
handler.handler10Sec()aufgerufen wird:zum 5 Minuten Intervall wird es dann zwei mal im selben Zyklus aufgerufen:
seaspotter commentedon Oct 12, 2026
@tpd-opitz Glaube ich hab's – kein Concurrency-Problem, sondern ein Gating-Bug in
configurable_tariff.py, der alle Tarif-Anbieter betrifft (nicht nur Tibber – awattar, octopusenergy, naturstrom etc. nutzen alle dieselbeConfigurableFlexibleTariff/ConfigurableGridFee-Basis).In
__call_component_updater()wirdnext_query_timenur neu gesetzt, wenn die Antwort tatsächlich neuere Preise liefert als schon bekannt:Hat der Anbieter beim ersten täglichen Versuch (13:25–13:55) die Preise für morgen noch nicht, bleibt
next_query_timeauf dem alten, bereits abgelaufenen Wert stehen. Im nächsten Regelzyklus (alle ~10s) greift die Abfragebedingung inupdate()dann sofort wieder – ohne Wartezeit. Das erklärt das "wird jetzt in jedem Regelzyklus abgefragt".Der Exception-Pfad hat dasselbe Problem:
fault_state.warning("... retry in 5 minutes")ist nur Log-Text,next_query_timewird auch hier nie gesetzt. Führt das Dauerfeuer zu einem Rate-Limit beim Anbieter, bleibt es in der Schleife hängen – teils stundenlang.Erklärt auch das "Kein Fehler" trotz fehlender Preise: Auf dem "keine neuen Daten"-Pfad ruft
__log_and_publish_progress()weiterhinno_error()auf, es gibt keinen Fehlerzustand für "immer noch keine Preise für morgen".Der doppelte Aufruf (
handler10Sec+handler5MinAlgorithm) ist real, aber vermutlich nicht die Ursache –schedule.run_pending()läuft sequenziell, die sollten sich nicht überlappen.Vorschlag:
next_query_timein beiden "kein Erfolg"-Fällen auf einen kurzen Backoff setzen (z.B. 15-30 min) statt gar nicht, plus eine echte Warnung ab einer gewissen Uhrzeit ohne Preise für morgen. Sag Bescheid, ob das passt – dann mach ich gerne einen PR oder du?EckhardM commentedon Oct 12, 2026
Ich kann das morgen mal prüfen, falls ich um 14 Uhr wieder keine Preise habe, was dann bei mir in
next_query_timesteht. Nachdem ich die Einstellung "Ladeeinstellungen - Übergreifendes" heute aufgerufen und gespeichert habe, stehtnext_query_timerichtigerweise erstmal wieder auf1791892500- also 13.10.2026 - 13:55:00.In einer völlig anderen Anwendung prüfe ich die Tibber-Preise in jeder Stunde zur Minute 31 und frage sie bei Tibber ab, falls ich sie noch nicht habe. Heute kamen die Preise erst um 14:31, das bedeutet, dass sie um 13:31 noch nicht verfügbar waren.
10 remaining items
philipberghoff commentedon Oct 14, 2026
Gute Frage - in der Tibber-App waren die Preise für morgen um 13:07 Uhr zumindest veröffentlicht. Die openWB kennt sie jetzt (13:24) noch nicht. Wie oft wird mit dem Fix abgefragt?
seaspotter commentedon Oct 14, 2026
An der generellen Logik hat sich ja nichts geändert: openWB errechnet einen random Zeitraum zwischen 13:25 und 13:55 (für jede Installation was anderes) und versucht ab diesem Zeitpunkt die Daten zu holen. Der Zeitpunkt könnte bei dir also noch gar nicht erreicht sein.
Was neu ist: Wenn dann keine Daten abgerufen werden können ab diesem Zeitpunkt, dann wird es alle 5min erneut versucht bis 16:00 Uhr und dann wird eine Warnung rausgegeben das keine Daten abgerufen werden können.
philipberghoff commentedon Oct 14, 2026
Jetzt sind die Preise da, @seaspotter. Sehr genial.
EckhardM commentedon Oct 14, 2026
Bei mir wurden heute bis jetzt (17:08) wieder keine Preise für morgen geladen (ich bin noch auf Version 2.2.3), was aber merkwürdig ist,
openWB/optional/ep/flexible_tariff/get/next_query_timesteht auf1792014300- das ist heute 23:45 - wie kommt er denn darauf?tpd-opitz commentedon Oct 14, 2026
Dass ist der Fallback für Anbieter mit kürzeren Preisvorhersagen, wenn die Berechnung des nächsten update-timestamp einen Wert zu weit in der Zukunft ergab, dann wird der letzte Key der übermittelten Preise genommen. Die Frage ist, wieso er da hin kommt denn dieses
ifkann IMHO nichttruesein, wenn keine Taten von Tibber kamen:Und damit sollte die "reguläre" Berechnung nicht aktiv sein, sondern seaspotters neue...
seaspotter commentedon Oct 14, 2026
Aber er ist ja aufm 2.2.3 Release nicht aufm Master, da ist meine Berechnung nicht drin, nur im Master :)
EckhardM commentedon Oct 14, 2026
Ich habe mich bisher nicht getraut, auf den Master zu gehen, sondern war bisher immer auf dem Release. Repariert ihr Fehler immer zeitnah, falls doch mal was klemmt? Ich brauche die openWB wirklich täglich und muss mich drauf verlassen, dass das Auto am nächsten Morgen geladen ist.
seaspotter commentedon Oct 14, 2026
Zumindest die Antworten kommen immer zeitnah :)
Es kann im Master immer mal ein Bug sein der sich durch neue Änderungen einschleicht, das ist nie auszuschließen. Aber wenn man auch regelmäßig Backups macht plus vorm direkten Update, dann kannst du ja immer direkt wenn du merkst es funktioniert was nicht ein Backup einspielen. Aber man sollte sich dem eben bewusst sein, dass man da wirklich Alpha-Tester ist. Und ja auch Bugs werden ja meist zeitnah (sofern man es sofort findet und die Datenbasis gut ist) meist innerhalb ein paar Tage gefixt.
Aber auch das nächste Release bzw. die Beta und dann das Release steht ja vor der Tür, dauert auch nicht mehr lange :)
tpd-opitz commentedon Oct 15, 2026
Mei mir gehts jetzt gar nicht mehr:
Stand: 2026-10-14 12:00:55 +0200 [c9606a1]
log:
Ich habe also nach dem Fix das Verhalten, das Eckhard im
releasebeobachtetseaspotter commentedon Oct 15, 2026
Du hattest mit deinem Verdacht recht: der "kürzere-Preisvorhersage"-Fallback in
_calculate_next_query_time()springt auf das Ende der heute schon bekannten Preise, sobald eine Anfrage "neuer als vorher" aussieht - auch wenn das nur bedeutet, dass die Antwort innerhalb des heutigen Tages weitergerollt ist, ohne je den Folgetag zu erreichen. Dadurch pausierte der Abruf bei dir bis 23:45, noch bevor die Warnschwelle (16:00) überhaupt erreicht war.Fix: der Sprung aufs Tagesende greift jetzt nur noch, wenn entweder schon Folgetagspreise da sind oder die Warnschwelle bereits erreicht ist - vorher bleibt's beim kurzen 5-Minuten-Backoff.
#4122
seaspotter commentedon Oct 16, 2026
Ist gemerged, geht's jetzt bei dir @tpd-opitz ?
tpd-opitz commentedon Oct 16, 2026
sag ich Dir nach 14:00... ;o)
tpd-opitz commentedon Oct 16, 2026
Hat geklappt:
seaspotter commentedon Oct 16, 2026
Yeah :) Dann mach ich das Issue hier mal zu weil Erledigt? Und du machst das dann nochmal "hübsch und schön" in Richtig @tpd-opitz mit nem eigenen PR ausserhalb des Bugfixes?