@paul53 Perfekt, funktioniert.
Das ist für mich eine gute Alternative zu dem Selector $, er bei mir gerade nicht funktioniert.
Welchen Staus soll ich dem Thread jetzt geben? [Gelöst] passt ja nicht so richtig, gibt es im Forum auch den Status [Workaround]
NEWS
Latest posts made by georg.boeser
-
RE: Selector $ geht nicht mehr nach Update von Node.js
-
RE: Selector $ geht nicht mehr nach Update von Node.js
@paul53 Ich geb mich nicht so leicht geschlagen.
Habe in der Doku den Befehl:var obj = getEnums('functions');
gefunden. Über diesen komme ich an alle Kanäle, die den einzelnen Gruppen zugeordnet sind.
log(JSON.stringify(obj)); ergibt z.B.:
[
{
"id":"enum.functions.Licht",
"members":[],
"name":"Licht"
},
{
"id":"enum.functions.Heizung",
"members":[],
"name":"Heizung"
},
{
"id":"enum.functions.Sicherheit",
"members":[],
"name":"Sicherheit"
},
{
"id":"enum.functions.Verschluss",
"members":[
"hm-rpc.1.MEQ1234567.1",
"hm-rpc.1.MEQ2345678.1",
"hm-rpc.1.LEQ0123456.1"],
"name":"Verschluss"
},
]Jetzt verlassen mich meine nicht vorhandenen Java-Kenntnisse.
Wenn ich an alle Member von "Verschluss" herankommen will, muss ich dazu klassisch eine Schleife durchlaufen (das bekomm ich hin) oder gibt es einen cleveren Java-KurzBefehl in der Art:obj[id='enum.functions.Verschluss']
-
RE: Selector $ geht nicht mehr nach Update von Node.js
@paul53 Danke für den Test.
Den Befehl:log(JSON.stringify(obj));
habe ich auch gleich probiert, um zu sehen, was im Objekt so alles drin ist.
Was ich jedoch nicht verstehe, warum darin nicht die Attribute 'deviceName' und 'channelName' aufgelistet werden, die sind doch genauso Attribute des Objekts wie die 'id', welche ausgegeben wird.
-
RE: Selector $ geht nicht mehr nach Update von Node.js
@paul53 danke für den Tipp bzgl. der enumId.
Im Programm sieht es gut aus, es gibt keine Syntaxfehler:
on({id: /\.STATE$/, enumId: 'enum.functions.Verschluss'}, function(obj) { countFenster(obj.id); });
und das Programm reagiert auch auf das Öffnen eines Fensters, aber im Log bekomme ich folgende Meldung:
2019-09-15 15:43:15.443 - error: javascript.0 pmessage io.hm-rpc.1.OEQ1234567.1.STATE {"val":false,"ack":true,"ts":1568554995440,"q":0,"from":"system.adapter.hm-rpc.1","user":"system.user.admin","lc":1567948759703} enumIds.indexOf is not a function
%(#ff0000)[2019-09-15 15:43:15.445 - error: javascript.0 TypeError: enumIds.indexOf is not a function
at getObjectEnumsSync (/opt/iobroker/node_modules/iobroker.javascript/lib/eventObj.js:25:25)
at getObjectEnumsSync (/opt/iobroker/node_modules/iobroker.javascript/lib/eventObj.js:35:24)
at EventObj.get (/opt/iobroker/node_modules/iobroker.javascript/lib/eventObj.js:149:21)
at Array. (/opt/iobroker/node_modules/iobroker.javascript/lib/patternCompareFunctions.js:335:39)
at patternMatching (/opt/iobroker/node_modules/iobroker.javascript/main.js:1140:32)
at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:363:28)
at change (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:3706:37)
at RedisClient. (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:603:25)
at RedisClient.emit (events.js:198:13)
at return_pub_sub (/opt/iobroker/node_modules/redis/index.js:794:18)
at RedisClient.return_reply (/opt/iobroker/node_modules/redis/index.js:833:9)
at JavascriptRedisParser.returnReply (/opt/iobroker/node_modules/redis/index.js:192:18)
at JavascriptRedisParser.execute (/opt/iobroker/node_modules/redis-parser/lib/parser.js:574:12)
at Socket. (/opt/iobroker/node_modules/redis/index.js:274:27)
at Socket.emit (events.js:198:13)
at addChunk (_stream_readable.js:288:12)
at readableAddChunk (_stream_readable.js:269:11)
at Socket.Readable.push (_stream_readable.js:224:10)
at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)]Kommt die Meldung bei dir auch?
-
RE: Selector $ geht nicht mehr nach Update von Node.js
Die Reaktion auf beliebige Änderungen von States funktioniert mit der RegEx aus der Anleitung gut:
on({id: /\.STATE$/}, function(obj) { countFenster(obj); }
Gibt es auch noch die Möglichkeit auf functions="Verschluss" zu begrenzen?
Evtl. mit dem mir noch unbekannten Parameter "enumName"? -
RE: Selector $ geht nicht mehr nach Update von Node.js
@paul53 danke für den Link.
Habe die Anleitung gelesen, war beeindruckt, habe aber nur wenig verstanden.
Die Parameter "id" und "name" sind klar, das entspricht den Spaltenüberschriften bei den Objekten.
Aber worin unterscheiden sich "id", "channelID", deviceID", und "enumID"? -
RE: Selector $ geht nicht mehr nach Update von Node.js
Gibt es irgendwo eine Dokumentation über das Pattern der On/Subscribe-Funktion?
Vielleicht kann ich ja damit das Problem mit dem Selektor umgehen.
-
RE: Selector $ geht nicht mehr nach Update von Node.js
Hat das vielleicht etwas mit dem "iobroker.javascript" GitHub Issue #380 zu tun?
$-selector misses states again -
RE: Selector $ geht nicht mehr nach Update von Node.js
Ich wollte damit auch nicht sagen, dass es ein generelles Problem vom js-controller V1.5.14 ist,
sondern von meiner Installation. Die Installation erfolgt ja manuell. Da kann bei mir durchaus ein Fehler passiert sein.Kann eine fehlerhafte Installation der Grund für einen nicht funktionierenden Selektor sein?
Aber -wie gesagt- alle anderen JavaSkripte funktionieren und im Admin-Bereich wird auch die richtige Version angezeigt.
-
Selector $ geht nicht mehr nach Update von Node.js
Hallo,
Ich hatte bisher das Skript zum Erfassen der geöffneten Fenster problemlos am Laufen.
Aber nach dem Update des js-controller auf V1.5.14 läuft es nicht mehr.
Meiner Meinung nach liegt es am $-Selector, denn der einfache Testcode:$('*.STATE').each(function(id,i) { log(id); });
bringt keine Ausgabe.
Meine erste Maßnahme war der Restart von iobroker und der Restart von hm-rega.1. Es hat aber nichts genützt.
Woran könnte dies liegen. Ist bei der Installation von Node.js etwas schief gelaufen?
Andererseits habe ich viele andere JavaSkripte ohne Probleme am Laufen. Nur eben der Selektor scheint nicht mehr zu funktionieren.