NEWS
[gelöst] Frage zu Intervall als Wartezeit
-
Benutze dafür Time-out anstatt Intervall
Sent from my iPhone using Tapatalk
-
Danke .. wollte ich zuerst .. aber Timeout kam mir dann unlogisch vor.
Ich möchte prüfen ob die Leistung am Stecker kleiner 5W ist und erst wenn der Zustand 30 Sekunden hält etwas tun. Dann ist das Gerät (hoffentlich) wirklich aus. Beim Timeout würde jedes Mal der Zustand Wahr wenn im Zeitfenster was geändert wird.
Passt doch nicht .. oder?
-
Nein!
Wen du innerhalb des timeout einen Wert (zB timeout 30sec, If Wert ist xxx) Dan prüft er nach 30 Sekunden diesen Wert.
Sent from my iPhone using Tapatalk
-
Dan prüft er nach 30 Sekunden diesen Wert. `
Das bedeutet nicht, dass zwischenzeitlich der Wert überschritten wurde.
@daniello:erst wenn der Zustand 30 Sekunden hält etwas tun. `
Bei Wertüberschreitung (else): clearTimeout(timer). Beispiel:var timer = null; on(idPower, function(dp) { if(dp.state.val < 5) { timer = setTimeout(function() { // etwas tun }, 30000); // 30 s } else if(timer) clearTimeout(timer); }); -
Ich würde den 2ten falls im timeout Weck lassen und im ersten falls einen Stop timeout einbauen.
Ändert sich der wert Dan innerhalb der 30 Sekunden wieder > xx stopst du damit den Timer und nichts wird ausgeführt
Sent from my iPhone using Tapatalk
-
Warum stoppe ich was, dass durch die falls Bedingung gar nicht gestartet wurde `
Der Timer wird gestoppt, wenn die Falls-Bedingung erfüllt war, aber innerhalb der Verzögerungszeit sie nicht erfüllt bleibt. Beispiel:Waschmaschine läuft –> Leistung 3 W (Start Timer) --> nach 10 s Leistung 50 W (Stopp Timer) --> nach 20 s Leistung wieder 3 W (Start Timer) --> nach 40 s Leistung 50 W (Stopp Timer) --> nach 50 s 3 W (Start Timer) --> nach 80 s Wachmaschine fertig.
Ohne den Stopp Timer würden nach 20 s und 50 s weitere Timer gestartet, der erste Timer würde weiterlaufen und nach 30 s fertig melden, der zweite Timer nach 50 s und der dritte Timer nach 80 s.
-
Zwei Dinge sind blöd .. zum einen steht die Waschmaschine still trotzdem "ist sie fertig" .. kommt grad so alle paar Minuten. Kein einziger Val ist über 0.3. Und die W_kWh und W_Euro sind NaN (Not a Number) .. müssten sie doch aber sein.
17:36:39.598 [info] javascript.0 script.js.common.waschmaschine_trockner: getState(id=hm-rpc.0.KEQ0970444.2.POWER, timerId=0) => {"val":0.25,"ack":true,"ts":1538235399594,"q":0,"from":"system.adapter.hm-rpc.0","lc":1538235279350} 17:36:39.599 [info] javascript.0 script.js.common.waschmaschine_trockner: getState(id=hm-rpc.0.KEQ0970444.2.POWER, timerId=0) => {"val":0.25,"ack":true,"ts":1538235399594,"q":0,"from":"system.adapter.hm-rpc.0","lc":1538235279350} 17:36:39.599 [info] javascript.0 script.js.common.waschmaschine_trockner: setTimeout(ms=30000) 17:37:06.963 [info] javascript.0 script.js.common.waschmaschine_trockner: getState(id=hm-rpc.0.KEQ0970432.2.POWER, timerId=0) => {"val":0.28,"ack":true,"ts":1538235426957,"q":0,"from":"system.adapter.hm-rpc.0","lc":1538235426957} 17:37:06.964 [info] javascript.0 script.js.common.waschmaschine_trockner: setTimeout(ms=30000) 17:37:09.599 [info] javascript.0 script.js.common.waschmaschine_trockner: getState(id=hm-rpc.0.KEQ0970444.2.POWER, timerId=0) => {"val":0.25,"ack":true,"ts":1538235399594,"q":0,"from":"system.adapter.hm-rpc.0","lc":1538235279350} 17:37:09.599 [info] javascript.0 script.js.common.waschmaschine_trockner: setForeignState(id=.eigene.wäschetrockner, state=false) 17:37:36.965 [info] javascript.0 script.js.common.waschmaschine_trockner: getState(id=hm-rpc.0.KEQ0970432.2.ENERGY_COUNTER, timerId=0) => {"val":2359.5,"ack":true,"ts":1538235426950,"q":0,"from":"system.adapter.hm-rpc.0","lc":1538234215211} 17:37:36.965 [info] javascript.0 script.js.common.waschmaschine_trockner: sendTo(adapter=email, cmd=send, msg={"text":"Verbrauch heute: NaN kWh. In Euro: NaN","to":"xx@xx.com","subject":"Waschmaschine heute"}) 17:37:36.965 [info] javascript.0 script.js.common.waschmaschine_trockner: setForeignState(id=alexa2.0.Echo-Devices.G090LF107207028R.Commands.speak, state="Die Waschmaschine ist fertig") -
kommt grad so alle paar Minuten. Kein einziger Val ist über 0.3. `
Aber auch nicht konstant. Deshalb die Abfrage erweitern auffalls Wert < 4 und vorheriger Wert >= 4
EDIT: falls Wert < 4 falls vorheriger Wert >= 4
Und die W_kWh und W_Euro sind NaN (Not a Number) `
Die Variable Wstart wurde sicherlich noch nicht initialisiert, da der sonst-Zweig noch nie erreicht wurde. Initialisiere die Variable <u>zusätzlich</u> außerhalb des Triggerblocks:setze Wstart auf Wert vom Objekt Waschmaschine:2.ENERGY_COUNTER
-
Warum stoppe ich was, dass durch die falls Bedingung gar nicht gestartet wurde `
Der Timer wird gestoppt, wenn die Falls-Bedingung erfüllt war, aber innerhalb der Verzögerungszeit sie nicht erfüllt bleibt. Beispiel:Waschmaschine läuft –> Leistung 3 W (Start Timer) --> nach 10 s Leistung 50 W (Stopp Timer) --> nach 20 s Leistung wieder 3 W (Start Timer) --> nach 40 s Leistung 50 W (Stopp Timer) --> nach 50 s 3 W (Start Timer) --> nach 80 s Wachmaschine fertig.
Ohne den Stopp Timer würden nach 20 s und 50 s weitere Timer gestartet, der erste Timer würde weiterlaufen und nach 30 s fertig melden, der zweite Timer nach 50 s und der dritte Timer nach 80 s. `
OK, jetzt weiß ich auch warum sich einige meiner Blocklys komisch verhalten, eigentlich logisch.


