NEWS
[gelöst] Überwachung Fensterkontakte (zigbee) per Javascript 4.0.5 funktioniert nicht mehr
-
Habe das selbe Problem kann keine zigbee Hardware ueber enum Funktionen einsammeln… Die selektor funktion funktioniert nicht... Warum weiß ich nicht... Habe alles ausprobiert.. STATE channel Gewerke usw.. Alle restliche Hardware und angelegte states kein Problem... Dazu habe ich auch in 2 weiteren Diskussionen was geschrieben...
Gesendet von meinem CLT-L09 mit Tapatalk
-
Ja, das kann ich bestätigen. Ich habe im Skript Textausgaben eingebaut. Es hängt wirklich daran, das die Liste unter enum.functions.sensors nicht mehr funktioniert. Deshalb kommt er im Skript nicht weiter. Hast Du da letzte Javascript Update eingespielt? Es gab auch ein ioBroker Update, was ich eingespielt habe.
Welche Versionen hast Du in beiden Fällen?
-
{ "_id": "enum.functions.sensors", "common": { "name": { "en": "sensors", "de": "Sensoren" }, "members": [ "zigbee.0.00158d000232c0b0", "zigbee.0.00158d000232c10f", "zigbee.0.00158d000232c17f", "zigbee.0.00158d000232c18e", "zigbee.0.00158d000232c1ac", "zigbee.0.00158d000232c51a", "zigbee.0.00158d000232cb9f", "zigbee.0.00158d000232dcbb", "zigbee.0.00158d000232dd62", "zigbee.0.00158d00023870bf", "zigbee.0.00158d0002387310", "zigbee.0.00158d00024354f0", "zigbee.0.00158d0002436400", "zigbee.0.00158d000243640f" ], "icon": "", "color": false }, "type": "enum", "from": "system.adapter.admin.0", "user": "system.user.admin", "ts": 1537111456954, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" }, "native": {} }
Ich habe die Liste mal neu aufgebaut, aber immer noch das selbe Problem. Weiss jemand welches Update damit zu tun haben könnte? Bzw. was da im Moment broken ist.
Ich habe:
Typ: js-controller
Titel: JS controller
OS: linux
Verfügbar: 1.4.2
Eingerichtet: 1.5.3
Und den Javascript Adapter 4.0.5
-
Bin gerade unterwegs und kann nicht schauen… Mein repo ist allerdings auf latest eingestellt.. Bin mit allen Adaptern aktuell... Kann heute mittag mal genauer schauen
Gesendet von meinem CLT-L09 mit Tapatalk
-
Das mit latest ist bei mir auch.
-
Node.js: v8.14.0
NPM: 6.4.1
Zigbee 0.8.0
Admin 3.5.10
javascript 4.0.5
all das habe ich ausprobiert.. sobald .state oder die functions dazu kommen geht nix…
var cacheSelector = $('stateid=zigbee.0.*');
var cacheSelector = $('stateid=zigbee.0.*.state');
var cacheSelector = $('stateid=*.state');
var cacheSelector = $('stateid=zigbee.0.zigbee.0.84182600000b343c.state');
var cacheSelector = $('statestate.id=zigbee.0.*.state');
funtkionieren tut nur das
var cacheSelector = $('state[id=zigbee.0.*]');
-
Hier steht auch was zu dem Thema…
Wurde ein issue auf github angelegt...
viewtopic.php?f=21&t=16224&p=203966#p203966
vestehe nur nicht warum das am javascript Adapter liegen soll, wenn es nur mit zigbee Geräten nicht geht...
-
Es hängt wirklich daran, das die Liste unter enum.functions.sensors nicht mehr funktioniert. `
Wie sieht die Liste aus ?const sensor = getObject('enum.functions.sensors').common.members; log(JSON.stringify(sensor));
-
sobald .state oder die functions dazu kommen geht nix… `
Wie sieht das Objekt "enum.functions.Steckdose" aus (RAW-Ansicht) ? -
Es hängt wirklich daran, das die Liste unter enum.functions.sensors nicht mehr funktioniert. `
Wie sieht die Liste aus ?const sensor = getObject('enum.functions.sensors').common.members; log(JSON.stringify(sensor)); ```` `
javascript.0 script.js.Skriptsammlung.Test_enumsensors: ["zigbee.0.00158d000232c0b0","zigbee.0.00158d000232c10f","zigbee.0.00158d000232c17f","zigbee.0.00158d000232c18e","zigbee.0.00158d000232c1ac","zigbee.0.00158d000232c51a","zigbee.0.00158d000232cb9f","zigbee.0.00158d000232dcbb","zigbee.0.00158d000232dd62","zigbee.0.00158d00023870bf","zigbee.0.00158d0002387310","zigbee.0.00158d00024354f0","zigbee.0.00158d0002436400","zigbee.0.00158d000243640f"]
-
Das Array mit den Zigbee-Geräten wir geliefert. Dann muss auch die Schleife funktionieren:
`const sensor = getObject('enum.functions.sensors').common.members; for(let i = 0; i < sensor.length; i++) { log(sensor[i]); }`[/i]
-
Stimmt, ist auch so:
14.12.2018, 15:42:30.367 [info ]: javascript.0 Start javascript script.js.Skriptsammlung.Test_enumsensors2 14.12.2018, 15:42:30.369 [info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d000232c0b0 14.12.2018, 15:42:30.369 [info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d000232c10f 14.12.2018, 15:42:30.369 [info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d000232c17f 14.12.2018, 15:42:30.369 [info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d000232c18e 14.12.2018, 15:42:30.369 [info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d000232c1ac 14.12.2018, 15:42:30.369 [info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d000232c51a 14.12.2018, 15:42:30.369 [info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d000232cb9f 14.12.2018, 15:42:30.370 [info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d000232dcbb 14.12.2018, 15:42:30.370 [info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d000232dd62 14.12.2018, 15:42:30.370 [info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d00023870bf 14.12.2018, 15:42:30.370 [info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d0002387310 14.12.2018, 15:42:30.371 [info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d00024354f0 14.12.2018, 15:42:30.371 [info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d0002436400 14.12.2018, 15:42:30.371 [info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: zigbee.0.00158d000243640f 14.12.2018, 15:42:30.371 [info ]: javascript.0 script.js.Skriptsammlung.Test_enumsensors2: registered 0 subscriptions and 0 schedules
Dann muss das Problem erst später auftreten, richtig!
-
Dann muss das Problem erst später auftreten, richtig! `
Ja, den Selector kann ich nicht nachvollziehen. Außerdem - wenn der Selector funktionieren würde - wird eine Trigger auf jeden Datenpunkt der Zigbee-Geräte aus dem Array gebildet. Viele sind aber unnötig und erhöhen nur die Systemlast. Ich würde nur auf die Datenpunkte triggern, die relevant sind.`const sensor = getObject('enum.functions.sensors').common.members; for(let i = 0; i < sensor.length; i++) { var name = getObject(sensor[i]).common.name; on(sensor[i] + '.voltage', function (dp) { if(dp.state.val <= 2.8) { sendTo('telegram.0', { text: 'Die Batterie vom Sensor ' + name + ' neigt sich dem Ende zu. Die aktuelle Spannung beträgt ' + dp.state.val + ' V.' }); } }); on(sensor[i] + '.battery', function(dp) { // ...usw.` Es ist ohnehin besser, die Datenpunkt-ID als Selektionskriterium zu verwenden, da der Name beliebig geändert werden kann.[/i][/i][/i]
-
Node.js: v8.14.0
NPM: 6.4.1
Zigbee 0.8.0
Admin 3.5.10
javascript 4.0.5 `
Ich habe:
Node.js: v6.14.4
NPM: 3.10.10
Zigbee 0.8.0
Admin 3.5.10
javascript 4.0.5
Ich habe eine ältere Node.js und NPM Version. Ich nutze den buanet docker container auf der synology.
-
sobald .state oder die functions dazu kommen geht nix…
Wie sieht das Objekt "enum.functions.Steckdose" aus (RAW-Ansicht) ?
geht um das zählen script… siehe cahceselektor unten...Alle gehen bis auf die fürs Zigbee nicht...
diese funktionieren ja auch...die states sehen nicht anders aus...
var cacheSelectorPOWER1 = $('state[state.id=*.POWER1](functions="Steckdose")'); var cacheSelectorPOWER2 = $('state[state.id=*.POWER2](functions="Steckdose")'); var cacheSelectorPOWER3 = $('state[state.id=*.POWER3](functions="Steckdose")'); var cacheSelectorPOWER4 = $('state[state.id=*.POWER4](functions="Steckdose")'); //var cacheSelectorPOWER = $('state[state.id=*.POWER](functions="Steckdose")'); var cacheSelectorState = $('state[state.id=*.STATE](functions="Steckdose")');
objekt siehe Foto…
Habe schon etliche varianten durch...
all das habe ich ausprobiert..
var cacheSelector = $('stateid=zigbee.0.*');
var cacheSelector = $('stateid=zigbee.0.*.state');
var cacheSelector = $('stateid=*.state');
var cacheSelector = $('stateid=zigbee.0.zigbee.0.84182600000b343c.state');
var cacheSelector = $('statestate.id=zigbee.0.*.state');
var logging = true; var idAnzahlEin = 'javascript.0.Status.Steckdosen.Anzahl_ein', idAnzahl = 'javascript.0.Status.Steckdosen.Anzahl', idText = 'javascript.0.Status.Steckdosen.Text', idAnsage = 'javascript.0.Status.Steckdosen.Ansage'; // Ab hier nix mehr ändern createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Steckdosen type: 'number', name: 'Anzahl aller Steckdosen', min: 0, def: 0, role: 'value' }); createState(idAnzahlEin, { // Anzahl der Steckdosen, die auf sind als Variable unter Javascript.0 anlegen type: 'number', name: 'Anzahl der eingeschalteten Steckdosen', min: 0, def: 0, role: 'value' }); createState(idText, { // Anzahl der brennenden Steckdosen und deren Namen als Variable unter Javascript.0 anlegen type: 'string', name: 'Eingeschaltete Steckdosen', desc: 'Namen der eingeschalteten Steckdosen', def: ' ', role: 'value' }); createState(idAnsage, { type: 'string', name: 'Eingeschaltete Steckdosen (Ansage)', desc: 'Namen der eingeschalteten Steckdosen (für Ansage aufbereitet)', def: ' ', role: 'value' }); var cacheSelectorPOWER1 = $('state[state.id=*.POWER1](functions="Steckdose")'); var cacheSelectorPOWER2 = $('state[state.id=*.POWER2](functions="Steckdose")'); var cacheSelectorPOWER3 = $('state[state.id=*.POWER3](functions="Steckdose")'); var cacheSelectorPOWER4 = $('state[state.id=*.POWER4](functions="Steckdose")'); //var cacheSelectorPOWER = $('state[state.id=*.POWER](functions="Steckdose")'); var cacheSelectorState = $('state[state.id=*.STATE](functions="Steckdose")'); var cacheSelector = $('state[state.id=*.state](functions="Steckdose")'); function checkDevices(obj) { // Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk Steckdose auf 0 var anzahlSteckdosenAn = 0; var anzahlSteckdosen = 0; var textSteckdosenAn = []; //****************************************************** cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Steckdose var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element) var devicename = name.substring(0); //.state aus Text entfernen if (status) { // wenn Zustand = true, dann wird die ANzahl der Steckdosen hochgezählt ++anzahlSteckdosenAn; textSteckdosenAn.push(devicename); // Zu Array hinzufügen } ++anzahlSteckdosen; // Zählt die Anzahl der vorhandenen Steckdosen unabhängig vom Status // } // ENDE VK-Abfrage }); //****************************************************** cacheSelector.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE im Gewerk Steckdose var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element) var devicename = name.substring(0); //.state aus Text entfernen if (status) { // wenn Zustand = true, dann wird die ANzahl der Steckdosen hochgezählt ++anzahlSteckdosenAn; textSteckdosenAn.push(devicename); // Zu Array hinzufügen } ++anzahlSteckdosen; // Zählt die Anzahl der vorhandenen Steckdosen unabhängig vom Status // } // ENDE VK-Abfrage }); //****************************************************************** */ /* cacheSelectorPOWER.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Steckdose var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element) var devicename = name.substring(0, name.indexOf(".POWER")); //.state aus Text entfernen if (status) { // Wenn Dimmwert über 0 ++anzahlSteckdosenAn; textSteckdosenAn.push(devicename); // Zu Array hinzufügen } ++anzahlSteckdosen; // Zählt die Anzahl der vorhandenen Steckdosen unabhängig vom Status // } // Ende Abfrage VK }); */ //*************************************************** cacheSelectorPOWER1.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER im Gewerk Steckdose var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element) var devicename = name.substring(0); //.state aus Text entfernen if (status) { // wenn Zustand = true, dann wird die ANzahl der Steckdosen hochgezählt ++anzahlSteckdosenAn; textSteckdosenAn.push(devicename); // Zu Array hinzufügen } ++anzahlSteckdosen; // Zählt die Anzahl der vorhandenen Steckdosen unabhängig vom Status // } // ENDE VK-Abfrage }); cacheSelectorPOWER2.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER1 im Gewerk Steckdose var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element) var devicename = name.substring(0); //.state aus Text entfernen if (status) { // wenn Zustand = true, dann wird die ANzahl der Steckdosen hochgezählt ++anzahlSteckdosenAn; textSteckdosenAn.push(devicename); // Zu Array hinzufügen } ++anzahlSteckdosen; // Zählt die Anzahl der vorhandenen Steckdosen unabhängig vom Status // } // ENDE VK-Abfrage }); cacheSelectorPOWER3.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER1 im Gewerk Steckdose var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element) var devicename = name.substring(0); //.state aus Text entfernen if (status) { // wenn Zustand = true, dann wird die ANzahl der Steckdosen hochgezählt ++anzahlSteckdosenAn; textSteckdosenAn.push(devicename); // Zu Array hinzufügen } ++anzahlSteckdosen; // Zählt die Anzahl der vorhandenen Steckdosen unabhängig vom Status // } // ENDE VK-Abfrage }); cacheSelectorPOWER4.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER1 im Gewerk Steckdose var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element) var devicename = name.substring(0); //.state aus Text entfernen if (status) { // wenn Zustand = true, dann wird die ANzahl der Steckdosen hochgezählt ++anzahlSteckdosenAn; textSteckdosenAn.push(devicename); // Zu Array hinzufügen } ++anzahlSteckdosen; // Zählt die Anzahl der vorhandenen Steckdosen unabhängig vom Status // } // ENDE VK-Abfrage }); // Array mit Steckdosennamen sortieren textSteckdosenAn.sort(); // Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben if (logging) log("Text: " + textSteckdosenAn); if (logging) log("Anzahl Steckdosen: " + anzahlSteckdosen + " davon Steckdosen an: " + anzahlSteckdosenAn); // die ermittelten Werte werden als javascript.0\. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS) setState(idText, textSteckdosenAn.join(', ')); // Schreibt die aktuelle Namen der eingeschalteten Steckdosen setState(idAnzahlEin, textSteckdosenAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Steckdosen setState(idAnzahl, anzahlSteckdosen); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Steckdose } // Trigger cacheSelectorState.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Steckdose if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat checkDevices(); }); /* cacheSelectorPOWER.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk Steckdose if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat checkDevices(); }); */ cacheSelectorPOWER1.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Steckdose if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat checkDevices(); }); cacheSelectorPOWER2.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Steckdose if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat checkDevices(); }); cacheSelectorPOWER3.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Steckdose if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat checkDevices(); }); cacheSelectorPOWER4.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Steckdose if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat checkDevices(); }); cacheSelector.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk Steckdose if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat checkDevices(); }); function main() { setTimeout(function(){ if (logging) log('Auslöser Skriptstart'); checkDevices(); }, 2000); } main(); // Skriptstart-Auslöser // Aufbereitung für Ansage function strip_tags(data) { var rueckgabe = data.replace(/( |<([^>]+)>)|(_)|(0)|(:)/ig, " "); return(rueckgabe); } on(idText, function (obj) { var text = obj.state.val; text = (getState(idAnzahl).val > 0 ) ? '' + strip_tags(text) : ' Alle Steckdosen sind ausgeschaltet '; setState(idAnsage, text); });
-
objekt siehe Foto… `
Du hast "Steckdose" dem Gerät zugeordnet. Da Zigbee-Geräte keine Kanäle haben, https://forum.iobroker.net/viewtopic.php?f=21&t=16564&p=174031#p174031.Wenn Du "Steckdose" den betreffenden Datenpunkten zuordnest, wird der Selektor funktionieren (alle Versionen). Vorzugsweise:
var cacheSelector = $('state[id=zigbee.0.*.state](functions="Steckdose")');
-
javascript 4.0.5 `
In dieser Version wurde gegenüber der Version 3.6.4 einiges geändert. Vielleicht funktioniert jetztvar cacheSelector = $('device[state.id=*.state](functions="Steckdose")');
, wenn das Gewerk dem Gerät zugeordnet ist ?
-
javascript 4.0.5 `
In dieser Version wurde gegenüber der Version 3.6.4 einiges geändert. Vielleicht funktioniert jetztvar cacheSelector = $('device[state.id=*.state](functions="Steckdose")');
, wenn das Gewerk dem Gerät zugeordnet ist ? `
Hallo Paul, danke für deine Unterstützung…
Habe ich auch ausprobiert...funktioniert auch nicht...
beide Varianten nicht...
vermute eher das irgendwas mit den zigbee states nicht stimmt... Habe die aber schon gelöscht und wieder angelegt...
Habe 12 verschiedene Scripte um mittels Selektor infos zu visualiieren...funktionieren alle! Ausser die welche ich nun für meine neue Zigbe Hardware anlegen wollte, bzw. diese Geräte integrieren wollte...
-
Habe auf Version 4.0.5 hochgezogen und getestet (Gewerk "batterie" zwei Geräten zugeordnet).
$('device[state.id=*.state](functions=batterie)');
funktioniert nicht.
const rm = $('*.state(functions=batterie)'); rm.each(function(id, i) { log(id); });
funktioniert erst nach Neustart (Javascript / ioBroker).
19:50:11.243 info javascript.1 script.js.common.Test3: zigbee.0.002.state 19:50:11.243 info javascript.1 script.js.common.Test3: zigbee.0.003.state
-
Hallo Paul,
erstmal vielen Dank für deine Hilfe. Bei mir funktioniert der obere Teil noch nicht so ganz. Ist da ein Fehler im Javascript 4.0.5 Adapter?
Dann sollte man doch den Fehler melden, oder?
Folgendes Skript führe ich auf Anforderung aus:
`const sensor = getObject('enum.functions.sensors').common.members; sendTo('telegram.0', { text: 'BlaBla' }); for(let i = 0; i < sensor.length; i++) { var name = getObject(sensor[i]).common.name; on(sensor[i] + '.voltage', function (dp) { if(dp.state.val <= 4.8) { sendTo('telegram.0', { text: 'Die Batterie vom Sensor ' + name + ' neigt sich dem Ende zu. Die aktuelle Spannung beträgt ' + dp.state.val + ' V.' }); } }); }` Effekt: BlaBla schreibt er noch, aber bzgl. des Batterie-Anzeige wird nichts generiert. Ich habe mal den Value auf 4.8 hochgesetzt. Das sollte bei allen meinen Zigbee-Devices gelten, aber nichts passiert. Kann man vielleicht nur den Javascript-Adapter auf die ältere Version downgraden, ohne Probleme zu erwarten? Zumindestens bis das Problem behoben ist?[/i][/i]