NEWS
Hintergrund Timeouts stoppen bei mehrfach Ausführung?
-
Hallo,
ich glaube ich stehe auf dem Schlauch, ich will eigentlich nur eine Variable schreiben sobald der Netzbezug meiner PV auf über 1 KW ist.Da der Wert aber alle Minuten kommt, wird das Script auch 5 mal ausgeführt und ich bekomme 5 Meldungen hintereinander:
Jetzt habe ich noch zusätzlich einen Timeout nach dem ausführen des eigentlichen Timeouts rein und hoffe das hier alle Timeouts dann wirklich gestoppt werden:
Bin ich da auf dem richtigen Weg oder mache ich das viel zu kompliziert?
-
@nik82 sagte: ich bekomme 5 Meldungen hintereinander:
Man muss verhindern, dass die Timeouts mehrmals gestartet werden. Prinzip:
-
Ah jetzt, also einfach eine Variable erstellen mit dem Namen des Timeouts und damit kann man man dann quasi den timeout Zustand abfragen.
Cool, vielen Dank, wieder was gelernt -
@nik82 sagte: also einfach eine Variable erstellen mit dem Namen des Timeouts und damit kann man man dann quasi den timeout Zustand abfragen.
Nein, keine Variable erstellen, sondern die Timervariable verwenden, die jeder Timer mitbringt!
Werte besser "vorheriger Wert" aus (unter "Trigger").
-
@paul53
Ich war zu schnell beim antworten, du hast glaub ich deinen Post nochmal editiert oder?
Vorher hast im "falls" ein "nicht" rein und danach eine dummy variable mit dem Namen des Timers rein. Oder hab ich mich da verschautAber "vorheriger Wert" unter Trigger ist auch super, den kannte ich auch noch nicht.
Danke
-
@nik82 sagte: du hast glaub ich deinen Post nochmal editiert oder?
Ja, hab ich, da der Umgang mit den Timer-Variablen etwas trickreich ist:
Die Timer-Variablen werden nicht angeboten:
Also erstellt man eine dummy-Variable, die man in das Skript zieht:
Anschließend selektiert man die richtige Timer-Variable:
-
@paul53
Perfekt, vielen Dank für die Info -
@paul53
Jetzt muss ich leider nochmal nerven, ich habe das jetzt angelegt:Leider macht er aber nichts, wahrscheinlich weil er keinen vorherigen wert hat, jetzt muss ich quasi warten bis sich der wert wirklich ändert oder?
Momentan ist der Wert -8000, dass heißt ich muss warten bis der wert jetzt einmal über 200 geht und dann geht das wahrscheinlich.
Könnte man das noch verbessern, weil immer wenn ich das Script neustarte, müsste ich immer warten und das kann ja bis zum Abend dauern?
-
@nik82
Es werden die falschen Timer gestoppt!@nik82 sagte in Hintergrund Timeouts stoppen bei mehrfach Ausführung?:
wenn ich das Script neustarte, müsste ich immer warten und das kann ja bis zum Abend dauern?
Außerhalb des Triggers:
-
@paul53
Ok, danke. Oh da hat sich ein falscher Timeout eingeschlichen weil ich das Script für 1000 habe und einfach kopiert habe für den 200er Wert.@paul53 sagte in Hintergrund Timeouts stoppen bei mehrfach Ausführung?:
Außerhalb des Triggers:
Was soll ich bei Object ID auswählen, wenn ich das so lasse, dann kommt eine Fehlermeldung im Log "State "Object ID" not found "
-
@paul53
Hat sich erledigt, ich mache es jetzt so:Der Tip mit der dummy Variable und damit auf die timeouts zu gehen war super!
Das klappt einwandfrei.Nochmal vielen Dank für deine super und schnelle Hilfe
-
Hallo zusammen,
habe das Script jetzt noch etwas erweitert und wollte das keinem vorenthalten, falls jemand genau das gleiche Thema hat.Wir hatten ja als Beispiel dieses Script:
Das klappt ja soweit ganz gut, nur bekomme ich hier IMMER eine Meldung wenn sich der Wert ändert, also auch wenn sich der Wert innerhalb der 5 Minuten ändert.
Ich möchte aber nur eine Meldung wenn ein Timeout wirklich durchgelaufen ist, also nur wenn der Wert auch für 5 Minuten bleibt.Beispiel:
09:25 Uhr: Objekt geht auf false
09:26 Uhr: Objekt geht wieder auf true
--> jetzt würde nach 5 Minuten die Meldung "Variable ist wahr" kommen, da es sich aber nur innerhalb der einen Minute geändert hat möchte ich keine Meldung bekommen.Beispiel2:
09:25 Uhr: Objekt geht auf false
09:30 Uhr: Meldung kommt "Variable ist falsch"
09:45 Uhr: Objekt geht auf true
09:50 Uhr: Meldung kommt "Variable ist wahr"
--> das ist in Ordnung weil die Variable mehr als 5 Minuten den Zustand false oder true hatteDeswegen habe ich hier noch eine Variable dazugeschrieben:
@paul53
Denke das ist von der Logik ok oder? -
Hallo Paul, ich bräuchte wieder Hilfe von einem Profi
Ich habe dieses Script hier:
Ich will quasi nur eine Fehler-Nachricht haben, wenn CarrierSense länger als 15 Minuten über 10 ist.
Und dann will ich nur eine Ok-Nachricht haben, wenn diese Bedingung vorher erfüllt war.Wenn ich jetzt testweise den Wert auf 20 stelle, dann kommt nach 15 Minuten eine Error-Meldung --> soweit ok.
Stelle ich dann auf 0, dann kommt eine Ok-Meldung --> auch ok.Stelle ich aber den Wert auf 20, dann nach ein paar Sekunden gleich wieder auf 0 --> dann kommt nichts --> auch ok.
Und stelle ich aber den Wert auf 20, dann nach ein paar Sekunden auf 30 und dann ein paar Sekunden später wieder auf 0 --> dann kommt nach 15min eine Fehler-Meldung und sofort darauf eine Ok-Meldung.
Aber eigentlich sollte da auch gar nichts kommen.Kannst du mir da helfen, ich komm da nämlich einfach nicht weiter
P.S. Er müsste ja eigentlich den Timeout "timeout_CarrierSense_falsch" stoppen, sobald der Wert wieder unter 10 geht, aber das macht er nicht (wenn sich der Wert mehrmals innerhalb des Timeouts ändert) und ich weis nicht warumDanke im Voraus.
-
Habs gefunden!
Der Timeout "CarrierSense_falsch" wird ja mehrmals gestartet und dann "stop" "timeout" wird anscheinend nur der letzte gestoppt, aber nicht alle.
Deswegen einfach zusätzlich den eigenen Timeout noch stoppen, damit dieser nicht mehrfach ausgeführt wird: -
@paul53 sagte in Hintergrund Timeouts stoppen bei mehrfach Ausführung?:
@nik82 sagte: du hast glaub ich deinen Post nochmal editiert oder?
Ja, hab ich, da der Umgang mit den Timer-Variablen etwas trickreich ist:
Die Timer-Variablen werden nicht angeboten:
Also erstellt man eine dummy-Variable, die man in das Skript zieht:
Anschließend selektiert man die richtige Timer-Variable:
Tipp: Man benötigt nicht die Variaben! Bei den Timeouts findet man den Block "Verzögerung"
-
@schmakus
Danke für den Tip, habe den Block "Verzögerung" gerade gefunden, aber was genau macht dieser Block?
Ich verstehs leider noch nicht ganz, verzögert der die Timeout Ausführung? -
@nik82 nein, dieser beinhaltet quasi die Variable des jewiligen Timeouts oder Intervall.
Diesen kann man einsetzen, um zu prüfen, ob ein Tiemout schon läuft.=> nicht Verzögerung timeout
Bedenke aber, dass wenn ein timeout mal gestartet wurde, es jedoch nie gestoppt wurde, die Abfrage on "nicht timeout" immer
wahr
ergibt. Erst ein "stop timeout" löscht die Variable (setzt auf NULL). Ein timeout setzt sich nämlich nach erfolgreichem Ablauf nicht selbst zurück. Die timeout-ID bleibt weiterhin in der Variablen. -
@schmakus
Ah jetzt hab ich das verstanden, ich nehme quasi den Block statt der Variable.
Vielen Dank für die Info.