Ich habe das Skript noch weiter angepasst.
Jetzt läuft es :)
Für Interessierte:
! Das Skript speichert in der Variablen "LichterAn" ein Array mit den IDs der Lichter. Wird ein Licht ausgeschaltet, wird die ID aus der Liste entfernt.
! Mit "javascript.0.LichterAn.length" kann man die Anzahl der Lichter abfragen.
! "enum.functions.${funcLight}" ersetzen durch andere Werte natürlich möglich ;-)
! ````
// Skript zum prüfen ob Lichter an sind und einen EventHandler bei allen Lichtern registrieren.
// Bei Änderung eines Lichts, wird die Variable 'javascript.0.LichterAn' geändert
! log("Rooms" + JSON.stringify(getObject("enum.functions.${funcLight}")));
! createState('LichterAn', {
name: 'Lichter an',
desc: 'Lichter die an sind'
});
! var lightsOn = [];
! function filterValues(value)
{
return value != this;
}
! function processObject (v, i, ar)
{
var state = getState(v);
if (state.val === "null" || state.val === null)
{
setState(v, 0);
log(v + ", State: false gesetzt");
log(v + ", State: " + getState(v).val);
}
else
{
log(v + ", State: " + state.val);
if (state.val || state.val === 1)
{
lightsOn.push(v);
}
}
setState('javascript.0.LichterAn', lightsOn);
on({id: v, change: 'ne'}, function(obj) {
var status = getState(v).val;
var objList = getState('javascript.0.LichterAn', lightsOn);
if (objList.val === null)
{
objList.val = [];
}
if (status)
{
log(v + ": an");
objList.val.push(v);
setState('javascript.0.LichterAn', objList);
}
else
{
log (v + ": aus");
var list2 = objList.val.filter(filterValues, v);
objList.val = list2;
if (list2.length === 0)
{
objList.val = [];
}
setState('javascript.0.LichterAn', objList);
}
});
! }
! var objects = getObject("enum.functions.${funcLight}").common.members;
objects.forEach(processObject);