Das Skript läuft jetzt bei mir mit drei Räumen.
Ich habe die val variable global gemacht, für jeden Raum einen Selector eingesetzt und drei on Funktion hinzugefügt.
// Script zum Setzen einer Variablen, um z.B. eine kleines Übersichts-Icon/Widget // anzuzeigen. // Die Variable VIS.zeige_1og_fensterstatus_icon kann folgende Werte haben: // 0 - alle Fenster zu // 1 - mindestens 1 Fenster angekippt // 2 - mindestens 1 Fenster offen. // Es wird immer der höhere Wert über allen räumen gesetzt. // Im Widget muss unter der Sichtbarkeit die Variable > 0 abgefragt werden. // Es werden die Sensoren in drei Räumen abgefragt(rooms=xxx), so wie diese gesetzt sind und jweils mit // dem Gewerk (functions=xxx). var sensors_raum1 = $('channel[state.id=*.STATE](rooms=Bad)(functions=Alarmanlage)').each(function(id) { log("R1: " + id); }); var sensors_raum2 = $('channel[state.id=*.STATE](rooms=Wohnen1)(functions=Alarmanlage)').each(function(id) { log("R2: " + id); }); var sensors_raum3 = $('channel[state.id=*.STATE](rooms=Wohnen2)(functions=Alarmanlage)').each(function(id) { log("R3: " + id); }); var val; // Ohne Loginfo jedes erkannte Geräte: //var sensors = $('channel[state.id=*.STATE](rooms=Wohnen1)(functions=Alarmanlage)'); function getCurrentState() { var commonState = 0; sensors_raum3.each(function (id) { val = toInt(getState(id).val); // Find the maximum (2 - opened, 1 - tilted, 0 - closed) if (val > commonState) commonState = val; }); sensors_raum2.each(function (id) { val = toInt(getState(id).val); // Find the maximum (2 - opened, 1 - tilted, 0 - closed) if (val > commonState) commonState = val; }); sensors_raum1.each(function (id) { val = toInt(getState(id).val); // Find the maximum (2 - opened, 1 - tilted, 0 - closed) if (val > commonState) commonState = val; }); return commonState; } // On change Raum3 sensors_raum3.on(function() { setState('VIS.zeige_1og_fensterstatus_icon', getCurrentState()); }); // On change Raum2 sensors_raum2.on(function() { setState('VIS.zeige_1og_fensterstatus_icon', getCurrentState()); }); // On change Raum1 sensors_raum1.on(function() { setState('VIS.zeige_1og_fensterstatus_icon', getCurrentState()); }); createState("VIS.zeige_1og_fensterstatus_icon", getCurrentState(), {name: 'VIS Zeige 1Og Fensterstatus-Icon'});Es funktioniert. Stellt sich mir nur die Frage, ob es vielleicht in der Abfrage optimiert werden kann oder ob die drei ON's in irgendeiner Form supoptimal sind?
Viele Grüße,
Fitti