NEWS
Script lässt Instanz abstürzen
-
Da wird mir undefined ausgegeben
EDIT Weil ich den roten Block als Variable erstellt hab, damit das so ausieht wie bei dir. Aber ist ja quatsch ich müsste das so machen:
Oder?
-
-
@benutzer0815
Das sind eigene Datenpunkte. Die werden mittels Skript geschrieben (aktuell gehalten)?@benutzer0815 sagte in Script lässt Instanz abstürzen:
ich müsste das so machen:
... oder besser so:
-
@paul53 Ah jetzt habe ich den richtigen Baustein gefunden.
Allerdings ist nun die Sonne gerade untergegangen und der Wert ändert sich daher nicht mehr.Die Datenpunkte werden mittels nodered aus dem Huawei Wechselrichter ausgelesen. An diesem ist das Smartmeter auch angeschlossen.
-
@paul53
Tatsächlich, also wenn ich mir den Wert im Objektbaum ansehe, waren es um die 2500. -
@benutzer0815 Ok jetzt geht's.
Nun sieht mein Skript so aus:
In meiner Variable steht immer nur NaN. Das steht für Not a Number? Das verwirrt mich mehr als ds ich damit was anfangen kann.
Wie ist denn die Reihenfolge der Abarbeitung? Kann es sein das er jedesmal eine neue Liste erstellt und dadurch dort immer nur ein Wert drin steht?
Also eigentlich soll er ja nur einmal eine neue Liste erstellen und dann immer alle 10 Sekunden die Schleife durchlaufen. Ist das so oder erstellt er eine neue Liste, macht die Schleife und dann wieder eine neue Liste und dann nach 10 Sekunden wieder die Schleife usw?
-
@benutzer0815
Was mit dem Script ausgegeben wird, steht zu genau diesem Zeitpunkt auch im Objektbaum.
Alles andere schließe ich mal kategorisch aus.Ich bin ausnahmsweise mal im Büro, habe daher keinen ioBroker parat - darum nur Theorie:
Du änderst das letzte Element der Liste und löscht dann das erste. Dann ist die Liste immer leer.
Ich denke mal, dass Du eigentlich ein neues Element anhängen wolltest, oder? -
@codierknecht Ja schon aber das erste Element soll er ja nur löschen wenn die Liste = oder > 10 Elemente ist.
Am Anfang soll also die Liste erstmal gefüllt werden und wenn sie voll ist, sollen immer nur die letzten 9 Werte behalten werden.
Ich habe gerade mal folgendes getestet:
Sieht so aus als wenn das rundum des Zeitplans zuerst einmal ausgeführt wird und dann nie wieder. Also erst "Anfang", dann wird die 10-Sekunden-Schleife übersprungen und dann kommt "Ende" und dann geht es mit der Schleife los.
Seltsam. -
-
@benutzer0815 Nun muss ich mich nur noch an die Optimierung machen. Also das die Ganze nacht nicht das Skript immer läuft.
Das Datum Objekt ist eine Nummer und dasStartUp Objekt ist ein String. Wie bekommt man das am Besten zusammen?Oder meint ihr das Optimieren macht in diese Richtung keinen Sinn?
-
@benutzer0815
Lass Dir mal mit Debug die Liste ausgeben -
@codierknecht Hab ich. Sieht gut aus.
-
@benutzer0815 sagte: Wie bekommt man das am Besten zusammen?
Wie hier gezeigt.
-
@paul53 Super danke!
-
So wird nun jede Millisekunde geprüft ob die aktuelle Zeit dazwischen liegt, oder? Ist ja nicht gerade ressourcenschonend. Also das Ganze noch in einen Zeitplan von einer Minute packen, oder?
Aber dann macht er ja die eigentliche Berechnung nur alle 70 Sekunden, oder? -
@benutzer0815 sagte: jede Millisekunde geprüft ob die aktuelle Zeit dazwischen liegt, oder?
Nein, nur einmal bei Skriptstart. Die Uhrzeitprüfung muss in den 10-s-Trigger!
-
@benutzer0815
Der Trigger bzw. Zeitplan ist immer das äußere Element. Alles andere kommt in den Trigger/Zeitplan. -
@paul53 Ja habe ich mir auch gerade schon gedacht. So ne?
Ist die Frage was ressourcenschonender ist, alle 10 Sekunden noch die Zeitabfrage machen und dafür nachts die Mittewertberechnung und das Variablenbeschreiben sparen oder tagsüber die Zeitabfrage sparen und dafür nachts auch die Berechnung machen.
Habt ihr dafür ein Gefühl was sinniger ist?
-
@benutzer0815
Prüfen ist besser. Man kann zusätzlich noch den CRON-Job auf z.B. 4 bis 22 Uhr eingrenzen: -
@paul53 Wie stellst du das ein?
Hab jetzt CRON und WIZARD probiert aber beides mal sieht es nicht so aus wie bei deinem Screenshot.
Und dieser CRON-Job heißt dann nichts anderes als das er diesen Zeitplan nur in der angegebenen Zeit macht und außerhalb pausiert, ja?