NEWS
Array "undefined" und obj.deviceID "null" bei Trigger
-
Hallo Community,
brauche Eure Hilfe, stehe auf dem Schlauch.
Hintergrund:
Ich erstelle in einem Skript mit Start des Skripts ein Array von Datenpunkten, um darauf jeweils einen Listener zu registrieren. Das funktioniert ("registered 4 subscriptions").Mit Auslösen des Triggers (Wert 3)
- hat obj.newState.val den Wert 3 (prima)
- ist obj.objectID aber null und
- thermostateTrigger[i] undefined.
Was kann ich tun? Kann ich thermostateTrigger[i] irgendwie persistent zur Laufzeit bekommen, dass die function() bei Aufruf ihre banalen Befehle ausführen kann?
Danke!
Phlixxjavascript.0 2020-10-23 10:42:43.147 info (21842) script.js.Counter.CountdownBoostMaxEQtest: Countdown Trigger: undefined-null, Wert:3 javascript.0 2020-10-23 10:42:40.110 info (21842) script.js.Counter.CountdownBoostMaxEQtest: registered 4 subscriptions and 0 schedules javascript.0 2020-10-23 10:42:40.110 info (21842) script.js.Counter.CountdownBoostMaxEQtest: subscribe: {"pattern":{"id":"maxcul.0.JMD301xxxx.mode","change":"ne","q":0},"name":"script.js.Counter.CountdownBoostMaxEQtest"} javascript.0 2020-10-23 10:42:40.109 info (21842) script.js.Counter.CountdownBoostMaxEQtest: subscribe: {"pattern":{"id":"maxcul.0.MEQ145xxxx.mode","change":"ne","q":0},"name":"script.js.Counter.CountdownBoostMaxEQtest"} javascript.0 2020-10-23 10:42:40.107 info (21842) script.js.Counter.CountdownBoostMaxEQtest: subscribe: {"pattern":{"id":"maxcul.0.MEQ145xxxx.mode","change":"ne","q":0},"name":"script.js.Counter.CountdownBoostMaxEQtest"} javascript.0 2020-10-23 10:42:40.106 info (21842) script.js.Counter.CountdownBoostMaxEQtest: subscribe: {"pattern":{"id":"maxcul.0.JMD300xxxx.mode","change":"ne","q":0},"name":"script.js.Counter.CountdownBoostMaxEQtest"}var thermostate = new Array('maxcul.0.JMD300xxxx','maxcul.0.MEQ145xxxx','maxcul.0.MEQ145xxxx','maxcul.0.JMD301xxxx'); var thermostateTrigger = new Array(); for (var i = 0;i <thermostate.length;i++) { thermostateTrigger[i] = thermostate[i]+'.mode'; createState(thermostateTrigger[i]+'.countdown', 300); createState(thermostateTrigger[i]+'.afterCount', false); createState(thermostateTrigger[i]+'.countTrigger', false); on(thermostateTrigger[i], function (obj) { log ('Countdown Trigger: '+thermostateTrigger[i]+'-'+obj.deviceId+', Wert:'+obj.newState.val); if (obj.newState.val === 3) { setState(thermostateTrigger[i]+'.countdown', 300); setState(thermostateTrigger[i]+'.countTrigger', true); count(thermostateTrigger[i]); } }); } function count(thermostate) { setTimeout(function () { var timer = getState(thermostate+'.countdown').val; if (timer > 1) { setState(thermostate+'.countTrigger', false); setState(thermostate+'.countdown', timer - 1); count(thermostate); } else { setState(thermostate+'.countdown', 0); setState(thermostate+'.afterCount', true); } }, 1000); } -
Hallo Community,
brauche Eure Hilfe, stehe auf dem Schlauch.
Hintergrund:
Ich erstelle in einem Skript mit Start des Skripts ein Array von Datenpunkten, um darauf jeweils einen Listener zu registrieren. Das funktioniert ("registered 4 subscriptions").Mit Auslösen des Triggers (Wert 3)
- hat obj.newState.val den Wert 3 (prima)
- ist obj.objectID aber null und
- thermostateTrigger[i] undefined.
Was kann ich tun? Kann ich thermostateTrigger[i] irgendwie persistent zur Laufzeit bekommen, dass die function() bei Aufruf ihre banalen Befehle ausführen kann?
Danke!
Phlixxjavascript.0 2020-10-23 10:42:43.147 info (21842) script.js.Counter.CountdownBoostMaxEQtest: Countdown Trigger: undefined-null, Wert:3 javascript.0 2020-10-23 10:42:40.110 info (21842) script.js.Counter.CountdownBoostMaxEQtest: registered 4 subscriptions and 0 schedules javascript.0 2020-10-23 10:42:40.110 info (21842) script.js.Counter.CountdownBoostMaxEQtest: subscribe: {"pattern":{"id":"maxcul.0.JMD301xxxx.mode","change":"ne","q":0},"name":"script.js.Counter.CountdownBoostMaxEQtest"} javascript.0 2020-10-23 10:42:40.109 info (21842) script.js.Counter.CountdownBoostMaxEQtest: subscribe: {"pattern":{"id":"maxcul.0.MEQ145xxxx.mode","change":"ne","q":0},"name":"script.js.Counter.CountdownBoostMaxEQtest"} javascript.0 2020-10-23 10:42:40.107 info (21842) script.js.Counter.CountdownBoostMaxEQtest: subscribe: {"pattern":{"id":"maxcul.0.MEQ145xxxx.mode","change":"ne","q":0},"name":"script.js.Counter.CountdownBoostMaxEQtest"} javascript.0 2020-10-23 10:42:40.106 info (21842) script.js.Counter.CountdownBoostMaxEQtest: subscribe: {"pattern":{"id":"maxcul.0.JMD300xxxx.mode","change":"ne","q":0},"name":"script.js.Counter.CountdownBoostMaxEQtest"}var thermostate = new Array('maxcul.0.JMD300xxxx','maxcul.0.MEQ145xxxx','maxcul.0.MEQ145xxxx','maxcul.0.JMD301xxxx'); var thermostateTrigger = new Array(); for (var i = 0;i <thermostate.length;i++) { thermostateTrigger[i] = thermostate[i]+'.mode'; createState(thermostateTrigger[i]+'.countdown', 300); createState(thermostateTrigger[i]+'.afterCount', false); createState(thermostateTrigger[i]+'.countTrigger', false); on(thermostateTrigger[i], function (obj) { log ('Countdown Trigger: '+thermostateTrigger[i]+'-'+obj.deviceId+', Wert:'+obj.newState.val); if (obj.newState.val === 3) { setState(thermostateTrigger[i]+'.countdown', 300); setState(thermostateTrigger[i]+'.countTrigger', true); count(thermostateTrigger[i]); } }); } function count(thermostate) { setTimeout(function () { var timer = getState(thermostate+'.countdown').val; if (timer > 1) { setState(thermostate+'.countTrigger', false); setState(thermostate+'.countdown', timer - 1); count(thermostate); } else { setState(thermostate+'.countdown', 0); setState(thermostate+'.afterCount', true); } }, 1000); }Oder Kurzfassung:
Warum komme ich nicht an die deviceID des auslösenden Objekts?
obj.newState.val --> 3
obj.deviceID --> null
Muss ich was in ioBroker umstellen?
Danke!
(Das mit dem Array war nur der hilflose Versuch eines Workarounds für obiges Problem
-
Oder Kurzfassung:
Warum komme ich nicht an die deviceID des auslösenden Objekts?
obj.newState.val --> 3
obj.deviceID --> null
Muss ich was in ioBroker umstellen?
Danke!
(Das mit dem Array war nur der hilflose Versuch eines Workarounds für obiges Problem
-
@Phlixx sagte:
Warum komme ich nicht an die deviceID des auslösenden Objekts?
obj.deviceId funktioniert nur bei einer Ordnerstruktur "device.channel.state". Versuche es mal mit obj.channelId.
@paul53 Darauf muss man mal kommen.
Dann kann das Array zur Laufzeit ja weg ;-)Danke Dir, Paul!
Gruß PhlixxFalls jemand auf der Suche vorbei schaut, einfach das Array mit den DeviceIDs der eigenen Geräte füllen. Rest sollte dank @paul53 jetzt so gehen ...
var thermostate = new Array('maxcul.0.JMD300xxxx','maxcul.0.MEQ145xxxx','maxcul.0.MEQ145xxxx','maxcul.0.JMD301xxxx'); //Array mit den DeviceIDs der eigenen Geräte füllen for (var i = 0;i <thermostate.length;i++) { createState(thermostate[i]+'.countdown', 0); // falls noch nicht existent createState(thermostate[i]+'.afterCount', false); on(thermostate[i]+'.mode', function (obj) { //je DeviceID einen Listener registrieren // geht nur mit obj.channelId, nicht obj.deviceId if (obj.newState.val === 3) { setState(obj.channelId+'.countdown', 300); count(obj.channelId); } }); } function count(thermostat) { // mit diesem Sekundentimer (setTimeOut(...,1000) bin ich nicht glücklich, im Frontent sieht es unruhig aus, da die Updates nicht sekündlich kommen... ggs. als Minuten darstellen... setTimeout(function () { var timer = getState(thermostat+'.countdown').val; if (timer > 1) { setState(thermostat+'.countdown', timer - 1); count(thermostat); } else { setState(thermostat+'.countdown', 0); setState(thermostat+'.afterCount', true); } }, 1000); }
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