NEWS
Fenster Script: Liste der offenen Fenster
-
Hallo zusammen,
ich bräuchte mal ein wenig Hilfe: Ich habe folgendes Script von smarthome-tricks.de benutzt, um mir meine offenen Fenster anzuzeigen. Leider zeigt es nur die Anzahl an, ich brauche aber eine Auflistung, welche Fenster offen sind. Kann mir jemand kurz behilflich sein, da mein Javascriptwissen leider nicht sehr gut ist.
function countOpenWindowsDoors() { var openWindows = 0; var openDoors = 0; // 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 = openWindows + 1; } } // 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 = openDoors + 1; } } var openWindowsText = "Kein Fenster geöffnet"; var openDoorText = "Keine Tür geöffnet"; if ( openWindows > 0 ) { openWindowsText = openWindows + " Fenster geöffnet"; } if ( openDoors > 0 ) { openDoorText = openDoors + " Türe(n) geöffnet"; } setState('Datenpunkte.0.StatusWindowOpenText', openWindowsText ); setState('Datenpunkte.0.StatusDoorOpenText', openDoorText ); setState('Datenpunkte.0.StatusWindowOpen', openWindows, true ); setState('Datenpunkte.0.StatusDoorOpen', openDoors, true ); } function registerSubscription() { $('state(functions=windowstatus)').on(function(obj) { countOpenWindowsDoors(); }); $('state(functions=doorstatus)').on(function(obj) { countOpenWindowsDoors(); }); } registerSubscription(); countOpenWindowsDoors();
Danke schonmal.
-
niemand?
-
@v522533
Das Thema hatten wir hier doch schon.
Bitte benutz die Suchfunktion -
habe ich schon getan, habe leider nichts gefunden, zumindest nichts was mir weiter hilft. habe auch gestern schon den ganzen abend verdaddelt und selber rumprobiert mit common.name usw.
-
-
@v522533 sagte:
Auflistung, welche Fenster offen sind.
Versuche es mal so:
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++; listWindows.push(getObject(windows[i]).common.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++; listDoors.push(getObject(doors[i]).common.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('Datenpunkte.0.StatusWindowOpenText', openWindowsText, true); setState('Datenpunkte.0.StatusDoorOpenText', openDoorsText, true); setState('Datenpunkte.0.StatusWindowOpen', openWindows, true ); setState('Datenpunkte.0.StatusDoorOpen', openDoors, true ); } $('state(functions=windowstatus)').on(function(obj) { countOpenWindowsDoors(); }); $('state(functions=doorstatus)').on(function(obj) { countOpenWindowsDoors(); }); countOpenWindowsDoors();
-
danke wird heute abend direkt getestet
-
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();