NEWS
Listen sortieren, mal gehts, mal nicht
-
Ich bin gerade dabei etwas für meine kommende Tibbersteuerung zu programmieren. In diesen Blockly erzeuge ich einige Listen die dann wieder sortiert werden sollen. Das woran ich verzweifle ist, das es mal funktioniert und mal nicht.
Oben habe ich eine Funktion fürs sortieren
var Wert = Wert - 1; Liste.sort(function(a, b){ return a[Wert] - b[Wert]; }); return Liste;
Leere Listen werden deklariert und erzeugt
List wird sortiert => funktioniert
eine weitere Liste wird erzeugt und sortiert => funktioniert
dann das gleiche nochmal => funktioniert nicht, die Liste wird nicht sortiert
Was kann das sein?
Log von der oberen Liste sortiert, untere nicht
-
@joeysch
Schau mal hier.
Es wird eine Liste mit Objekten, die Stunde und Preis enthalten, gebildet und anschließend nach Preis sortiert. Die passenden Stunden werden dann in einer weiteren Schleife ermittelt.
Wenn man - so wie Du - keine Objekte verwendet, geht beim Sortieren leicht der Zusammenhang zwischen Zeit und Preis verloren. -
@paul53
Ja, danke das kenne ich schon. Ich will aber nicht nur was abtippen sondern auch verstehen was da passiert.
Warum sortiert Blockly die letzte Liste nicht? Das muss ja irgendeinen Grund haben. Der Aufbau ist genau der gleiche wie bei der Liste davor.
Die eine ja die andere nein, warum?Das auseinandernehmen von Zeit und Preis ist schon geschehen, in diesen Listen möchte ich nur die Zeiten chronologisch sortieren.
-
Ok, habe es jetzt mal mit den Objekten gemacht und es funktioniert.
Bleibt noch die Frage warum das andere nicht? -
@joeysch
Was möchtest Du erreichen? Die 4 günstigsten und / oder teuersten zusammenhängenden Stunden?
Dann müssen die Preise von jeweils 4 aufeinanderfolgenden Stunden summiert und die Summen in eine Liste geschrieben werden, die anschließend nach den Summen sortiert wird. -
@paul53
Was ich erreichen möchte ist, das ich meine Batterie zu den günstigen Stunden lade und den teuren Stunden entlade.
Das müssen aber nicht zwingend aufeinanderfolgende Stunden sein. Ebenso kann es sein, dass die teuren Stunden vor den günstigen liegen. Beispiel: die teuerste Zeit ist morgens um 8.00 Uhr und die günstigste abends um 23.00 Uhr. An diesem Tag macht es also auch keinen Sinn zu laden.
Das habe ich jetzt auch soweit am laufen.
Wenn dir was auffällt was falsch ist oder verbessert werden kann, immer her damit, ich will ja lernen.
Damit hab ich die Werte die ich brauche und mir in die Datenpunkte schreibe.
Daraus hab ich mir dann eine VIS gebastelt.
Als nächstes muss ich mir was basteln um die Batterieladung /- entladung über Modbus zu steuern.
Ich habe ca. 29Kwh Speicherkapazität und kann mit bis zu 12Kw laden. Das heißt, wenn ich wie im Beispiel 4 günstige Stunden habe, kann ich die Ladeleistung etwas eindrosseln, wenn nur 1 Stunde günstig ist volle Leistung. -
@joeysch sagte: Das müssen aber nicht zwingend aufeinanderfolgende Stunden sein.
Dann muss nur geprüft werden, ob die aktuelle Uhrzeit Bestandteil der Liste ist. Sortieren ist nicht erforderlich. Ich vermisse in deinem Blockly einen Trigger.
-
@paul53 sagte in Listen sortieren, mal gehts, mal nicht:
Ich vermisse in deinem Blockly einen Trigger.
Den hab ich erstmal rausgelassen um zu testen.
Hab jetzt einen Zeittrigger auf 0:01 Uhr drin. -
@joeysch sagte: Hab jetzt einen Zeittrigger auf 0:01 Uhr drin.
Man muss die Uhrzeit jede Stunde prüfen, wenn man Schaltoperationen davon abhängig machen will. Bei Werten von z.B. "18:00" in den Listen ist "18:01" zu spät. Deshalb verwende ich auch nur Stunden als Zahl in Listen.
-
Moment, dieser Blockly soll eigentlich nur dafür da sein um die günstigsten und teuersten Stunden zu separieren. Hier wird noch nichts geschaltet oder geregelt. Da Tibber die Daten nur zweimal am Tag aktualisiert, um 0:00 Uhr und um 13:00 Uhr (für den Folgetag) schreibe ich mir die um 0:01 Uhr in die DP's. Diese verwende ich dann im folgenden Blockly weiter.
Hier mal mein Ansatz um den Ladestrom an die Anzahl der nacheinander verfügbaren günstigen Stunden zu regeln.
Was sagst du dazu?
-
@joeysch sagte in Listen sortieren, mal gehts, mal nicht:
Diese verwende ich dann im folgenden Blockly weiter.
In Ordnung.
@joeysch sagte in Listen sortieren, mal gehts, mal nicht:
Was sagst du dazu?
Funktioniert so nicht. Die Prüfung oben ist falsch: Oder-Verküpfung von ms und Vergleich mit "hh:mm".
-
So sollte es gehen
-
@joeysch sagte: So sollte es gehen
Nein. Man benötigt eine Oder-Verknüpfung von 4 Vergleichen. In welchem Format stehen die Zeiten in den Datenpunkten "guenstigste_zeit_N"?
-
z.B. 4:00
-
@joeysch sagte: z.B. 4:00
Also ohne führende "0" vor "10:00" Uhr? Dann muss anders formatiert werden:
-
@paul53
Ok, ich hatte es jetzt so geändert.
Zum Verständnis: Es müsste doch beides gehen?
-
@joeysch sagte: Es müsste doch beides gehen?
Teste es.
-
@joeysch sagte: Batterie zu den günstigen Stunden lade und den teuren Stunden entlade.
Wenn man die nach Preisen sortierte Liste mit 24 Objekten in einen Datenpunkt vom Typ "array" schreibt, kann man die Liste für die Batterieladung und -entladung in einem weiteren Skript auswerten:
EDIT: Hier das Skript zum Erstellen der Liste mit 24 Objekten:
Da der Adapter um Mitternacht alle Werte neu schreibt, sollte man ihm ein paar Sekunden Zeit geben, bevor man die Datenpunkte einliest.
-
@paul53
So wie ich das lese, lädt und entlädt das System bei günstigsten bzw. teuersten Preisen.
Aber, die Werte des zweiten Tages kommen erst ab 13.00 Uhr. Mann müsste noch die Verluste die durch das Laden und Entladen berücksichtigen (ca.20%) und was ist, wenn die teuerste Zeit vor der günstigsten liegt. -
@joeysch sagte: die Werte des zweiten Tages kommen erst ab 13.00 Uhr.
Die spielen keine Rolle, da nur um kurz nach Mitternacht die Werte des aktuellen Tages geholt werden. Es wird nach den Preisen des aktuellen Tages sortiert. Die Reihenfolge der Stunden spielt keine Rolle.
Sollen die Preise des nächsten Tages auch berücksichtigt werden, muss am Nachmittag noch einmal eine Abfrage starten, die allerdings nicht nur die Werte unter "PricesToday" verwenden kann.
@joeysch sagte in Listen sortieren, mal gehts, mal nicht:
Mann müsste noch die Verluste die durch das Laden und Entladen berücksichtigen (ca.20%)
Das muss man bei der Ermittlung von "Aufladedauer" und "Entladedauer" (in Stunden) berücksichtigen.