NEWS
Node Red UND Verknüpfung
-
Hallo zusammen,
ich komme gerade in Node-Red nicht weiter.
Und zwar habe Alexa über einen virtuellen Schalter eingebunden, womit ich das Garagentor Auf und Zu fahren kann (Ansteuerung über Loxone). Das funktioniert auch soweit (also die ersten vier Nodes von links).
Nun ist es aber hin und wieder so, dass der Befehl irgendwo unterwegs verloren geht und das Tor nicht reagiert (1 von 5 Mal). Das nervt natürlich, da man sich nicht drauf verlassen kann.
Ich wollte nun einen Hosenträger einbauen, in dem ich nach 6s über "Position Garagentor" den aktuellen Stand abfrage (0 -> Tor zu -> TRUE, 1-> Tor offen -> TRUE). Wenn also das Tor nach dem Öffnen-Befehl über Alexa nach 6s immer noch Geschlossen (oder offen) ist, möchte ich den entsprechenden Befehl erneut absenden.Eigentlich recht einfach, aber ich verzweifel an dem UND Baustein. Der wird nach den 6s TRUE, obwohl "TOR zu" nicht mehr auf TRUE steht. Vermutlich weil Node-Red eventbasiert funktioniert und ich kein False schicke? Habe auch was von unterschiedlichen Topics gelesen? Kann mir jemand weiterhelfen?
Danke und Grüße
Eimerkind -
@eimerkind Das Problem ist, dass Du nicht verstanden hast, wie NodeRed funktioniert. Der UND Baustein ist zwar eh überflüssig, aber grundsätzlich ist es so dass Verknüpfungen nur innerhalb EINES Nachrichtenobjektes funktionieren.
Diese Teile werden nie funktionieren, da die Nachrichten aus beiden Strängen kommen und es können nicht Eigenschaften von unterschiedlichen Nachrichtenobjekten verglichen werden.
Lösung ist, dass Du mit unterschiedlichen topics ein Nachrichtenobjekt mit einer JOIN Node in einem Nachrichtenobjekt zusammenfasst deren Eigenschaften Du dann vergleichen kannst.
Alternativ arbeitest Du mit Kontextvariablen.
-
@mickym Dass ich das mit den Flows noch nicht verstanden habe, unterschreibe ich dir zu 100% Das will irgendwie nicht in meinen Kopf rein, da ich beruflich auch nur mit den Logikbausteinen (Simulink) arbeite...
Dass das generell nicht tut, würde ich relativ bewerten: Denn der Ausgang wird ja TRUE wenn ich über "Tor offen" ein TRUE sende und die "Verzögerung 6s" auch als Boolean oder "1" ausgebe. Es wird aber auch TRUE, wenn "Tor offen" wieder auf False sein sollte (das ist es auch der Logik nach... aber da bekomm ich wieder den Knoten im Kopf mit den Flows...) Aber egal, der Aufbau ist so sicher nicht richtig, daher würde ich gerne deinen Vorschlag umsetzen.
Ich befürchte aber, du musst ein zwei Ebenen höher einsteigen für mich
Mein laienhaftes Verständnis: Ich setzte für die beiden geplanten Eingänge "Tor offen" und "Verzögerung 6s" jeweils eine unterschiedliche Topic (irgendwie mit Change) und führe die dann über JOIN zusammen. Und damit mache ich dann genau was?
Grüße
Sascha -
@eimerkind sagte in Node Red UND Verknüpfung:
….
Mein laienhaftes Verständnis: Ich setzte für die beiden geplanten Eingänge "Tor offen" und "Verzögerung 6s" jeweils eine unterschiedliche Topic (irgendwie mit Change) und führe die dann über JOIN zusammen. Und damit mache ich dann genau was?
Grüße
Saschaich kann dir erst Ende der nächsten Woche topic einen Flow machen, aber im Prinzip genauso, wie Du beschrieben hast.
das was aus Tür offen kommt, nennst du msg.topic zum Beispiel „position“, was aus der Verzögerung kommt zum Beispiel msg.topic „command“. Mit der Join nachricht lässt du ein payload Objekt erstellen, aus msg.topic, wobei die Anzahl der Nachrichten 2 ist und den Haken bei jeder weiteren Nachricht setzen oder wenn immer command und position neu kommen müssen, dann den Haken weglassen.
nun erhälst du ein kombiniertes Nachrichtenobjekt, was immer den Status aus beiden Zweigen enthält. Deine msg.payload wird also so aussehen:
{ "position": true, "command" : true }
nun bekommst Du also immer ein kombiniertes Objekt, egal welcher Ast triggert und nun kannst du die beiden Eigenschaften vergleichen- entweder über Deine UND Node, die kenne ich nicht oder in dem Du über eine Change Node und JSONATA beide Eigenschaften Deines payload Objektes verknüpfst:
Also
payload.position and payload.command
Wenn true aus der UND Verknüpfung rauskommt, dann sind ja Befehl und Position identisch, also kein Handlungsbedarf, wenn false, kannst ja das Kommando nochmal absetzen.
Wie gesagt, ich kann dir erst Ende nächster Woche konkreter helfen, wenn dir diese Erklärung nicht ausreicht, ansonsten kann vielleicht @Marc-Berg aushelfen.
-
@mickym sagte in Node Red UND Verknüpfung:
ansonsten kann vielleicht @Marc-Berg aushelfen.
Ich fürchte, ich kann nicht in eurem Sinne helfen, da ich weder UND noch SPLIT oder JOIN Nodes oder Kontextvariablen bei mittlerweile ca. 40-50 produktiven Flows jemals gebraucht hätte. Und würde ich sie nutzen, dann ...
@Eimerkind sagte
bekomm ich wieder den Knoten im Kopf
Bislang konnte ich ähnliche Aufgabenstellungen immer über diese einfache Logik umsetzen (schematisch):
Ich nehme einen Trigger (bei dir wohl der Befehl "Tor zu/auf) und sammle dann alle benötigten Informationen seriell aus Datenpunkten zusammen. Diese Daten befinden sich nun alle in einem Nachrichtenobjekt und ich kann sie über JSONata und eine CHANGE oder SWITCH Node auswerten, UND/ODER verknüpfen, damit Aktionen auslösen oder Daten schreiben. Und das Ganze ohne gehirnverknotende Verzweigungen.
Kenne Loxone nicht, aber ich gehe mal davon aus, dass alle relevanten Infos in Datenpunkten des Adapters stecken?
-
So hier nochmal die Lösung mit der JOIN Node - um ein Objekt aus Position und Kommando zu erstellen:
nun sind aus beiden Ästen die Werte in einem Nachrichtenobjekt und können verglichen werden. Ich nutze wie gesagt keine UND Nodes - aber im Prinzip sollte man damit auch die Eigenschaften kombinieren können. Ich nutze einfach mal eine herkömmliche switch Node. Ob es eine UND Verknüpfung ist oder ob es nicht sinnvoller ist auf Gleichheit zu prüfen, dass also Kommando und Position übereinstimmt.
Hier zum Test und Import: