NEWS
Fenster Script: Liste der offenen Fenster
-
funktioniert leider nicht:
javascript.0 2020-03-25 17:27:26.985 error (19305) at processImmediate (timers.js:658:5) javascript.0 2020-03-25 17:27:26.985 error (19305) at tryOnImmediate (timers.js:676:5) javascript.0 2020-03-25 17:27:26.985 error (19305) at runCallback (timers.js:705:18) javascript.0 2020-03-25 17:27:26.985 error (19305) at Immediate.setImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:4851:37) javascript.0 2020-03-25 17:27:26.985 error (19305) at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:439:25) javascript.0 2020-03-25 17:27:26.984 error (19305) at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1101:38) javascript.0 2020-03-25 17:27:26.984 error (19305) at Object.<anonymous> (script.js.common.Sonstiges.Fenster:37:5) javascript.0 2020-03-25 17:27:26.984 error (19305) at countOpenWindowsDoors (script.js.common.Sonstiges.Fenster:13:58) javascript.0 2020-03-25 17:27:26.984 error (19305) Error in callback: TypeError: Cannot read property 'name' of undefined
-
@v522533 sagte:
funktioniert leider nicht:
Sorry, mein Fehler: Klammer falsch gesetzt. Richtig:
listWindows.push(getObject(windows[i]).common.name);
und
listDoors.push(getObject(doors[i]).common.name);
-
jetzt gehts vielen dank. Eine letzte Frage: Ist es möglich aus der erzeugten liste bestimmte Worte auszublenden. Speziell geht es darum, dass die Zigbee Sensoren automatisch zum Datenpunkt immer "is open" dazu schreiben. Das würde ich gerne weg haben.
-
@v522533 sagte:
"is open" dazu schreiben. Das würde ich gerne weg haben.
Die Namen kann man im Tab "Objekte" editieren.
-
@paul53
ja aber jedes mal wenn der wert geändert wird, wird wieder mit "is open" überschrieben -
@v522533 sagte:
jedes mal wenn der wert geändert wird, wird wieder mit "is open" überschrieben
Bei Wertänderung ? Das kann nicht sein.
-
@paul53
doch auf 2 systemen mehrmals versucht. -
@v522533 sagte:
zum Datenpunkt immer "is open" dazu schreiben. Das würde ich gerne weg haben.
Wie sehen die Namen jetzt aus (habe kein Zigbee) ?
-
@paul53
möchtest du mal mit anydesk schauen? -
-
-
@v522533
Ersetze Zeile 13 durchlet id = windows[i].substring(0, windows[i].lastIndexOf('.')); // Device ID listWindows.push(getObject(id).common.name); // Device Name
Analog für die Türen (Zeile 24).
-
geht fast. jetzt is das "is open" weg, allerdings sagt er mir dass mein fenster offen is wenn ich die tür auf mache. funktion ist aber richtig zugeordnet. so sieht mein script jetzut aus:
function countOpenWindowsDoors() { var openWindows = 0; var openDoors = 0; var listWindows = []; var listDoors = []; // Fenster var windows = getObject("enum.functions.windowstatus").common.members; for(let i = 0; i < windows.length; i++) { var Status = getState(windows[i]).val; if ( Status ) { openWindows++; let id = windows[i].substring(0, windows[i].lastIndexOf('.')); // Device ID listWindows.push(getObject(id).common.name); // Device Name } } // Türen var doors = getObject("enum.functions.doorstatus").common.members; for(let i = 0; i < doors.length; i++) { var Status = getState(doors[i]).val; if ( Status ) { openDoors++; let id = windows[i].substring(0, windows[i].lastIndexOf('.')); // Device ID listDoors.push(getObject(id).common.name); // Device Name } } var openWindowsText = "Kein Fenster geöffnet"; var openDoorsText = "Keine Tür geöffnet"; if(listWindows.length) openWindowsText = 'Offene Fenster: ' + listWindows.join(', '); if(listDoors.length) openDoorsText = 'Offene Türen: ' + listDoors.join(', '); setState('javascript.0.StatusWindowOpenText', openWindowsText, true); setState('javascript.0.StatusDoorOpenText', openDoorsText, true); setState('javascript.0.StatusWindowOpen', openWindows, true ); setState('javascript.0.StatusDoorOpen', openDoors, true ); } $('state(functions=windowstatus)').on(function(obj) { countOpenWindowsDoors(); }); $('state(functions=doorstatus)').on(function(obj) { countOpenWindowsDoors(); }); countOpenWindowsDoors();
-
@v522533 sagte:
let id = windows[i].substring(0, windows[i].lastIndexOf('.')); // Device ID
Zeile 24 richtig:
let id = doors[i].substring(0, doors[i].lastIndexOf('.')); // Device ID
-
@paul53
perfekt. vielen vielen dank -
Hi @v522533 und @paul53
Bin zufällig auf diesen Beitrag gestoßen und wollte eben das gleiche machen. Allerdings erhalte ich diesen Fehler. Die Adapter habe ich bereits neu gestartet.javascript.0 2020-03-26 11:17:40.773 info (2684) script.js.Visualisierung.StatusTuerFenster: registered 18 subscriptions and 3 schedules javascript.0 2020-03-26 11:17:40.772 warn (2684) at script.js.Visualisierung.StatusTuerFenster:93:1 javascript.0 2020-03-26 11:17:40.772 warn (2684) at countOpenWindowsDoors (script.js.Visualisierung.StatusTuerFenster:71:5) javascript.0 2020-03-26 11:17:40.772 warn (2684) at setState (C:\Program Files\iobroker\SmartHome\node_modules\iobroker.javascript\lib\sandbox.js:1404:20) javascript.0 2020-03-26 11:17:40.772 warn (2684) State "javascript.0.StatusDoorOpen" not found javascript.0 2020-03-26 11:17:40.772 warn (2684) at script.js.Visualisierung.StatusTuerFenster:93:1 javascript.0 2020-03-26 11:17:40.771 warn (2684) at countOpenWindowsDoors (script.js.Visualisierung.StatusTuerFenster:69:5) javascript.0 2020-03-26 11:17:40.771 warn (2684) at setState (C:\Program Files\iobroker\SmartHome\node_modules\iobroker.javascript\lib\sandbox.js:1404:20) javascript.0 2020-03-26 11:17:40.771 warn (2684) State "javascript.0.StatusWindowOpen" not found javascript.0 2020-03-26 11:17:40.771 warn (2684) at script.js.Visualisierung.StatusTuerFenster:93:1 javascript.0 2020-03-26 11:17:40.771 warn (2684) at countOpenWindowsDoors (script.js.Visualisierung.StatusTuerFenster:67:5) javascript.0 2020-03-26 11:17:40.770 warn (2684) at setState (C:\Program Files\iobroker\SmartHome\node_modules\iobroker.javascript\lib\sandbox.js:1404:20) javascript.0 2020-03-26 11:17:40.770 warn (2684) State "javascript.0.StatusDoorOpenText" not found javascript.0 2020-03-26 11:17:40.770 warn (2684) at script.js.Visualisierung.StatusTuerFenster:93:1 javascript.0 2020-03-26 11:17:40.770 warn (2684) at countOpenWindowsDoors (script.js.Visualisierung.StatusTuerFenster:65:5) javascript.0 2020-03-26 11:17:40.769 warn (2684) at setState (C:\Program Files\iobroker\SmartHome\node_modules\iobroker.javascript\lib\sandbox.js:1404:20) javascript.0 2020-03-26 11:17:40.768 warn (2684) State "javascript.0.StatusWindowOpenText" not found javascript.0 2020-03-26 11:17:40.285 info (2684) Start javascript script.js.Visualisierung.StatusTuerFenster
-
@Hansi1234 sagte:
State "javascript.0.StatusDoorOpen" not found
Sagt das nicht genug aus ?
Wieso hat das Script mind. 93 Zeilen ? -
@paul53
Wenn ich hier einen Code herauskopiere und im Java einfüge, dann füllt er es mit zusätzlichen Zeilen.Ja das mit dem State not found habe ich gesehen. Wieso legt er diese nicht an?
-
die musst du selbst anlegen.
-
Sorry, lange her
Geht nun. Danke dir für die Hilfe.