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