NEWS
Unterschied timeout und pause in Blockly
-
@paul53 sagte in Unterschied timeout und pause in Blockly:
Bis die Abbruchbedingung erfüllt ist, ist die Javascript-Instanz meist schon abgeschmiert.
Das Stimmt, allerdings liegt es meiner Meinung nach weniger an der fehlenden Abbruchbedingung und mehr an der großen Anzahl an Timeouts die vom Skript erzeugt werden. Wenn statt des "ausführen Timeout" einfach nur ein "mache irgendwas" im solange stehen würde müsste die JS Instanz durchlaufen.
A.
-
@alcalzone Vielen Dank dafür! Da ich mehrere Geräte in ein definiertes Setting schalten möchte hilft das ungemein. Bei parallelen Anfragen könnten durch Nutzung von "Löschen falls läuft" undefinierte Zustände passieren. Durch die Pausen wird ein Befehl immer konsistent bearbeitet, wenngleich dies als Nachteil hat, dass manche Befehle hintereinander mehrfach geschickt werden ggü. "Löschen falls läuft".
-
@asgothian Vielen Dank für Deine Rückmeldung! Da ich mehrere Geräte in ein definiertes Setting schalten möchte ist es für meinen Use Case dennoch besser Pause zu nutzen. Bei parallelen Anfragen könnten durch Nutzung von "Löschen falls läuft" ansonsten undefinierte Zustände passieren. Durch die Pausen wird ein Befehl immer konsistent bearbeitet, wenngleich dies als Nachteil hat, dass manche Befehle hintereinander mehrfach geschickt werden ggü. "Löschen falls läuft". Aber gut zu wissen, dass es beide Alternativen gibt. Je nach Use Case werde ich diese einsetzen (können)
-
Klasse, danke euch allen. Bin noch sehr am
Anfang und mache viel Trial&error… und dabei viel Error. -
Ich mache das hier mal wieder auf.
Hier mein Script:
Es soll die Pumpe meines Pools steuern. Dabei sollen folgende Parameter erfüllt sein:
- Es liegt ein Stromüberschuß von mind 3kW an (PV und/ oder BHKW)
- Es sollen max. 2,4kWh am Tag verbraucht werden.
- Es soll eine Vorlauftemperatur von mind. 60°C anliegen.
Bei meinen ersten Versuchen habe ich ohne Timeout gearbeitet. Das funktioniert zwar sehr gut, aber nach kurzer Zeit tilt mein Shelly Schalter (auch wenn er nur ein Schütz steuert, ich muss dann jedes mal die Sicherung ab- und wieder anschalten, damit der Shelly wieder funktioniert), da es zu zu vielen Schaltvorgängen kommt. Für die Schwimmbadpumpe ist das sicher auch nicht förderlich.
Deswegen möchte ich, daß die Pumpe, nachdem sie eingeschaltet wurde mind. 5 Minuten laufen soll.
Ich hoffe ich habe den Thread soweit richtig verstanden und die Tips dort umgesetzt? Oder sind da noch Fehler drin?
-
@xwing jedesmal wenn ein Wert > -3000 (2995, 29800, 2800) nacheinander kommt wird ein neuer timeout gestartet ohne dass der laufende gestoppt wird.
dadurch kann keiner der timeouts gestoppt werden -
@xwing sagte: Pumpe, nachdem sie eingeschaltet wurde mind. 5 Minuten laufen soll.
So werden bei Werten >= -3000 mehrere Timeout gestartet, die sich nicht mehr stoppen lassen. Ersetze
sonst
durchsonst falls vorheriger Wert < -3000
, damit immer nur ein Timeout gestartet wird.
Besser: Bau eine Hysterese ein, die größer ist als die Leistungsaufnahme der Pumpe. -
@paul53
Also so?
Das mit der Hysterese verstehe ich nicht. Die Pumpe braucht max 740W.
-
@xwing sagte: Also so?
Nein: sonst falls
vorheriger Wert < -3000
@xwing sagte in Unterschied timeout und pause in Blockly:
Die Pumpe braucht max 740W.
Dann passt eine Hysterese von 1000 W:
-
@xwing sagte in Unterschied timeout und pause in Blockly:
Das mit der Hysterese verstehe ich nicht. Die Pumpe braucht max 740W.
in dem Moment wenn die Pumpe anspringt we7l du mehr als 3000W einspeist, fällt die Einspeisung sofort um die Leistungsaufnahme der Pumpe und das Skript würde die Pumpe sofort (nach timeout) wieder ausschalten.
Das kann doch nicht gewollt sein.
-
@homoran
Das ist korrekt. Ich verstehe das Hysteresescript von paul53 jetzt und werde es umsetzen.
Was mir da noch fehlt ist die Mindestlaufzeit der Pumpe. Meine Frau könnte ja den Teekocher, oder den Fön kurz anmachen und die Pumpe wird ausgeschaltet. Das möchte ich verhindern. Wenn die Pumpe einmal an ist, soll sie eine Mindestlaufzeit in diesem Zustand bleiben. -
@xwing sagte in Unterschied timeout und pause in Blockly:
Wenn die Pumpe einmal an ist, soll sie eine Mindestlaufzeit in diesem Zustand bleiben.
das hattest du so nie im Skript drin.
du möchtest also nicht 5 Minuten Mindestlaufzeit, was immer noch eine hohe Belastung für die Pumpe wäte, sondern nach 5 Minuten erneut überprüfen ob die Einspeisung zu gering ist, und dann erst abschalten.
Solltexder Föhn dann wieder aus sein, soll die Pumpe weiterlaufen.ODER?
-
@paul53
Danke,
das hilft mir schonmal auf die Sprünge.
Ich verstehe allerdings nicht was dieser Teil in Deinem Script macht:
-
@homoran
Das war so mein Ziel. Wenn die Pumpe an ist soll sie mindestens 5 Minuten laufen, bevor sie ausschaltet.
Deswegen der Versuch mit dem Timeout. -
@xwing sagte: Ich verstehe allerdings nicht was dieser Teil in Deinem Script macht:
Das sorgt dafür, dass nur dann gesendet wird, wenn die Pumpe schalten soll und vermeidet so unnötige Funk-Störungen.
-
@xwing sagte: Wenn die Pumpe an ist soll sie mindestens 5 Minuten laufen, bevor sie ausschaltet.
Dann erweitere den unteren Teil:
Wenn die Pumpe auch mind. 5 Minuten aus bleiben soll, dann lass die Abfrage "falls pumpe" weg:
-
@paul53
Danke!
Ich bin gerade dabei das einzutippen.
Wo finde ich den "und" Block?Bei mir finde ich nur:
Die machen sicher das gleiche. Aber mit Deinem Block ist das lesbarer.
-
@xwing sagte: Wo finde ich den "und" Block?
Über dem "und" Block: Rechte Maustaste und "externe Eingänge" auswählen.
-
@paul53 said in Unterschied timeout und pause in Blockly:
Über dem "und" Block: Rechte Maustaste und "externe Eingänge" auswählen.
Da muss man drauf kommen...
Noch eine Frage: Wofür dient die Variable "timeout". Sie wird ja immer auf "0" gehalten.
-
@xwing sagte in Unterschied timeout und pause in Blockly:
Wofür dient die Variable "timeout". Sie wird ja immer auf "0" gehalten.
nein und nein!
es wird überprüft ob der timeout nicht läuft und dann wird der timeout gestoppt.
null !=0