NEWS
[Frage] grundsätzliche Frage zu timeout Block
-
@paul53 sagte in [Frage] grundsätzliche Frage zu timeout Block:
Falls Wert > 28 und vorheriger Wert <= 28
Wert und vorheriger Wert sind Eigenschaften des Trigger-Datenpunktes (unter Trigger).Hallo Paul, funktioniert das auch, wenn ich auf zwei verschiedene DP triggere? Überprüft blockly dann beide trigger Punkte mit Hilfe des Blockes "Wert"?
Grüße Andreas -
@weimaraner sagte:
funktioniert das auch, wenn ich auf zwei verschiedene DP triggere?
In der Regel funktioniert es nicht, es sei denn, es wird geprüft (anhand der ID), welcher Datenpunkt getriggert hat. Es ist also meist einfacher, zwei getrennte Trigger zu verwenden.
-
Ich habe es befürchtet...
Sollte ich dann daraus zwei getrennte Blocklys machen?oder kann man zwei trigger hier clever "verschachteln"?
Grüße Andreas -
@weimaraner sagte:
kann man zwei trigger hier clever "verschachteln"?
Ja, zwei Trigger in einem Blockly und den gemeinsamen Teil in eine Funktion packen.
Was soll das Skript machen ? -
Das soll das Skript machen.
@weimaraner sagte in [Frage] grundsätzliche Frage zu timeout Block:
Ursprungsproblem ist bei mir (immer noch), daß ich einen Datenpunkt "RolloSchattenModus" auf wahr schalten will sobald:
die Aussentemperatur größer als 26°C ist, verzögert um 20 Minuten
oder
die Aussentemperatur größer als 22°C und ein anderer Meßwert größer als 18°C ist, verzögert um 20 Minuten
Wenn der zweite Meßwert kleiner als 13°C ist, dann soll der Datenpunkt "RolloSchattenModus" sofort auf unwahr gehen.Bei meinen bisherigen Ansätzen wäre es aber zu einer Vielzahl von laufenden timouts gekommen, da der Temperatursensor relativ häufig (glaube so alle 30 Sekunden) Daten schickt und damit das Skript getriggert wird. Deshalb wollte ich nun deinem Ratschlag
@paul53 sagte in [Frage] grundsätzliche Frage zu timeout Block:
Falls Wert > 28 und vorheriger Wert <= 28
Wert und vorheriger Wert sind Eigenschaften des Trigger-Datenpunktes (unter Trigger).folgen und eine weitere Bedingung des trigger Punktes prüfen.
Da ich aber zwei Punkte triggere stand ich nun vor der Frage des heutigen Tages, ob das noch funktioniert.@paul53 sagte in [Frage] grundsätzliche Frage zu timeout Block:
und den gemeinsamen Teil in eine Funktion packen.
Kannst du mir dabei bitte helfen? Mit einer Funktion habe ich noch nicht gearbeitet und weiß ehrlich gesagt gar nicht, was diese macht oder wofür die gut ist. Ich würde es aber gerne lernen.
Danke und Grüße Andreashier das bisherige Skript:
-
@weimaraner Vorschlag:
-
@paul53
Super! Vielen Dank!
Jetzt will ich es auch noch vestehen.
Die Funktion darf so neben dem eigentlichen Skript "schweben"? Ist quasi innerhalb des blockly, aber ausgelagert?Auf der linken Seite werden die Variablen auf wahr und falsch gesetzt, dann "springt" man in die Funktion, die für alle Varianten da ist. Richtig?
Was genau wird an Punkt 1 geprüft? Ob die Variable diff und temp22 oder temp26 angelegt wurden? Es wird ja scheinbar nicht abgefragt, ob wahr oder falsch?
Was bedeutet bei Punkt 2 "nicht timeout"? Prüft man hier, ob der timeout schon läuft?
Was heißt bei Punkt 3 "falls nicht Wert von Objekt ID"? Ich verstehe diese Abfrage leider gar nicht.
Danke für Deine Mühe
Grüße Andreas -
@weimaraner sagte:
Auf der linken Seite werden die Variablen auf wahr und falsch gesetzt, dann "springt" man in die Funktion, die für alle Varianten da ist. Richtig?
Richtig.
@weimaraner sagte in [Frage] grundsätzliche Frage zu timeout Block:
Was genau wird an Punkt 1 geprüft? Ob die Variable diff und temp22 oder temp26 angelegt wurden? Es wird ja scheinbar nicht abgefragt, ob wahr oder falsch?
Doch, beide Variablen müssen wahr sein.
@weimaraner sagte in [Frage] grundsätzliche Frage zu timeout Block:alls
Was bedeutet bei Punkt 2 "nicht timeout"? Prüft man hier, ob der timeout schon läuft?
Ja.
@weimaraner sagte in [Frage] grundsätzliche Frage zu timeout Block:
Was heißt bei Punkt 3 "falls nicht Wert von Objekt ID"?
Das entspricht: "falls Wert vom Objekt ID RolloSchattenmodus == falsch". Wenn nicht ein Rollo direkt gesteuert wird, sondern es sich um einen virtuellen Datenpunkt handelt, kann auf die Abfrage verzichtet werden. In dem Fall sollte man nicht den Block steuere, sondern den Block aktualisiere verwenden.
Durch die Abfrage "falls nicht timeout" kann man auf die Abfrage der vorherigen Werte links verzichten, was den linken Block vereinfacht:
-
Variante mit einem virtuellen Datenpunkt "RolloSchattenmodus".
-
Es wird ja scheinbar nicht abgefragt, ob wahr oder falsch?
Das Ergebnis einer Abfrage ist false oder true. Da die Variable schon diese Werte enthält, ist ein Vergleich nicht nötig.
Anmerkung: Die verkürzte Abfrage if(Wert) kann man auch mit anderen Werten machen, wobei zu beachten ist, dass nur folgende Werte false ergeben:
- false
- 0 (Zahl)
- "" (Leerstring)
- null (Objekt)
- undefined
- NaN (Not a Number)
Alle anderen Werte ergeben true.
-
Alles verstanden! (Denke ich zumindest )
Vielen, vielen Dank! Die Erklärungen waren mal wieder Spitze und meine Lust auf die bunten Blöcke steigt immer weiter.
Ich werde das die Woche mal nachbauen, vielleicht kommen da noch Fragen auf...
Grüße Andreas