NEWS
JSON-Liste - günstigste Tibber-Stunde herausfinden
-
Hallo zusammen,
ich habe eine kleine Idee, die mit ioBroker wahrscheinlich umsetzbar wäre - nur leider bin ich im Scripting blutiger Anfänger.
Folgendes Ziel: Beim dynamischen Stromtarif von Tibber gibt es jede Stunde einen anderen Preis / kWh. Mit dem Adapter "TibberConnect" kann ich die Tagespreise in den ioBroker laden. In der günstigsten Stunde am Tag soll jetzt ein Luftentfeuchter für diese eine Stunde laufen.
TibberConnect gibt mir in den Objekten eine JSON-Liste, bereits sortiert nach Preis. Heute sieht sie so aus:
[{"total":0.274,"energy":0.0742,"tax":0.1998,"startsAt":"2023-09-22T14:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2783,"energy":0.0778,"tax":0.2005,"startsAt":"2023-09-22T13:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2798,"energy":0.079,"tax":0.2008,"startsAt":"2023-09-22T15:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2877,"energy":0.0856,"tax":0.2021,"startsAt":"2023-09-22T12:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2895,"energy":0.0872,"tax":0.2023,"startsAt":"2023-09-22T01:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2905,"energy":0.088,"tax":0.2025,"startsAt":"2023-09-22T02:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2908,"energy":0.0883,"tax":0.2025,"startsAt":"2023-09-22T00:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2908,"energy":0.0882,"tax":0.2026,"startsAt":"2023-09-22T16:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2914,"energy":0.0888,"tax":0.2026,"startsAt":"2023-09-22T03:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.294,"energy":0.091,"tax":0.203,"startsAt":"2023-09-22T04:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.294,"energy":0.0909,"tax":0.2031,"startsAt":"2023-09-22T11:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.2948,"energy":0.0917,"tax":0.2031,"startsAt":"2023-09-22T05:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.3043,"energy":0.0996,"tax":0.2047,"startsAt":"2023-09-22T10:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.3084,"energy":0.1031,"tax":0.2053,"startsAt":"2023-09-22T23:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.3118,"energy":0.1059,"tax":0.2059,"startsAt":"2023-09-22T22:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.3131,"energy":0.107,"tax":0.2061,"startsAt":"2023-09-22T17:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.3198,"energy":0.1126,"tax":0.2072,"startsAt":"2023-09-22T06:00:00.000+02:00","currency":"EUR","level":"EXPENSIVE"},{"total":0.3221,"energy":0.1146,"tax":0.2075,"startsAt":"2023-09-22T21:00:00.000+02:00","currency":"EUR","level":"NORMAL"},{"total":0.3265,"energy":0.1183,"tax":0.2082,"startsAt":"2023-09-22T09:00:00.000+02:00","currency":"EUR","level":"EXPENSIVE"},{"total":0.3446,"energy":0.1334,"tax":0.2112,"startsAt":"2023-09-22T20:00:00.000+02:00","currency":"EUR","level":"EXPENSIVE"},{"total":0.3473,"energy":0.1358,"tax":0.2115,"startsAt":"2023-09-22T08:00:00.000+02:00","currency":"EUR","level":"EXPENSIVE"},{"total":0.3481,"energy":0.1364,"tax":0.2117,"startsAt":"2023-09-22T18:00:00.000+02:00","currency":"EUR","level":"EXPENSIVE"},{"total":0.35,"energy":0.138,"tax":0.212,"startsAt":"2023-09-22T07:00:00.000+02:00","currency":"EUR","level":"EXPENSIVE"},{"total":0.376,"energy":0.1599,"tax":0.2161,"startsAt":"2023-09-22T19:00:00.000+02:00","currency":"EUR","level":"EXPENSIVE"}]
Hier erkennt man, dass die günstigste Stunde heute ab 14 Uhr war. Und da hört mein Wissen für mich auf. Ich möchte ein Script erstellen, was mir diesen Wert ausgibt - ich habe aber nichtmal eine Idee, mit welcher Funktion ich so eine Liste "parsen" kann.
-
@crazy-com sagte in JSON-Liste - günstigste Tibber-Stunde herausfinden:
ich habe aber nichtmal eine Idee, mit welcher Funktion ich so eine Liste "parsen" kann.
im Prinzip müsstest du aus allen Attribut xxx.total von JSON, wobei xxx von 0 bis 23 ist, das minimum finden und dann ist xxx die billigste Stunde
EDIT: BLÖDSINN!
ist doch bereits sortiert
-
@crazy-com sagte: JSON-Liste, bereits sortiert nach Preis ... günstigste Stunde heute ab 14 Uhr war. Und da hört mein Wissen für mich auf. Ich möchte ein Script erstellen, was mir diesen Wert ausgibt
Oder lieber Javascript?
-
Ich würde sowas mit JSONATA lösen.#
$[total=$min($$.total)].startsAt
Mit NodeRed halt entsprechend.
Wenn man will kann man dann ein eigenes Objekt erstellen (gelb markiert)
$[total=$min($$.total)].{"Start":startsAt, "Wert":total}
und dieses dann im Blockly nach Belieben weiter zu verarbeiten um die gleiche interpretierte Ausgabe wie @Homoran zu erhalten:
-
@Crazy-Com Ich habe das ganz anders gelöst und erledige das nun im IoBroker unter NodeRed nach dieser Anleitung:
https://www.youtube.com/watch?v=dmmdUPjTopI
Letzendlich schaut dann mein NodeRed Flow im Iobroker so aus:
Der Flow erzeugt dann auch 10 Datenpunkte unter Objekte/nodered im Iobroker, welche je nach Anzahl der benötigten Stunden True oder False sind.
Am Beispiel, siehe Debug gelb markiert für die günstigsten 2 Stunden morgen am 24.9. wäre dann der Datenpunkt "tibber_2std" morgen in der Zeit von 13:00 Uhr bis 15:00 Uhr auf "true".Passt dann auch mit der Tibber App Vorhersage für morgen:
Hier mal mein Flow zum möglichen Import (ohne meinen Tibber Token) :
Der eigene Tibber Token müsste dann noch hier eingefügt werden:
Ggf. viel Spaß beim Testen...
Ich starte jetzt auch erst damit zu testen, sobald unsere PV ab Ende Oktober u.a. nicht mehr genug PV-Überschuss produziert, um dann u.a. 1-2 2kW-Nachtspeicheröfen smart aufzuladen. Daher auch in meinem Flow bis zu 10 günstigste Stunden zur Auswahl.
-
Hallo zusammen,
war nicht so clever, hier einen Thread zu öffnen und dann eine Woche in den Urlaub zu fahren und die Antworten nicht mitzubekommen.
Erst einmal vielen Dank euch allen. Ich schaue mir das alles mal an und melde mich dann nochmal!
-
Ausgehend von meinen NodeRed 10 günstigsten Std. Datenpunkten, hatte ich nun auch noch ein kleines Blockly geschrieben, welches mir auf meinem Ulanzi Matrix Display unter anderem den Std. aktuellen Strompreis in Cent ausgibt und dahinter die Einordnung welche der günstigsten Stunden das ist (1-10). Nicht schön aber funktioniert.
Jetzt um 14:15 Uhr 33 Cent und eine der 2 günstigsten Tagesstunden.
-
Ich hab mir jetzt auch sowas gebaut... aber ich habe ein Problem damit: Wie geht ihr damit um, wenn während einer GRID CHARGE Phase die Sonne doch rauskommt? Ich möchte ja dann nicht mehr weiter über das Netz laden
-
@crazy-com
Vielleicht noch ein Ansatz: Um den Verlauf der Tibberpreise über die jeweils 24h von heute und morgen grafisch mit ECharts darzustellen, habe ich ein Skript verfasst (siehe im Forum hier). Dort sind die Werte (val) dann mit Zeitstempel (ts) in der Form "{"ts": 1701644400000, "val": 0.2566}" als JSON-String abgelegt, können also relativ leicht ausgewertet werden.
Nachtrag 25.12.2023: Hier ein Foto des zugehörigen Pop-up-Views in vis: -
@mickym said in JSON-Liste - günstigste Tibber-Stunde herausfinden:
Ich würde sowas mit JSONATA lösen.#
$[total=$min($$.total)].startsAt
Ich hänge an einem ähnlichen Problem und bin fasziniert von JSONata, komme aber echt schlecht damit zurecht. ;(
Wie würde man den JSONata-Ausdruck erweitern, um z.B. die 5 teuersten, in der Zukunft liegenden Stunden zu erhalten?
-
@mic4rd Du kannst immer den JSONATA Exerciser nehmen. Ich habe mal aus dem 1. Posting diese Quelle und sortiere wieder nach total diesesmal absteigend, um die teuersten zuerst zu haben. Anschliessend nehme ich nur die ersten 5 Objekte.
Hier kannst Du das selbst ausprobieren: https://try.jsonata.org/iupoLlhhu
$^(>total)#$i[$i<=4]
Also alles nach total sortiert und dann die ersten 5 Elemente genommen ($i von 0 bis 4, also die ersten 5 Elemente).
Will man dann nur die Uhrzeiten haben, dann einfach selektieren:$^(>total)#$i[$i<=4].startsAt
Will man diese dann auch noch sortieren, dann einfach den order Operator verwenden
$^(>total)#$i[$i<=4].startsAt^($)
Um zu zeigen, dass dies auch in Blockly funktioniert, hier der Beweis :
Hier zum Import:
Das sequence: true kommt irgendwie vom Blockly. Dann muss man halt die Liste ohne das letzte element nehmen. Das ist wohl eine Blockly Eigenart.
-
@mickym Wow vielen Dank, das ist ja der Oberhammer wie einfach das funktioniert!
Muss mich glaub einfach noch ein bisschen mehr in JSONata einlesen, das muss man unbedingt können. Hast mir eine großartige Starthilfe gegeben!
-
@mic4rd sagte in JSON-Liste - günstigste Tibber-Stunde herausfinden:
@mickym Wow vielen Dank, das ist ja der Oberhammer wie einfach das funktioniert!
Muss mich glaub einfach noch ein bisschen mehr in JSONata einlesen, das muss man unbedingt können. Hast mir eine großartige Starthilfe gegeben!
Der Vorteil von dem Exerciser ist, dass Du siehst, wie man Schritt für Schritt das Ganze entwickelt. Ausserdem kannst Du halt sofort ausprobieren und siehst das Ergebnis. Also ich schreib das auch nicht einfach immer so hin, sondern verwende den Exerciser zum Entwickeln der Ausdrücke. Damit kontrolliere ich dann halt auch immer, ob sich das auch so umsetzen läßt, wie ich es mir denke.