NEWS
Blockly Timeout hält sich nicht an die eingestellte Zeit
-
Hallo zusammen,
ich habe die Beiträge hier zu Blockly und Timeout gelesen und bin eigentlich der Meinung, dass ich das Prinzip verstanden habe - aber scheinbar doch nicht, daher die Bitte um Hilfe.
Ich möchte meinen Landroid Rasenmäher sperren, sobald die Bewässerung eingeschaltet ist oder es regnet und weitere 3 Stunden geparkt lassen, nachdem die Rasenbewässerung wieder aus ist bzw. wenn der Regen vorbei ist.
Bewässerung und Regen sind binäre Datenpunkte, die Sperrung des Rasenmähers läuft so, dass die Mähzeit um 100% reduziert (-100) wird.
Im Skript passiert Folgendes: Regen kommt, Mähzeit wird um 100% reduziert, aber trotz anstehendem Regen wird nach ca. 5 Sek. die Mähzeitreduktion wieder zurückgenommen.
Das passiert alles irgendwie sporadisch, die eingestellten 180 min kann ich allerdings nie beobachten. Mein Blockly sieht so aus:
Kann mir jemand einen Tip geben?
Danke vorab!
-
Erklären kann ich das Verhalten nicht. Ich würde dir aber Empfehlen mal einen Trigger auf die Mähzeitreduktion zu setzen, und in dem Trigger die "quelle" der Anpassung auszugeben. An diese kommst du heran wenn du den Baustein "Objekt ID" aus dem Trigger Bereich nimmst und auf Quelle umstellst.
Ich vermute das die Mähzeit von anderer Seite zurück gesetzt wird.
A.
-
@fu_zhou
Allgemein zu deinem Script:
So wäre es evtl. einfacher:
Was passiert wenn der Rasenmäher schon unterwegs ist und es anfängt mit regnen? Wird dann mit -100 der Rasenmäher gestoppt und er fährt zurück zur Station?
-
@jensven sagte: So wäre es evtl. einfacher:
Es fehlt die Oder-Verknüpfung der beiden Werte. Besser so:
-
@paul53 sagte in Blockly Timeout hält sich nicht an die eingestellte Zeit:
@jensven sagte: So wäre es evtl. einfacher:
Es fehlt die Oder-Verknüpfung der beiden Werte. Besser so:
???
So wie @jensven das getan hat hat "wert" doch den Wert des States der den Trigger ausgelöst hat. Damit ist kein oder notwendig um den Effekt des Skriptes des OP zu duplizieren. Dort wird ja in 2 Triggern immer nur auf einen Wert reagiert.
A.
-
@asgothian sagte: Damit ist kein oder notwendig
Folgender Fall: Die Bewässerung läuft und es beginnt zu regnen. Die Bewässerung wird abgeschaltet (es regnet bereits): Der Timer wird gestartet. Vor Ablauf der 180 Minuten hört es auf zu regnen: Was nun passiert, kann man leicht erkennen.
-
Korrekt.. das war aber beim vorherigen Skript auch so. Ich bin einfach mal davon ausgegangen das der OP das auch wollte. Ansonsten wäre das Ziel-Skript deutlich aufwändiger.
A.
-
@asgothian sagte: das war aber beim vorherigen Skript auch so.
Nicht ganz: Es können auch zwei Timer parallel laufen, die sich aber zumindest wieder stoppen lassen. Zwei parallel laufende Timer mit nur einer Timer-Variablen lassen sich nicht mehr stoppen.
Ich gehe davon aus, dass die Verzögerung mit Ende des letzten Ereignisses (Bewässerung / Regen) starten soll.
-
@paul53 sagte in Blockly Timeout hält sich nicht an die eingestellte Zeit:
Ich gehe davon aus, dass die Verzögerung mit Ende des letzten Ereignisses (Bewässerung / Regen) starten soll.
Denkbar, aber so war es nicht umgesetzt. Wenn Du dir das Skript anschaust werden immer beide Timeouts gelöscht wen eine der beiden Bedingungen nicht mehr gegeben ist.
A.
-
@paul53 sagte in Blockly Timeout hält sich nicht an die eingestellte Zeit:
@jensven sagte: So wäre es evtl. einfacher:
Es fehlt die Oder-Verknüpfung der beiden Werte. Besser so:
Zwei Trigger-Einträge werden wie ein "oder" behandelt; das Blockly einen Beitrag höher wäre somit auch korrekt...
-
@fu_zhou Wo kommt denn der Wert "Moving time exceed" her? Kann es sein, dass der vom Mäher aktualisiert wird?
-
@guergen sagte: Zwei Trigger-Einträge werden wie ein "oder" behandelt
Nein, sondern nur Ereignis1 oder Ereignis2 (Ereignis = Wertänderung), nicht aber Wert1 oder Wert2.
-
@paul53 ??? DAS verstehe ich jetzt grade nicht.... Ereignis... Wertänderung...
-
@guergen
Der Elektroniker sagt Flanke: Es wird bei jeder Flanke (Wertänderung) getriggert unabhängig von der Richtung der Flanke. -
@paul53 Das habe ich verstanden (bin Elektriker), aber das ist bei dem oberen doch auch: "Wert von ObjektID" oder "Wert von ObjektID" vs "Wert". Bei beiden steht doch "wurde geändert" (Flankenrichtungsneutral)
-
@guergen sagte: "Wert von ObjektID" oder "Wert von ObjektID" vs "Wert".
Das "oder" ist entscheidend: "Wert von ObjektID" oder "Wert von ObjektID".
Es verhindert, dass bei der negativen Flanke eines Wertes der sonst-Zweig ausgeführt wird, wenn der andere Wert noch "wahr" ist. -
@paul53 Ahhhhhhh! Jetzt hab ich das auch verstanden
-
Viele Dank an Euren Input bisher, bin die Woche unterwegs und komme erst am Wochenende dazu, die Ideen zu verarbeiten.
@Asgothian Ich werde mich auf jedem Fall mal auf die Suche machen, ob ggf. der Rasenmäher tatsächlich die Mähzeit umschaltet.
@jensven Sobald die Mähzeitreduktion bei mähendem Mäher aktiv wird (-100%), bricht der Mäher den Mähvorgang ab und fährt nach Hause. -
Habe jetzt das vereinfachte Skript umgesetzt - funktioniert erst mal:
@paul53 : wo hast du denn das "oder" her? Ich habe nur das gefunden, wie jetzt bei mir im Skript, also Objekt - ODER - Objekt
vs.
Evtl. unterschiedliche Blockly/ Javascript-Versionen?
@Asgothian @guergen Es sieht möglicherweise danach aus, dass ich den Rasenmäher nicht im automatischen Zeitplan laufen lassen darf, sondern im manuellen, um die Mähzeitreduktion vorgeben zu können bzw. dass die Automatik sie nicht zurücknimmt. Ich habe jetzt auf manuell umgestellt und warte mal ab. Es gab seit dem letzten Jahr ein paar App- und Firmware-Updates, da ist das scheinbar auf Auto gestellt worden und ich habe mir nichts weiter dabei gedacht... -
@fu_zhou sagte: wo hast du denn das "oder" her?
Rechte Maustaste über dem Block und "externe Eingänge" auswählen.