NEWS
Datenpunkt mit 4 vier verschiedene Zustände
-
Ich bräuchte einen Denkanstoß
Folgendes Problem was ich gerne mit Node Red lösen möchte. Ein Garagentor wird über ein Relais (Tasmota) angesteuert und fällt selbständig wieder ab, also der üblich Impuls zur externen Ansteuerung. Der gleiche Controller (esp8266) fragt auch die beiden Zustände "Tor AUF" bzw "Tor ZU" ab und übermittelt diese per MQTT.
Jetzt möchte ich einen Datenpunkt füllen mit folgenden Zuständen...Tor ist geschlossen ≜ 0
Tor öffnet sich ≜ 1
Tor ist geöffnet ≜ 2
Tor schließt sich ≜ 3Geschlossen und geöffnet sind nicht das Problem. Da ich für den Aktor keinen eindeutigen Zustand habe kann ich diesen nicht abfragen...bzw denke ich das. Ich möchte erkennen ob das Tor gerade geöffnet bzw geschlossen wird. Ich hoffe man wird schlau aus dem was ich hier von mir gegeben habe. Das Ganze ist übrigens für die Visualisierung gedacht. Vermutlich denke ich mal wieder viel zu kompliziert
-
@noah3112 Kann man da den vorherigen Zustand nicht abfragen?
Wenn alter Zustand geschlossen und jetzt nicht mehr -> es wird geöffnet
Wenn alter Zustand geöffnet und jetzt nicht mehr -> es wird geschlossen -
@mcu Wow schnelle Antwort...Danke! Doch klar kann man. Ich sage es doch zu kompliziert gedacht. wie könnte man das umsetzen? In eine Variable speichern?
-
@noah3112 Keine Ahnung, habe leider kein node-red. Ist vielleicht irgendwann ein Thema.
-
@mcu Ich versuche mich auch erst seit kurzem in Node Red. Vielleicht hätte ich es mit Blockly schon gelöst. Aber ich möchte gerne in Node Red weiterkommen. Trotzdem danke fürs antworten.
-
@noah3112 @mickym ist der node-red Spezialist.
-
@mcu Ich weiß
-
Also:
Hier ist Node Red leider etwas im Nachteil gegenüber Blockly, da der vorige Wert nicht ausgelesen werden kann, aber man kann das auf verschiedene Art und Weise ausgleichen. Ihr könnt ja zur Abwechslung auch mal ein Issue - als Erweiterungs-Request auf gitHub erstellen. Aber was man dafür kann ( dass man aktiv - mit einer get Node - einen Wert auslesen kann, auch wenn ein anderer Wert triggert).
Eventuell braucht man ja auch nicht mal eine Variable, aber man braucht quasi ein Trigger der zumindest sagt, ob das Tor in Bewegung ist oder nicht.
Wenn dies Triggert (also Tor in Bewegung ist) liest man den Zustandsdatenpunkt aus und kann somit die Bewegungsrichtung festlegen. Ist das Tor still, sollte dann der Zustandsdatenpunkt automatisch aktualisiert werden.
Das wäre meine präferierte Lösung (siehe Flow am Ende dieses Posts).
Ansonsten kann man mit NodeRed nur den aktuellen Wert mit dem vorigen Wert in einer switch Node relativ vergleichen.
Wenn man absolute Werte benötigt, um diese mit dem vorangegangenen Wert zu vergleichen - dann muss man halt wirklich eine function Node bemühen:
Diese function Node gibt den vorigen (msg.previous) und den aktuellen Wert (msg.payload) aus.
var previous = context.get('previous') if (previous !== undefined){ msg.previous=previous; } context.set('previous',msg.payload) return msg;
Ansonsten - wie gesagt wenn man ein Trigger hat, der meldet dass das Tor in Bewegung ist (Relais Level) oder was weiss ich, dann könnte der Flow in etwa so aussehen.
Ohne einen Trigger, der signalisiert, dass das Tor in Bewegung ist, wird das aber nichts.
-
@mickym Moin
Das ist doch schon mal ein Ansatz. Danke! Eigentlich habe ich ja den Trigger das sollte doch zu schaffen sein. Ich werde es testen und ein Feedback geben.