NEWS
Javascript 6.1.0 - Neue Funktionen (Beta)
-
Hallo alle zusammen,
im Laufe des Tages sollte JavaScript 6.1.0 im Beta Repository auftauchen und bringt neben Fehlerbehebungen ein paar Neuigkeiten mit über die ich gern Informieren möchte:
Schutz vor Amoklaufenden Skripten
In letzter Zeit hatten wir häufiger Supportfälle wogesamte ioBroker Systeme sehr unresponsive/langsam wurden. Ursache waren mehrfach "Amok laufende Skripte", die durch Fehler einfach massive viele State Werte gesetzt haben.
Der JavaScript Adapter überwacht ab sofort die Anzahl der setState pro Skript und wenn dies pro Minute mehr als 1000 sind (der Wert ist global im Adapter konfigurierbar) - 1000/Min sind 16 pro Sekunde - wird das Skript beendet! Ein Fehler wird geloggt.
Technisch wird auch nicht direkt bei der "ersten Minute" das Skript beendet sondern erst wenn es 2 aufeinanderfolgende Minuten mehr als 1000 waren, um zB größere Skripte die viele Dinge beim Start tun nicht direkt wieder abzuschiessen.
Wem 1000 zu wenig ist kann dies ändern in der Adapter-Konfiguration.
Ich denke mit solch einem Schutz sollten wir in der Zukunft solche Probleme vermeiden
createState Methode
Auf vielfachen Wunsch gibt es jetzt eine createAlias Methode analog zu createState.
Doku: https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#createaliasIm einfachsten Fall bekommt diese Methode nur die ID des Ursprungsobjekts und übernimmt auch die Common Werte von diesem. Weiterhin können aber auch alle anderen Varianten (read/write IDs mit Funktions angegeben werden oder common (partiell) mit einem angegebenen Objekt überschrieben werden.
setStateDelayed im Selector
setStateDelayed ist nun auch als Methode im Selector verfügbar
exec hat "options" Objekt
Mit dem Options Objekt, welches direkt an nodejs durchgegeben wird können für exec's weitere Einstellungen vorgenommen werden.
Was geht steht hier: https://nodejs.org/api/child_process.html#child_processexeccommand-options-callbackViel Spass mit der neuen Version und Feedback dazu bitte gern hier im Thread.
Ingo
-
@apollon77
Schön, dass es wieder ein Update gibt und dass es createAlias gibt. deleteAlias fände ich auch noch wünschenswert.Der Bug, dass bei on schedule ()... und Neustart des entsprechenden Scripts die Timer nicht gelöscht werden, ist noch drin oder?
-
@marty56 sagte in Javascript 6.1.0 - Neue Funktionen (Beta):
Schön, dass es wieder ein Update gibt und dass es createAlias gibt. deleteAlias fände ich auch noch wünschenswert.
delObject ist exakt das gleiche, also unnötig.
Der Bug, dass bei on schedule ()... und Neustart des entsprechenden Scripts die Timer nicht gelöscht werden, ist noch drin oder?
Dann poste ich mal das ganze Changelog, dann beantwortet sich deine Frage von allein:
- (Apollon77) Add a configurable check for number of setStates per Minute to prevent scripts from taking down ioBroker. Default are 1000 setState per minute. Only stops if the number is reached 2 minutes in a row!
- (Apollon77) Add createAlias method to create aliases for states
- (Apollon77) Add setStateDelayed to selector
- (Apollon77) Add options to exec command
- (Apollon77) Fix issues with cancelling schedules when stopping scripts
- (bluefox) Corrected debug mode
Gefixter Debugger und das mit den Schedules fällt unter die "Fehlerbehebungen" die oben genannt, aber nicht weiter ausgeführt, sind
-
@apollon77 Sorry, dass ich nicht das Changelog gelesen hatte. Aber Danke!
-
@marty56 Also bitte gern prüfen. Bei mir lokal war es damit gefixt ... war eine interessante Challenge bis ich das problem mal verstanden hab ... der Fix waren dann 2 Mins
-
Update auf 6.1.0 hat problemlos funktioniert, Der Schedule Bug ist weg.
Super Arbeit!
Gruß Steffen
-
@apollon77
Anmerkung zur Doku: Es ist kein Wunder, dass Nutzer immer wieder den Begriff "Variable" für einen "Datenpunkt" verwenden, wenn es in der Doku so vorgelebt wird. -
@paul53 hast du einen Link?
-
-
@apollon77 sagte in Javascript 6.1.0 - Neue Funktionen (Beta):
Der Bug, dass bei on schedule ()... und Neustart des entsprechenden Scripts die Timer nicht gelöscht werden, ist noch drin oder?
Dann poste ich mal das ganze Changelog, dann beantwortet sich deine Frage von allein:
Dabei fällt mir gerade folgende Frage ein: Kann man die laufenden Timer irgendwo sehen?
-
@paul53 Danke!
-
Ich habe tatsächlich diesen neuen Fehler "setState Checker" bekommen, bei einem Script.
Script script.js.common.Energie is calling setState more than 1000 times per minute! Stopping Script now! Please check your script
Es wäre schön, wenn man etwas mehr Infos zu dem State oder der Zeile bekommen könnte, wo dieser Fehler auftritt.
-
@marty56 ich hab keine Ahnung von javascript.
Aber was für Infos fehlen dir denn?such mal alle setState()
da scheinen in einer Schleife im Millisekundentakt States geprüft zu werden. -
@marty56 er zählt alle set state pro Skript. Des Weiteren einmal pro Minute schaut er nach der Zahl. Wie soll man das denn auf ein einzelnes setState runterbrechen? Das geht nicht.
Starte dein Skript im verbose Mode und jede Aktion wird geloggt. Dann siehst du vllt mehr.
Und ja es kann ja sein das das für das Skript ok ist. Aber solltest du prüfen bevor du das Limit hoch setzt.
-
@paul53 hm … ok ich stehende einen Fehler das in Beispielen createState kommt. Aber wo ist variable? Ok muss ich nachher mal am pc suchen. Oder mach nen pr :-))
-
@apollon77 createState('myAlias', {id: {read: 'myReadValiable', write: 'myWriteVariable'}})
vielleicht besser datapoint -
-
@homoran ok my fault dann. Fixe Doku nachher
-
@apollon77 sagte: mach nen pr :-))
Erledigt.
-
@paul53 Danke!!