NEWS
Dynamische Event-Registrierung
-
Hallo,
ich möchte für alle Lichter bei einer Statusänderung einen Wert setzen.
log("Rooms" + JSON.stringify(getObject("enum.functions.${funcLight}"))); var lightsOn = []; 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); } } on({id: v, change: 'ne', function(obj) { // ToDo }}); } var objects = getObject("enum.functions.${funcLight}").common.members; objects.forEach(processObject);
Bei "on({id: v, change'ne', function(obj){…})" kommt im Log allerdings folgende Meldung:
javascript.0 2017-09-02 21:21:55.356 warn State "undefined" not found
Woran liegt das ? Ich will den Status ja noch nicht auslesen. Der Status ist aber eigentlich bekannt.
Oder gibt es eine andere Möglichkeit ein "Change-Event" des Objekt zu nutzen?
Vielen Dank
Tucca
-
Versuch mal:
on({id: v, change: 'ne'}, function(obj) { // ToDo });
…
-
Leider immer noch die gleiche Warn-Meldung im Log
-
Gib doch mal die Parameter, vor alles v aus in deiner Schleife. Bzw wie sieht denn das Array was du da durchgehst genau aus? Gibs mal aus.
-
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);