NEWS
Hausspeicher laden, dynamisch, tibberlink, Scripte
-
@babl deshalb testen wir das ja
Ich werde noch schauen, warum meine Aliase anders definiert sind.Gruß Timo
-
Also ich bekomme das nicht ans laufen.
Den Alias alias.0.Sonnen.Status.userSoc habe ich korrekt definiert.
Was bedeutet "timerID" undefined?
Wo definiere ich die Variable 0_userdata.0.Solar.Energie.heute_09:00?
Danke!17:31:55.519 info javascript.0 (1929) Stop script script.js.Tibber-SE-Hauptscript 17:31:55.575 info javascript.0 (1929) Start javascript script.js.Tibber-SE-Hauptscript 17:31:55.582 info javascript.0 (1929) script.js.Tibber-SE-Hauptscript: getState(id=alias.0.Sonnen.Status.userSoc, timerId=undefined) => not found 17:31:55.583 warn javascript.0 (1929) at script.js.Tibber-SE-Hauptscript:4:12 17:31:55.584 warn javascript.0 (1929) at script.js.Tibber-SE-Hauptscript:90:3 17:31:55.584 info javascript.0 (1929) script.js.Tibber-SE-Hauptscript: getState(id=0_userdata.0.Test.Batteriespeicher_Kapazitaet, timerId=undefined) => {"val":9200,"ack":true,"ts":1699201799429,"q":0,"c":"script.js.Tibber-SE-DatenpunkteErstellen","from":"system.adapter.javascript.0","user":"system.user.admin","lc":1699201799429} 17:31:55.584 info javascript.0 (1929) script.js.Tibber-SE-Hauptscript: getState(id=0_userdata.0.Solar.Energie.heute_09:00, timerId=undefined) => not found 17:31:55.585 warn javascript.0 (1929) at script.js.Tibber-SE-Hauptscript:6:26 17:31:55.585 warn javascript.0 (1929) at script.js.Tibber-SE-Hauptscript:90:3 17:31:55.586 info javascript.0 (1929) script.js.Tibber-SE-Hauptscript: getState(id=0_userdata.0.Test.Wirkungsgrad, timerId=undefined) => {"val":85,"ack":true,"ts":1699201799441,"q":0,"c":"script.js.Tibber-SE-DatenpunkteErstellen","from":"system.adapter.javascript.0","user":"system.user.admin","lc":1699201799441} 17:31:55.586 info javascript.0 (1929) script.js.Tibber-SE-Hauptscript: getState(id=0_userdata.0.Test.Batterie_laden, timerId=undefined) => {"val":false,"ack":true,"ts":1699201799461,"q":0,"c":"script.js.Tibber-SE-DatenpunkteErstellen","from":"system.adapter.javascript.0","user":"system.user.admin","lc":1699201799461} 17:31:55.586 info javascript.0 (1929) script.js.Tibber-SE-Hauptscript: subscribe: {"pattern":{"id":"modbus.0.holdingRegisters.1.97733_Batt1_StateOfCharge","change":"lt","q":0},"name":"script.js.Tibber-SE-Hauptscript"} 17:31:55.587 info javascript.0 (1929) script.js.Tibber-SE-Hauptscript: subscribe: {"pattern":{"id":"0_userdata.0.Tibber.Beste_Einzelstunden","change":"any","q":0},"name":"script.js.Tibber-SE-Hauptscript"} 17:31:55.587 info javascript.0 (1929) script.js.Tibber-SE-Hauptscript: subscribe: {"pattern":{"id":"0_userdata.0.Tibber.Beste_Kosten","change":"any","q":0},"name":"script.js.Tibber-SE-Hauptscript"} 17:31:55.587 info javascript.0 (1929) script.js.Tibber-SE-Hauptscript: subscribe: {"pattern":{"id":"0_userdata.0.Tibber.Beste_Stundenbloecke","change":"any","q":0},"name":"script.js.Tibber-SE-Hauptscript"} 17:31:55.587 info javascript.0 (1929) script.js.Tibber-SE-Hauptscript: registered 4 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions 17:34:11.516 info javascript.0 (1929) script.js.Tibber-SE-Hauptscript: getState(id=0_userdata.0.Test.Hoechstpreis.AVG, timerId=undefined) => {"val":0,"ack":true,"ts":1699201799462,"q":0,"c":"script.js.Tibber-SE-DatenpunkteErstellen","from":"system.adapter.javascript.0","user":"system.user.admin","lc":1699201799462} 17:34:11.516 info javascript.0 (1929) script.js.Tibber-SE-Hauptscript: getState(id=0_userdata.0.Test.Mindestpreis.AVG, timerId=undefined) => {"val":0,"ack":true,"ts":1699201799462,"q":0,"c":"script.js.Tibber-SE-DatenpunkteErstellen","from":"system.adapter.javascript.0","user":"system.user.admin","lc":1699201799462}
-
@mtbsteve die 0_userdata.0.Solar.Energie.heute_09:00
Ist der Punkt der von deinem PV forecast Adapter kommt ist unter dem Bereich Hauptscript beschrieben,
Die Timer Id das kann eventuell sein durch das dass er noch keinen vollständigen Sonnenuntergang und sonnenaufgang berechnen konnte, fülle einfach Mal die Werte unter den Objekten
Als Beispiel Sonnenuntergangswert mit 5000watt und Sonnenaufgang mit 2500 watt
-
@babl danke für Deine Rückmeldung. Irgendwo ist bei mir der Wurm drin.
-
Den Wert für die Variable 0_userdata.0.Solar.Energie.heute_09:00 extrahiere ich nun über ein eigenes Skript aus dem Json Objekt des pvforecast Adapters.
Was ich überhaupt nicht verstehe: Warum wird der Wert 0_userdata.0.Solar.Energie.heute_09:00 nur einmal beim initialen Aufruf des Hauptscripts abgefragt? Da fehlt doch ein täglicher Update dieses Wertes? -
Den Sonnenuntergangswert habe ich mal mit 5000watt und Sonnenaufgang mit 2500 watt belegt. Die TimerID ist aber immer noch "unknown". Warum?
-
Wo werden die Werte für Hoechstpreis.AVG und Mindespreis.AVG berechnet?
Was bedeuten die Sonderzeichen unter der Unit Definition?
-
Das script Beladedauer liefert den folgenden Fehler:
12:42:51.520 info javascript.0 (1929) Start javascript script.js.Tibber-SW-Beladedauer 12:42:51.530 info javascript.0 (1929) script.js.Tibber-SW-Beladedauer: subscribe: {"pattern":{"id":"modbus.0.holdingRegisters.1.97733_Batt1_StateOfCharge","change":"ne","q":0},"name":"script.js.Tibber-SW-Beladedauer"} 12:42:51.531 info javascript.0 (1929) script.js.Tibber-SW-Beladedauer: subscribe: {"pattern":{"id":"0_userdata.0.Test.Ladeprozente_Hausspeicher","change":"ne","q":0},"name":"script.js.Tibber-SW-Beladedauer"} 12:42:51.531 info javascript.0 (1929) script.js.Tibber-SW-Beladedauer: registered 2 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions 12:45:55.804 info javascript.0 (1929) script.js.Tibber-SW-Beladedauer: getState(id=modbus.0.holdingRegisters.1.97733_Batt1_StateOfCharge, timerId=undefined) => {"val":56.67,"ack":true,"ts":1699271155797,"q":0,"from":"system.adapter.modbus.0","user":"system.user.admin","lc":1699271155797} 12:45:55.805 info javascript.0 (1929) script.js.Tibber-SW-Beladedauer: getState(id=0_userdata.0.Test.Batteriespeicher_Kapazitaet, timerId=undefined) => {"val":9200,"ack":true,"ts":1699201799429,"q":0,"c":"script.js.Tibber-SE-DatenpunkteErstellen","from":"system.adapter.javascript.0","user":"system.user.admin","lc":1699201799429} 12:45:55.805 info javascript.0 (1929) script.js.Tibber-SW-Beladedauer: getState(id=0_userdata.0.Test.Beladeleistung, timerId=undefined) => {"val":3000,"ack":true,"ts":1699201799430,"q":0,"c":"script.js.Tibber-SE-DatenpunkteErstellen","from":"system.adapter.javascript.0","user":"system.user.admin","lc":1699201799430} 12:45:55.805 info javascript.0 (1929) script.js.Tibber-SW-Beladedauer: getState(id=0_userdata.0.Test.Beladeleistung_95_100, timerId=undefined) => {"val":4,"ack":true,"ts":1699201799431,"q":0,"c":"script.js.Tibber-SE-DatenpunkteErstellen","from":"system.adapter.javascript.0","user":"system.user.admin","lc":1699201799431} 12:45:55.806 info javascript.0 (1929) script.js.Tibber-SW-Beladedauer: getState(id=0_userdata.0.Test.Beladeleistung_0_5_90_95, timerId=undefined) => {"val":2,"ack":true,"ts":1699201799432,"q":0,"c":"script.js.Tibber-SE-DatenpunkteErstellen","from":"system.adapter.javascript.0","user":"system.user.admin","lc":1699201799432} 12:45:55.806 info javascript.0 (1929) script.js.Tibber-SW-Beladedauer: getState(id=0_userdata.0.Test.Ladeprozente_Hausspeicher, timerId=undefined) => {"val":100,"ack":true,"ts":1699201799458,"q":0,"c":"script.js.Tibber-SE-DatenpunkteErstellen","from":"system.adapter.javascript.0","user":"system.user.admin","lc":1699201799458} 12:45:55.806 info javascript.0 (1929) script.js.Tibber-SW-Beladedauer: getState(id=modbus.0.holdingRegisters.1.97733_Batt1_StateOfCharge, timerId=undefined) => {"val":56.67,"ack":true,"ts":1699271155797,"q":0,"from":"system.adapter.modbus.0","user":"system.user.admin","lc":1699271155797} 12:45:55.806 info javascript.0 (1929) script.js.Tibber-SW-Beladedauer: setForeignState(id=0_userdata.0.Test.Beladedauer_Hausspeicher, state={"val":116.5272,"ack":true,"ts":1699271155806,"q":0,"from":"system.adapter.javascript.0","lc":1699271155806,"c":"script.js.Tibber-SW-Beladedauer"}) 12:45:55.807 warn javascript.0 (1929) script.js.Tibber-SW-Beladedauer: setForeignState(id=0_userdata.0.Test.Beladedauer_Hausspeicher, state={"val":116.5272,"ack":true,"ts":1699271155806,"q":0,"from":"system.adapter.javascript.0","lc":1699271155806,"c":"script.js.Tibber-SW-Beladedauer"}) - was not executed, while debug mode is active 12:45:55.807 info javascript.0 (1929) script.js.Tibber-SW-Beladedauer: 116.5272
Das Skript berechnet die beladedauer mit 116.5272. Kann den Wert aber aus mir nicht ersichtlichen Grund auf 0_userdata.0.Test.Beladedauer_Hausspeicher schreiben. Die Variable ist aber angelegt.
Danke fuer deine Hilfe.
-
-
Ich würd dann auch nochmal nachfragen, ich hab die Scripte jetzt 2 Tage laufen lassen aber irgendwie versteh ich die Geschichte nich so ganz.
Hab gemäß der Anleitung alles soweit eingerichtet und es gibt auch keine Fehlermeldungen, aber an den Tibber-Datenpunkten da ändert sich irgendwie garnix. -
@icebear ok, also geht es mit dem Einrichten der Scripte, ich weiß daß ist alles tricky, aber wie soll man das anders lösen. Das beste wäre ein Adapter, der das macht, aber ich kann das leider nicht.
Aber nun zu deinem Problem, daß kann viele Gründe haben,
- Das Script denkt das die Entladedauer kleiner ist und so bis zum nächsten Sonnenaufgang mit der Batterie durchkommt, in Abhängigkeit des PV Forecast.
- Dein Wirkungsgrad von der Batterie ist so klein eingestellt, daß hier der UNterschied zwischen Höchstpreis und Mindestpreis nicht ausreicht um die Batterie rentabel zu laden.
- Wurde die Beladedauer, Entladezeit, Gesamtverbrauch usw richtig berechnet?
- Kopier mal bitte im Hauptscript die Variable PV Forecast heute 9 Uhr innerhalb des Triggers, da sich der Wert sonst nicht ändert, vielleicht liegt es an dem.
-
@mtbsteve ich weiß auch ehrlich gesagt nicht wo die Timer ID herkommt, das ist mir ein Rätsel.
Mit dem Pv-Forecast heute 9 Uhr, da hast du recht, daß gehört sich gleich unterhalb des Triggers. Da habe ich vorher innerhalb des Triggers den originalen Datenpunkt gehabt, damit es aber dann leichter wird und man nicht innerhalb des Triggers was ändern muß, habe ich eine Variable draus gemacht, die nur beim Start des Scripts abgefragt wird, das gleiche ist es bei der Variable mit dem Wirkungsgrad (wenn es jemand täglich ausrechnen lässt), deshalb müßte man diese 2 Variablen auch innerhalb des Triggers kopieren, man kann sie dann oberhalb löschen.
Sorry.Aber trotzdem habe ich das mit der Timer ID noch nie gehört, da bin ich total überfragt.
Hauptscript wurde auf Version 1 aktualisiert, die aktualisierten Versionen findet ihr immer in den 1. Posts.
-
@babl said in Hausspeicher laden, dynamisch, tibberlink, Scripte:
Dein Wirkungsgrad von der Batterie ist so klein eingestellt, daß
Also der Wirkungsgrad ist mit 95% angegeben,
Den Rest muß ich noch testen, meld mich wieder
-
@babl danke- und wo werden die Werte für Hoechstpreis.AVG und Mindespreis.AVG berechnet?
-
@mtbsteve im Script tibberjson
-
Hi, ich bin auch gerade dabei dein Skript zu implementieren.
Habe noch Verständnisfragen:
Der PV-Forecast 9:00 gibt mir an, welche PV-Leistung von 9-9:30 zu erwarten ist, z.B. heute 1,4kWh.
- Wieso wird nicht die erwartete Tagesproduktion angeschaut? Im Winter macht es doch durchaus Sinn, da es ja auch Tage gibt, an denen garnichts runter kommt, oder hald vielleicht nur am Vormittag mal ein Stündchen und dann regnets den Rest des Tages.
- Warum nimmst du nicht den Wert direkt aus dem Adapter?
Danke schon mal und vielen Dank für deine Arbeit!!
-
@babl said in Hausspeicher laden, dynamisch, tibberlink, Scripte:
im Script tibberjson
Äh, hab ich was verpasst? Wo ist das Script tibberjson?
-
@babl said in Hausspeicher laden, dynamisch, tibberlink, Scripte:
@mtbsteve ich weiß auch ehrlich gesagt nicht wo die Timer ID herkommt, das ist mir ein Rätsel.
Mit dem Pv-Forecast heute 9 Uhr, da hast du recht, daß gehört sich gleich unterhalb des Triggers. Da habe ich vorher innerhalb des Triggers den originalen Datenpunkt gehabt, damit es aber dann leichter wird und man nicht innerhalb des Triggers was ändern muß, habe ich eine Variable draus gemacht, die nur beim Start des Scripts abgefragt wird, das gleiche ist es bei der Variable mit dem Wirkungsgrad (wenn es jemand täglich ausrechnen lässt), deshalb müßte man diese 2 Variablen auch innerhalb des Triggers kopieren, man kann sie dann oberhalb löschen.
Sorry.Aber trotzdem habe ich das mit der Timer ID noch nie gehört, da bin ich total überfragt.
Hauptscript wurde auf Version 1 aktualisiert, die aktualisierten Versionen findet ihr immer in den 1. Posts.
Danke. Habe die Änderungen von Dir eingebaut. Die TimerID scheint wohl was mit dem Debug Setting zu tun zu haben, seitdem ich das ausgeschaltet habe, isses weg.
@mtbsteve im Script tibberjson
bitte poste noch das tibberjson script - das fehlt (oder habe ich nicht gefunden)
-
@mtbsteve das muss normal immer Tibber Hauptscript mit dabei sein,
habe aber festgestellt, als ich das als Test importiert habe, daß der Block nicht mit dabei ist, also bitte aktuellste Version des Hauptscripts laden, oben im 3. Beitrag.
Aktuellste Version ist die Version 1.
Das mit der Timer ID wußte ich gar nicht, auch wieder was gelernt, danke dir.
-
zu 1. Weil bis 9 Uhr das Script läuft, ab dann gehe ich davon aus, daß die Sonne ihr weiteres macht, jeder kann hier seine besten Punkte hernehmen, wie er meint.
Das Script rechnet bis 9 Uhr die Entladezeit hoch, sagen wir mal es ist 3 Uhr Früh, die Batterie hat eine Kapazität von 10000Watt, von 3 uhr bis 9 uhr sind 6 stunden mal 60 minuten sind 360 minuten, ist die entladezeit z.B. (200 Minuten) kleiner als die 360 minuten dann versucht er sowieso zwischen 0 und 9 uhr die batterie zu beladen.
Ist die berechnete Beladezeit der Batterie unter 60 minuten sucht er sich den günstigsten Stundenblock, ist die Beladezeit länger als 60 bis 120 Minuten, dann setzt er die besten zusammenshängenden stundenblöcke zum laden, größer als 120 dann sucht er die besten 3 zusammenhängenden stundenblöcke.
Sollte vor Mitternacht die Entladezeit bereits kleiner sein als die Zeit bis Mitternacht dann sucht er vor Mitternacht die besten Zeiten.
So wäre mein Plan.
Zu 2. Ich habe die Variable genommen um den User so wenig zum ändern innerhalb des Scripts zuzumuten. Ansonsten kannst du direkt den Datenpunkt auch nehmen. Kein Problem, habe ja oben geschrieben für die Cracks ist das Blockly wahrscheinlich ein Klacks, doch es gibt ja auch andere, die erst frisch mit iobroker angefangen haben.
-
@babl Danke - habs übernommen. Aktuell läuft alles soweit durch. Bin mal gespannt wie er die Ladeplanung macht
-
@babl said in Hausspeicher laden, dynamisch, tibberlink, Scripte:
Dies siehst du wenn du den Datenpunkt 0_userdata.0.Test.Ladeprozente_Hausspeicher auf 90% änderst wie sich die Zeit in Minuten unter dem Datenpunkt 0_userdata.0.Test.Beladedauer_Hausspeicher ändert.
!!!!!Achtung: aktuelle Einstellungen nur von 90 -100% möglich.Ich muß nochmal nachfragen, wie verhält sich das mit dem DP 0_userdata.0.Test.Ladeprozente_Hausspeicher
Leg ich den selber fest, kommt der irgendwo her, so wie du beschrieben hast sind ja nur Werte zwischen 90-100% möglich, also leg ich das selber fest was ich da haben möchte?
-
@icebear ja, legst du selber fest.
-
@babl es scheint bei mir zu funktionieren, das laden wurde aber bisher noch nicht getriggert, das kann auch an meinen Einstellungen liegen.
Frage: wann werden die Werte für Tibber.Beste_Einzelstunden, Tibber.Beste_Kosten und Tibber.Beste_Stundenblöcke gesetzt? Siehe Screenshot.Kann es sein, dass der Trigger für beste Kosten im Programm garnicht verwendet wird?
-
@mtbsteve zu weiter oben, ja legst du selbst fest, von 90 - 100% ist es möglich, habe das genommen weil vielleicht einige sagen sie wollen die Batterie nicht bis 100% laden.
Der Trigger ist immer sobald der User soc kleiner wird. Außer zwischen 9 Uhr und 15 Uhr, da wird nichts gemacht da ja hier eigentlich die Sonne ihren Dienst verrichten sollte.
Ich weiss jetzt nicht ganz genau, aber es werden nur 2 verschiedene Channel vom tibberlink aktiviert. Das wäre der für beladezeit unter 1 Stunde also der günstigste Preis und dann der Channel mit den stundenblöcken. Hier werden dann kommt auf die beladezeit und beladeleistung an die Stunden genommen die hier gebraucht werden = über 120min beladedauer der beste 3 h Block.
Was du natürlich auch noch berücksichtigen musst ist der Wirkungsgrad, da es ja wenn nur 5 Cent unterschied zwischen höchstpreis und Mindestpreis keinen Sinn macht bei einem Wirkungsgrad von 80% den Speicher zu laden
Beispiel: Höchstpreis 0.3€ Tiefstpreis 0.26€ Wirkungsgrad 80%
Nach diesem Beispiel müsste der Strompreis unter 0.24€ gehen wo sich das rentiert.
Obiges Beispiel mit Wirkungsgrad 90% da wäre dann der Preis unter 0.27€
Ich hoffe ich hab's so einigermaßen erklären können was mein Gedanke mit dem Beladen des Hausspeichers ist.