NEWS
Javascript 6.1.0 - Neue Funktionen (Beta)
-
@paul53 danke, das ging schnell :-)
Wie meinst Du das genau?
Muss ich die '.0.' immer dazwischen haben, oder müssen ALLE Aliase immer direkt unter '.0.' definiert sein?
Weil wenn letzteres, also ohne weitere Zwischenebene (Kategorisierung), wird das aber schnell extrem unübersichtlich.@pedder007 sagte: Muss ich die '.0.' immer dazwischen haben
Ja.
@pedder007 sagte in Javascript 6.1.0 - Neue Funktionen (Beta):
müssen ALLE Aliase immer direkt unter '.0.' definiert sein?
Nein, möglichst keine: Immer eine Objektstruktur verwenden!
-
@pedder007 sagte: Muss ich die '.0.' immer dazwischen haben
Ja.
@pedder007 sagte in Javascript 6.1.0 - Neue Funktionen (Beta):
müssen ALLE Aliase immer direkt unter '.0.' definiert sein?
Nein, möglichst keine: Immer eine Objektstruktur verwenden!
-
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 Danke schön, bin jetzt auf v6.1.3 läuft alles top bis jetzt.:+1:
Grüße
Fabio -
@apollon77 Danke schön, bin jetzt auf v6.1.3 läuft alles top bis jetzt.:+1:
Grüße
FabioIch habe mir einen Alias für die Helligkeitssteuerung der Tablets gemacht. Da über den FullyAdapter Read und Write verschiedene DPs sind, verwende ich dafür
createAlias('0_Test.Maverick.Helligkeit', {id: {read: 'fullybrowser.0.10_1_2_103.Info.screenBrightness', write: 'fullybrowser.0.10_1_2_103.Commands.screenBrightness'}},ForceCreate, { type: "number", unit: "%" });(ForceCreate ist eine vorher gesetzte Variable, momentan auf true)
Das klappt bis dahin auch gut und die Helligkeit lässt sich steuern und anzeigen. Allerdings ist die Helligkeit hier 0-255, ich hätte aber gerne 0-100%. Also muss ich nach meinem Verständnis nochread: "val/2.55", write: "val*2.55"einfügen. Aber an welcher Stelle genau? Meine Versuche bis jetzt mit verschiedenen Positionen waren erfolglos.
-
Ich habe mir einen Alias für die Helligkeitssteuerung der Tablets gemacht. Da über den FullyAdapter Read und Write verschiedene DPs sind, verwende ich dafür
createAlias('0_Test.Maverick.Helligkeit', {id: {read: 'fullybrowser.0.10_1_2_103.Info.screenBrightness', write: 'fullybrowser.0.10_1_2_103.Commands.screenBrightness'}},ForceCreate, { type: "number", unit: "%" });(ForceCreate ist eine vorher gesetzte Variable, momentan auf true)
Das klappt bis dahin auch gut und die Helligkeit lässt sich steuern und anzeigen. Allerdings ist die Helligkeit hier 0-255, ich hätte aber gerne 0-100%. Also muss ich nach meinem Verständnis nochread: "val/2.55", write: "val*2.55"einfügen. Aber an welcher Stelle genau? Meine Versuche bis jetzt mit verschiedenen Positionen waren erfolglos.
@labersack sagte: Aber an welcher Stelle genau?
Unter common.alias:
"alias": { "id": { "read": "fullybrowser.0.10_1_2_103.Info.screenBrightness", "write": "fullybrowser.0.10_1_2_103.Commands.screenBrightness" }, "read": "val/2.55", "write": "val*2.55" } -
@labersack sagte: Aber an welcher Stelle genau?
Unter common.alias:
"alias": { "id": { "read": "fullybrowser.0.10_1_2_103.Info.screenBrightness", "write": "fullybrowser.0.10_1_2_103.Commands.screenBrightness" }, "read": "val/2.55", "write": "val*2.55" } -
@labersack sagte: wo im createAlias-Befehl?
createAlias('0_Test.Maverick.Helligkeit', { id: { read: 'fullybrowser.0.10_1_2_103.Info.screenBrightness', write: 'fullybrowser.0.10_1_2_103.Commands.screenBrightness' }, read: "val/2.55", write: "val*2.55" }, ForceCreate, { type: "number", unit: "%" }); -
@labersack sagte: wo im createAlias-Befehl?
createAlias('0_Test.Maverick.Helligkeit', { id: { read: 'fullybrowser.0.10_1_2_103.Info.screenBrightness', write: 'fullybrowser.0.10_1_2_103.Commands.screenBrightness' }, read: "val/2.55", write: "val*2.55" }, ForceCreate, { type: "number", unit: "%" });@paul53
Das hatte ich auch schon probiert, damit klappt es teilweise.
Es wird die Struktur wie aus deinem vorletzten Post erzeugt.
Setzten des Alias auf 50 setzt ...Commands.brightness auf 127,5, bis dahin wie gewünscht.
Im ...Info.screenBrightness steht aber dann 10 und vermutlich dadurch im alias 3,921...%
Das Tablett selber schaltet übrigens auf ziemlich Dunkel, also das ist eher 10 als 127,5 (von 255). -
@paul53
Das hatte ich auch schon probiert, damit klappt es teilweise.
Es wird die Struktur wie aus deinem vorletzten Post erzeugt.
Setzten des Alias auf 50 setzt ...Commands.brightness auf 127,5, bis dahin wie gewünscht.
Im ...Info.screenBrightness steht aber dann 10 und vermutlich dadurch im alias 3,921...%
Das Tablett selber schaltet übrigens auf ziemlich Dunkel, also das ist eher 10 als 127,5 (von 255).@labersack muss da vllt noch ein Math.floor() dazu? Weil ich eher annehme das kommawerte nicht unterstützt sind. Sind es vllt genau die kommawerte die das Problem sind?
-
@labersack muss da vllt noch ein Math.floor() dazu? Weil ich eher annehme das kommawerte nicht unterstützt sind. Sind es vllt genau die kommawerte die das Problem sind?
@apollon77
Tatsächlich hat der Adapter mit Probleme mit Dezimalwerten: wenn ich in den direkten DP vom Adapter 127.5 schreibe, setzt er die Helligkeit auch auf falsche Werte.
Ich habe den Alias deswegen auf math.Round angepasst, trotzdem kann ich über den Alias nicht die Helligkeit korrekt steuern, sobald ich auf Prozent umrechne. Wenn ich als Wert 0-255 belasse, klappt es einwandfrei.
Zusätzliche Schwierigkeit könnte auch sein, dass die Rückmeldung in INFO bis zu 10 Sekunden nach Setzten des COMMANDS kommt, also nicht wegen Alias, sondern bei dem Adapter an sich. Man kann die Zeit im Adapter zwar auch kürzer einstellen, aber das habe ich aus Erfahrungen der Vergangenheit auf 10s stehen.Wenn ich den DP wie folgt erstellen lasse:
{ "common": { "type": "number", "unit": "%", "alias": { "id": { "read": "fullybrowser.0.10_1_2_103.Info.screenBrightness", "write": "fullybrowser.0.10_1_2_103.Commands.screenBrightness" }, "read": "math.Round(val/2.55)", "write": "math.Round(val*2.55)" }, "name": "screenBrightness", "role": "value" }, "native": {}, "type": "state", "from": "system.adapter.javascript.0", "user": "system.user.admin", "ts": 1671117642794, "_id": "alias.0.0_Test.Maverick.Helligkeit", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }Dann kann ich nichts steuern. Gesetzte Werte im Alias werden nicht nach COMMANDS geschrieben. Auch direkt in den DP COMMANDS geschriebene Werte kommen nicht im Alias an, aber steuern die Helligkieit und kommen nach ein paar Sekunden in INFO.
Ohne math.Round oder math.Floor klappt es, aber eben mit falschen Werten. Habe ich noch einen Syntax-Fehler beim Runden? Sieht für mich eigentlich richtig aus....
-
@apollon77
Tatsächlich hat der Adapter mit Probleme mit Dezimalwerten: wenn ich in den direkten DP vom Adapter 127.5 schreibe, setzt er die Helligkeit auch auf falsche Werte.
Ich habe den Alias deswegen auf math.Round angepasst, trotzdem kann ich über den Alias nicht die Helligkeit korrekt steuern, sobald ich auf Prozent umrechne. Wenn ich als Wert 0-255 belasse, klappt es einwandfrei.
Zusätzliche Schwierigkeit könnte auch sein, dass die Rückmeldung in INFO bis zu 10 Sekunden nach Setzten des COMMANDS kommt, also nicht wegen Alias, sondern bei dem Adapter an sich. Man kann die Zeit im Adapter zwar auch kürzer einstellen, aber das habe ich aus Erfahrungen der Vergangenheit auf 10s stehen.Wenn ich den DP wie folgt erstellen lasse:
{ "common": { "type": "number", "unit": "%", "alias": { "id": { "read": "fullybrowser.0.10_1_2_103.Info.screenBrightness", "write": "fullybrowser.0.10_1_2_103.Commands.screenBrightness" }, "read": "math.Round(val/2.55)", "write": "math.Round(val*2.55)" }, "name": "screenBrightness", "role": "value" }, "native": {}, "type": "state", "from": "system.adapter.javascript.0", "user": "system.user.admin", "ts": 1671117642794, "_id": "alias.0.0_Test.Maverick.Helligkeit", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }Dann kann ich nichts steuern. Gesetzte Werte im Alias werden nicht nach COMMANDS geschrieben. Auch direkt in den DP COMMANDS geschriebene Werte kommen nicht im Alias an, aber steuern die Helligkieit und kommen nach ein paar Sekunden in INFO.
Ohne math.Round oder math.Floor klappt es, aber eben mit falschen Werten. Habe ich noch einen Syntax-Fehler beim Runden? Sieht für mich eigentlich richtig aus....
@labersack sagte in Javascript 6.1.0 - Neue Funktionen (Beta):
Ich habe den Alias deswegen auf math.Round angepasst, trotzdem kann ich über den Alias nicht die Helligkeit korrekt steuern, sobald ich auf Prozent umrechne. Wenn ich als Wert 0-255 belasse, klappt es einwandfrei.
Und warum nicht?
-
@apollon77
Tatsächlich hat der Adapter mit Probleme mit Dezimalwerten: wenn ich in den direkten DP vom Adapter 127.5 schreibe, setzt er die Helligkeit auch auf falsche Werte.
Ich habe den Alias deswegen auf math.Round angepasst, trotzdem kann ich über den Alias nicht die Helligkeit korrekt steuern, sobald ich auf Prozent umrechne. Wenn ich als Wert 0-255 belasse, klappt es einwandfrei.
Zusätzliche Schwierigkeit könnte auch sein, dass die Rückmeldung in INFO bis zu 10 Sekunden nach Setzten des COMMANDS kommt, also nicht wegen Alias, sondern bei dem Adapter an sich. Man kann die Zeit im Adapter zwar auch kürzer einstellen, aber das habe ich aus Erfahrungen der Vergangenheit auf 10s stehen.Wenn ich den DP wie folgt erstellen lasse:
{ "common": { "type": "number", "unit": "%", "alias": { "id": { "read": "fullybrowser.0.10_1_2_103.Info.screenBrightness", "write": "fullybrowser.0.10_1_2_103.Commands.screenBrightness" }, "read": "math.Round(val/2.55)", "write": "math.Round(val*2.55)" }, "name": "screenBrightness", "role": "value" }, "native": {}, "type": "state", "from": "system.adapter.javascript.0", "user": "system.user.admin", "ts": 1671117642794, "_id": "alias.0.0_Test.Maverick.Helligkeit", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }Dann kann ich nichts steuern. Gesetzte Werte im Alias werden nicht nach COMMANDS geschrieben. Auch direkt in den DP COMMANDS geschriebene Werte kommen nicht im Alias an, aber steuern die Helligkieit und kommen nach ein paar Sekunden in INFO.
Ohne math.Round oder math.Floor klappt es, aber eben mit falschen Werten. Habe ich noch einen Syntax-Fehler beim Runden? Sieht für mich eigentlich richtig aus....
-
@paul53
:man-facepalming:
Au Mann, groß/klein falschrum. Doof Ich.Kaum macht man's richtig, schon funktioniert's.
Danke.Das Problem war also tatsächlich dass der Adapter mit Dezimalzahlen nicht klarkommt, und die Lösung war das Runden auf Ganzzahlen (was auch funktioniert, wenn man Groß-/Kleinschreibung korrekt anwendet).
-
@paul53
:man-facepalming:
Au Mann, groß/klein falschrum. Doof Ich.Kaum macht man's richtig, schon funktioniert's.
Danke.Das Problem war also tatsächlich dass der Adapter mit Dezimalzahlen nicht klarkommt, und die Lösung war das Runden auf Ganzzahlen (was auch funktioniert, wenn man Groß-/Kleinschreibung korrekt anwendet).
@labersack sagte in Javascript 6.1.0 - Neue Funktionen (Beta):
Das Problem war also tatsächlich dass der Adapter mit Dezimalzahlen nicht klarkommt, und die Lösung war das Runden auf Ganzzahlen (was auch funktioniert, wenn man Groß-/Kleinschreibung korrekt anwendet).
Dann gern ein issue anlegen beim Adapter, da kann der Dev was tun