NEWS
Javascript 6.1.0 - Neue Funktionen (Beta)
-
@apollon77 sagte in Javascript 6.1.0 - Neue Funktionen (Beta):
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.
Mhh, sehe ich das nur im Log? Ich spiele darauf an mich z.B. per Telegram benachrichtigen zu lassen. Die States unter
javascript.0.scriptEnabledzu überwachen ist denke ich nicht hilfreich.
Mein Monitoring kann aber auch mit Log-Dateien umgehen - ich bräuchte dafür aber mal eine Beispiel wie so ein Logeintrag aussieht.Ansonsten: Klasse Idee!
@bananajoe ja aktuell nur log. Man könnte theoretisch noch den scriptProblem state Zähler erhöhen.
Zum Beispiel: scroll mal hier im thread hoch. marty56 war reingerannt ;-)
-
@bananajoe ja aktuell nur log. Man könnte theoretisch noch den scriptProblem state Zähler erhöhen.
Zum Beispiel: scroll mal hier im thread hoch. marty56 war reingerannt ;-)
@apollon77 Gefunden. ist dann ein
Error? (Du hats im Eingangspost geschrieben das ein Fehler geloggt wird) -
@apollon77 Gefunden. ist dann ein
Error? (Du hats im Eingangspost geschrieben das ein Fehler geloggt wird)@bananajoe ja. As i remember
-
@bananajoe ja. As i remember
@apollon77 sagte in Javascript 6.1.0 - Neue Funktionen (Beta):
As i remember
geht das bei dir auch schon los? :duckundwech:
-
@apollon77 sagte in Javascript 6.1.0 - Neue Funktionen (Beta):
As i remember
geht das bei dir auch schon los? :duckundwech:
@appollon
Hi,
Da ich immer diese massenhaften Abstürze bei den Aliases habe, möchte ich mein Alias Genierungsscript jetzt auf das offizielle API umstellen.
Leider kappiere ich die Syntax nicht richtig.Alle Beispiele sollen überschreiben eines existierenden Alias enforcen.
Beispiel 1.
Ich möchte z.B. einen Wert invertieren.createAlias('alias.0.Test.test', 'hm-rpc.0.KEQ0172616.1.STATE',true, {alias: { read: '!val'} })wird schon in der Syntax nicht angenommen.
Beispiel 2:
Und ich würde gerne den Typ des Alias ändern.
Use Case. Es wird die Batterie in % gemessen im Original Datenpunkt und es soll ein Alias erzeugt werden, der boolean ausgibt, z.B. "low_bat".Irgendwie so
createAlias('OG_Taster_3_LOWBAT', 'zigbee.0.943469fffe668b6a.battery',true, { name: "Zigbee Taster am Sofa im OG", type: "mixed", unit: "", alias: { read: "val < 20 ? true : false"} })letztlich soll der Alias so aussehen
{ "type": "state", "common": { "name": "Zigbee Taster am Sofa im OG", "type": "mixed", "unit": "", "read": true, "write": false, "role": "value.battery", "min": 0, "max": 100, "icon": "img/battery_p.png", "alias": { "id": "zigbee.0.943469fffe668b6a.battery", "read": "val < 20 ? true : false" } }, "from": "system.adapter.javascript.0", "user": "system.user.admin", "ts": 1667491683697, "_id": "alias.0.OG_Taster_3_LOWBAT", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } } -
@appollon
Hi,
Da ich immer diese massenhaften Abstürze bei den Aliases habe, möchte ich mein Alias Genierungsscript jetzt auf das offizielle API umstellen.
Leider kappiere ich die Syntax nicht richtig.Alle Beispiele sollen überschreiben eines existierenden Alias enforcen.
Beispiel 1.
Ich möchte z.B. einen Wert invertieren.createAlias('alias.0.Test.test', 'hm-rpc.0.KEQ0172616.1.STATE',true, {alias: { read: '!val'} })wird schon in der Syntax nicht angenommen.
Beispiel 2:
Und ich würde gerne den Typ des Alias ändern.
Use Case. Es wird die Batterie in % gemessen im Original Datenpunkt und es soll ein Alias erzeugt werden, der boolean ausgibt, z.B. "low_bat".Irgendwie so
createAlias('OG_Taster_3_LOWBAT', 'zigbee.0.943469fffe668b6a.battery',true, { name: "Zigbee Taster am Sofa im OG", type: "mixed", unit: "", alias: { read: "val < 20 ? true : false"} })letztlich soll der Alias so aussehen
{ "type": "state", "common": { "name": "Zigbee Taster am Sofa im OG", "type": "mixed", "unit": "", "read": true, "write": false, "role": "value.battery", "min": 0, "max": 100, "icon": "img/battery_p.png", "alias": { "id": "zigbee.0.943469fffe668b6a.battery", "read": "val < 20 ? true : false" } }, "from": "system.adapter.javascript.0", "user": "system.user.admin", "ts": 1667491683697, "_id": "alias.0.OG_Taster_3_LOWBAT", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }@marty56 Ok, da muss ggf Doku erweitert werden.
Die Alias Definition ist immer der ZWEITE parameter.
Also "nur ne ID" wird zu {alias: {id: aliasId}} im common.
Wenn Du an der Alias definition rumschrauben willst dann musst du das als zweiten Parameter angeben, also in deinem Fall
createAlias('alias.0.Test.test', {id:'hm-rpc.0.KEQ0172616.1.STATE', read:'!val'},true,bzw im zweiten Fall:
createAlias('alias.0.Test.geraet_low_bat', {id: 'zigbee.0.00158d0002a1a494.battery',read: "val < 20 ? true : false" },true, { type: "mixed", unit: "%", })PS: ich hab es innden javascript docs noch erwähnt, wobei da schon stand:
alias: can be either an existing state id as string or a object with full alias definition including read/write ids and read/write functions.
Jetzt ist noch ein "Not: Alias definitions can not be set as part of the common parameter!" dazugekommen.
-
@marty56 Ok, da muss ggf Doku erweitert werden.
Die Alias Definition ist immer der ZWEITE parameter.
Also "nur ne ID" wird zu {alias: {id: aliasId}} im common.
Wenn Du an der Alias definition rumschrauben willst dann musst du das als zweiten Parameter angeben, also in deinem Fall
createAlias('alias.0.Test.test', {id:'hm-rpc.0.KEQ0172616.1.STATE', read:'!val'},true,bzw im zweiten Fall:
createAlias('alias.0.Test.geraet_low_bat', {id: 'zigbee.0.00158d0002a1a494.battery',read: "val < 20 ? true : false" },true, { type: "mixed", unit: "%", })PS: ich hab es innden javascript docs noch erwähnt, wobei da schon stand:
alias: can be either an existing state id as string or a object with full alias definition including read/write ids and read/write functions.
Jetzt ist noch ein "Not: Alias definitions can not be set as part of the common parameter!" dazugekommen.
@apollon77 Danke für die Erklärungen.
Ich habe jetzt all meine Aliases auf das neue API umgestellt, alle alten Aliases gelöscht und dann wieder neu generiert.
Leider ist dieser allgemeine, sporadische Alias Error immer noch da. Schade.
2022-11-05 07:19:34.891 - error: admin.0 (516) Alias subscription error. Please check your alias definitions: sourceId=zigbee.0.00158d0003e57190.transition_time, sourceObj={"type":"state","common":{"name":"Transition time","type":"number","unit":"sec","read":false,"write":true,"role":"state"},"native":{},"from":"system.adapter.zigbee.0","user":"system.user.admin","ts":1653374903543,"_id":"zigbee.0.00158d0003e57190.transition_time","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}} 2022-11-05 07:19:34.891 - error: admin.0 (516) Alias subscription error. Please check your alias definitions: sourceId=zigbee.0.00158d0003e57190.available, sourceObj={"type":"state","common":{"name":"Available","type":"boolean","read":true,"write":false,"role":"state"},"native":{},"from":"system.adapter.zigbee.0","user":"system.user.admin","ts":1653374903521,"_id":"zigbee.0.00158d0003e57190.available","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}} -
@apollon77 Danke für die Erklärungen.
Ich habe jetzt all meine Aliases auf das neue API umgestellt, alle alten Aliases gelöscht und dann wieder neu generiert.
Leider ist dieser allgemeine, sporadische Alias Error immer noch da. Schade.
2022-11-05 07:19:34.891 - error: admin.0 (516) Alias subscription error. Please check your alias definitions: sourceId=zigbee.0.00158d0003e57190.transition_time, sourceObj={"type":"state","common":{"name":"Transition time","type":"number","unit":"sec","read":false,"write":true,"role":"state"},"native":{},"from":"system.adapter.zigbee.0","user":"system.user.admin","ts":1653374903543,"_id":"zigbee.0.00158d0003e57190.transition_time","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}} 2022-11-05 07:19:34.891 - error: admin.0 (516) Alias subscription error. Please check your alias definitions: sourceId=zigbee.0.00158d0003e57190.available, sourceObj={"type":"state","common":{"name":"Available","type":"boolean","read":true,"write":false,"role":"state"},"native":{},"from":"system.adapter.zigbee.0","user":"system.user.admin","ts":1653374903521,"_id":"zigbee.0.00158d0003e57190.available","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}} -
@marty56 Am Ende wegen dem Fehler wieder die Frage: Kannst du klar reprduzieren wann und warum es kommt?
@apollon77
Ich habe nochmal ein bisschen geforscht.Ich habe 380 Aliases. Davon sind 308 direkt unter alias.0.
Die anderen 80 sind in Unterverzeichnissen.
Alle Aliases, die in Unterverzeichnissen gespeichert sind, kommen in den Error Logs nicht vor, die anderen 308 werden alle als Error geloggt.Vielleicht hängt es mit der Menge der Aliases zusammen, die unter einem Verzeichnis gespeichert werden können.
-
@apollon77
Ich habe nochmal ein bisschen geforscht.Ich habe 380 Aliases. Davon sind 308 direkt unter alias.0.
Die anderen 80 sind in Unterverzeichnissen.
Alle Aliases, die in Unterverzeichnissen gespeichert sind, kommen in den Error Logs nicht vor, die anderen 308 werden alle als Error geloggt.Vielleicht hängt es mit der Menge der Aliases zusammen, die unter einem Verzeichnis gespeichert werden können.
-
@marty56 Menge sollte nicht ... Auch die Lokation sollte an sich egal sein ... und mit nem adapterstart von dem Adapter der meckert ists wider weg für ne weile, korrekt?
Es kommt bei mir unregelmäßig, so ca. 1 -2 pro Tag.
Ich kann es nicht mit einem Adapterstart in Zusammenhang bringen. -
@marty56 Menge sollte nicht ... Auch die Lokation sollte an sich egal sein ... und mit nem adapterstart von dem Adapter der meckert ists wider weg für ne weile, korrekt?
@apollon77, ich hänge mich hier mal mit dran, da das 'Problem' (hat bisher keinen Einfluss auf irgendwelche Funktionalitäten), bei mir auch auftritt:
Fehlermeldung, z. B.:Alias subscription error. Please check your alias definitions: sourceId=deconz.0.Lights.58.on, sourceObj={"type":"state","common":{"name":"BlitzPlug05 AL on","type":"boolean","role":"switch","read":true,"write":true},"native":{},"from":"system.adapter.deconz.0","user":"system.user.admin","ts":1653067264363,"_id":"deconz.0.Lights.58.on","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}}}oder auch:
Alias subscription error. Please check your alias definitions: sourceId=deconz.0.Sensors.87.consumption, sourceObj={"type":"state","common":{"name":"Consumption 87 consumption","type":"number","role":"value.power.consumption","read":true,"write":false,"unit":"Wh","def":0},"native":{},"from":"system.adapter.deconz.0","user":"system.user.admin","ts":1653210287074,"_id":"deconz.0.Sensors.87.consumption","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}}Ich habe zwar (noch) nicht so viele Aliase, aber auch eine eigene Struktur in den Aliasen angelegt, da ich da sonst nichts wiederfinde ;-)
Also neben:
alias.0.[Ein Alias]auch so etwas wie:
alias.Licht.[[verschiedene Aliase]
alias.Remote.[versch. Aliase)
alias.Schalt.[versch. Aliase]
usw.Ich stelle die Fehlermeldungen meist fest, wenn ich irgendwas an meinen Blocklys editiert habe, oder aber auch, wie gerade eben, wenn ich ein paar überflüssig gewordene Variablen gelöscht habe (Umzug von javascript.0.[ordner].[irgendwas] nach '0_userdata.0.[ordner].[irgendwas]).
Allerdings hatten diese Änderungen rein gar nichts mit den im Log angezeigten Alias-Fehlermeldungen zu tun.Ohne jegliches Zutun scheinen die Meldungen nicht zu kommen, zumindest habe ich das bisher bei sporadischen Blicken aufs Log nicht feststellen können.
Ein Gedanke: Müsste ich meine Aliasstruktur evtl. eine Ebene tiefer hängen? - also immer zusätzlich noch ein '.0.' einschieben?
-
@apollon77, ich hänge mich hier mal mit dran, da das 'Problem' (hat bisher keinen Einfluss auf irgendwelche Funktionalitäten), bei mir auch auftritt:
Fehlermeldung, z. B.:Alias subscription error. Please check your alias definitions: sourceId=deconz.0.Lights.58.on, sourceObj={"type":"state","common":{"name":"BlitzPlug05 AL on","type":"boolean","role":"switch","read":true,"write":true},"native":{},"from":"system.adapter.deconz.0","user":"system.user.admin","ts":1653067264363,"_id":"deconz.0.Lights.58.on","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}}}oder auch:
Alias subscription error. Please check your alias definitions: sourceId=deconz.0.Sensors.87.consumption, sourceObj={"type":"state","common":{"name":"Consumption 87 consumption","type":"number","role":"value.power.consumption","read":true,"write":false,"unit":"Wh","def":0},"native":{},"from":"system.adapter.deconz.0","user":"system.user.admin","ts":1653210287074,"_id":"deconz.0.Sensors.87.consumption","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}}Ich habe zwar (noch) nicht so viele Aliase, aber auch eine eigene Struktur in den Aliasen angelegt, da ich da sonst nichts wiederfinde ;-)
Also neben:
alias.0.[Ein Alias]auch so etwas wie:
alias.Licht.[[verschiedene Aliase]
alias.Remote.[versch. Aliase)
alias.Schalt.[versch. Aliase]
usw.Ich stelle die Fehlermeldungen meist fest, wenn ich irgendwas an meinen Blocklys editiert habe, oder aber auch, wie gerade eben, wenn ich ein paar überflüssig gewordene Variablen gelöscht habe (Umzug von javascript.0.[ordner].[irgendwas] nach '0_userdata.0.[ordner].[irgendwas]).
Allerdings hatten diese Änderungen rein gar nichts mit den im Log angezeigten Alias-Fehlermeldungen zu tun.Ohne jegliches Zutun scheinen die Meldungen nicht zu kommen, zumindest habe ich das bisher bei sporadischen Blicken aufs Log nicht feststellen können.
Ein Gedanke: Müsste ich meine Aliasstruktur evtl. eine Ebene tiefer hängen? - also immer zusätzlich noch ein '.0.' einschieben?
@pedder007 sagte: alias.Licht.[[verschiedene Aliase]
Alle Alias-Objekte müssen unter "alias.0" erstellt werden. Im Tab "Objekte" geht es auch nicht anders. Wie hast Du sie erstellt?
-
@pedder007 sagte: alias.Licht.[[verschiedene Aliase]
Alle Alias-Objekte müssen unter "alias.0" erstellt werden. Im Tab "Objekte" geht es auch nicht anders. Wie hast Du sie erstellt?
@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: alias.Licht.[[verschiedene Aliase]
Alle Alias-Objekte müssen unter "alias.0" erstellt werden. Im Tab "Objekte" geht es auch nicht anders. Wie hast Du sie erstellt?
-
@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" }