NEWS
[gelöst] Frage zu Intervall als Wartezeit
-
Hallo allerseits,
wird das im Intervall sofort ein erstes Mal ausgeführt oder erst nach t?
Ich möchte grad eine Wartezeit einrichten nach dem Motto "ok .. Satus erkannt .. mach aber erst was, wenn es nach 30 Sekunden immer noch so ist.
Würde eine Variable vorher auf 0 setzen und im Intervall (30s) dann schauen wollen ob 1 ist .. ggf. aber auch 2 wenn das Intervall sofort ein erstes Mal ausgeführt wird.
Schönen Gruß
-
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
-
Danke .. hatte nach einer Erklärung gesucht .. und wohl die falsche gefunden .. dann passt mein Skript ja Super!
-
Trotzdem vielleicht noch die Antwort auf die Frage ob Intervall nach dem Ablauf der Zeit ein erstes Mal was tut oder sofort?
-
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); });
-
die Frage ob Intervall nach dem Ablauf der Zeit ein erstes Mal was tut oder sofort? `
Erst nach Ablauf der Zeit wird das erste Mal etwas ausgeführt. -
prima .. hätte es dann so umgesetzt .. müsste passen …
-
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
-
danke .. muss ich mal schauen ob ich das umgesetz bekomme .. dachte das passt so .. wegen der Hysterese.
Weiß gar nicht warum ich hier "Professional" bin .. vermutlich die Anzahl meiner Newbiefragen
-
Ist der Datenpunkt "waschmaschine" ein virtueller Datenpunkt (z.B. für Vis), dann aktualisiere verwenden; wird der Wert aber versendet (z.B eine SV der HM CCU), dann steuere verwenden.EDIT KORREKTUR: und durch zweites falls ersetzt
-
Danke Paul .. das ist ja sehr schlank
-
wenn das mal so schlicht läuft .. bin gespannt
-
Mal ne Frage zum Stop des timeout. Warum stoppe ich was, dass durch die falls Bedingung gar nicht gestartet wurde, oder steh ich gerade auf dem Schlauch?
-
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.
-
> falls Wert < 4 und vorheriger Wert >= 4
Wie macht mann denn das mit dem vorherigen Wert? Ist das "letzte Änderung" ?