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
-
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);
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden