NEWS
Timeout, ich finde den Fehler nicht
-
Hallo zusammen,
ich habe jetzt schon ein paar Tage gesucht aber ich kann den Fehler nicht finden.
Bzw. verstehe das mit dem Timeout nicht.
In beiden varianten bekomme ich ständig, also mehr fach pro Minute, eine Nachricht.
Das kann doch alles nicht so schwer sein. Kann mir jemand das mit dem Timeout erklären?Besten Dank
Daniel -
@Has3nb3inMH sagte in Timeout, ich finde den Fehler nicht:
In beiden varianten bekomme ich ständig, also mehr fach pro Minute, eine Nachricht.
Ich sehe gar nichts mit einer Nachricht.
Du triggerst auf Aktualisierung, also ggf. Mehrfach pro Minute.
Unter gleichen Bedingungen startet der nächste timeout und der alte wird nicht gestoppt.Liefert dein sensor eine Zahl oder einen String?
Du prüfst auf String. Eine Zahl wäre wahrscheinlich besser -
@Homoran Hallo,
den Teil mit der Nachricht, sieht man hier nicht.
Das ist von Trockner_fertig abhängig. Es ist die Leistung einer Steckdose. -
@Has3nb3inMH sagte in Timeout, ich finde den Fehler nicht:
Es ist die Leistung einer Steckdose.
Ändere es so wie Homoran sagt
Du prüfst auf String. Eine Zahl wäre wahrscheinlich besser
-
@Has3nb3inMH sagte:
bekomme ich ständig, also mehr fach pro Minute, eine Nachricht.
Bei Leistungsschwankungen unter 3 wird jedesmal wieder ein neuer Timer gestartet. Vorschlag hier.
-
@paul53 der laufende Timer müsste doch bei über 3 gestoppt werden.
-
@Has3nb3inMH sagte in Timeout, ich finde den Fehler nicht:
@paul53 der laufende Timer müsste doch bei über 3 gestoppt werden.
Wie ich bereits schrieb, wird er nicht gestoppt wenn mehrfach hintereinander der Wert bei < 3 aktualisiert wird.
Dann laufen mehrere Timer parallel und können nicht mehr gestoppt werden. -
@Has3nb3inMH wie schon geschrieben nimm geändert und nicht aktualisiere. Das ist in deinem Fall tödlich
Du könntest dann in deinen falls statements (linkes Skript von dir) Folgendes einbauen:
Falls wert < x und vorheriger wert >= x
Wert und vorheriger wert findest du unter Trigger Blöcken (heißt da objektid). -
@buggybeast sagte in Timeout, ich finde den Fehler nicht:
nimm geändert und nicht aktualisiere. Das ist in deinem Fall tödlich
Aber selbst das hilft nicht, wenn hintereinander 2,8 .... 2,7....2,9... usw kommt.
Da muss unbedingt vor dem timeout ein Stop timeout erfolgen um den alten timeout zu beenden.
Die Folge davon ist aber, dass ständig die x Minuten neu gestartet werden.
Das von @paul53 verlinkte Skript habe ich mir nicht näher angesehen, aber ich würde mich wundern, wenn dieses Problem dort von Paul nicht abgefangen würde -
@Homoran ja, außer er baut das mit wert und vorheriger wert ein
Dann passiert das nicht.
Besser wäre es auch, wenn im ersten falls der gleiche Schwellenwert genommen wird, also in seinem Fall auch die 3 (natürlich als Zahl und nicht als Text). Und den stop timeout dann oben einzubauen, Im ersten falls Block.
Mein Skript sieht so aus und funktioniert seit Monaten tadellos.
https://forum.iobroker.net/assets/uploads/files/1588412324597-script.png
-
@buggybeast sagte in Timeout, ich finde den Fehler nicht:
Dann passiert das nicht.
Sicher??
Was passiert bei
2,9....2,8....2,7.... -
@Homoran habe oben mal mein Skript rein kopiert.
Bei 2.7,...,2,8 passiert nix, wenn der vorherige Wert nicht >= 3 war. -
@buggybeast siehe meinen letzten Post!
Du müsstest mit einer Sperrvariablen arbeiten, die auf true gesetzt wird, wenn < 3 und auf false wenn darüber und bei < 3 diese Abfragen ob diese vorher false war
-
@Homoran ich schätze du meinst, dass seine schwellwerte „kacke“ sind (sorry)
Er muss die gleichen schwellwerte nehmen, wie in meinem Skript.
Dann funktioniert das.
Sonst hat er halt ein Problem, wenn der Wert mal auf 10 oder 50 geht. Meinst du das?
Hach Mist. Was ich meine, ist natürlich, wenn der der Wert von < 3 auf 10 oder so geht, und dann wieder auf < 3. dann würde ein zweiter timeout gestartet werden. Das liegt an den beiden weit auseinander liegenden schwellwerten. -
@buggybeast sagte in Timeout, ich finde den Fehler nicht:
Meinst du das?
Nein!
Ich meine, selbst wenn er auf Änderung triggert und der nächste Wert gemäß dem Vergleich zum letzten unter 3 und immer kleiner wird, wird der Timeout neu gestartet.
Der bisherige wird nicht gelöscht und damit hängt das ganze Skript so bald der timeout gelöscht werden soll, da mehrere timeout mit dem selben Namen laufen.EDIT:
Mist Handy!Sehe jetzt erst, dass du mit absoluten Zahlen vergleichst und nicht WERT < VORHERIGER WERT.
Dann passen meine Antworten natürlich nicht -
@buggybeast habe ich gemacht und läuft jetzt problemlos.
Danke
-
@Homoran sagt:
Du müsstest mit einer Sperrvariablen arbeiten
Im verlinkten Skript wird die Timer-Variable timeout als Sperrvariable "missbraucht". Anstelle einer Sperrvariable kann auch "vorheriger Wert" ausgewertet werden, wobei der Vergleich exakt sein muss, damit es in allen möglichen Fällen funktioniert.
-
@Homoran sagte in Timeout, ich finde den Fehler nicht:
Mist Handy!
Wenigstens geht es nicht nur mir so