NEWS
[gelöst] flow-Sperre selbst bauen. Aber wie?
-
Ich möchte gerne meine Flows so modifizieren, dass an einer bestimmten Stelle des Flows ein Datenpunkt mit "IObroker in" abgefragt wird.
Ich nenne diesen Datenpunkt "Kindersicherung"
Wenn er aktiviert ist (true), dass soll der Flow stoppen bzw einen anderen Weg durchlaufen.
Ist er False, soll der Flow weiter gehen.
Hintergrund ist, dass kleine Kinder gerne mit Alexa spielen und gerne mal mitten in der Nacht Lichter ein und ausschalten.
Ich möchte dann also mit der Kindersischerung verhindern, dass der Status einer Lampe verändert werden kann. (über Alexa)
Wunsch:
Wemo-Adapter empfängt "an" oder "aus". dann geht es weiter zur Abfrage der Kindersicherung. Ist sie inaktiv, wird das Wemo-Kommando weiter geleitet. Ist sie aktiv, passiert nix oder der aktuelle Lampenstatus wird weiter geleitet.
Ich könnte es ja auch mit einer Funktion machen. Aber da gibt es ja imer nur einen Eingang.
Oder ein OR- bzw- AND-node (node-red-contrib-bool-gate). Aber da verstehe ich nicht wirklich, wie man den benutzt.
Die How-Tos sind sehr "bescheiden"
Boolesche Logik verstehe ist. Aber nicht, wie man den Node verwendet.
Alternative: Wie kann ich in einem functions-node auf Elemente von Abjekten zugreifen? Das habe ich irgendwie auch nicht hin bekommen
Hat jemand eine Idee?
Mittlerweile habe ich das Problem gelöst (s.u.)
-
Da kannst du dir ein msg-gate zimmern.
Gruß
-
Sorry. Ich bin zu doof dafür.
Danke für den Link. Ich verstehe aber schon garnicht, warum hier immer ein Trigger verwendet wird.
Und ich verstehe nicht, wie man 2 unterschiedliche Eingänge bekommen und verarbeiten kann.
Ein Eingang wäre ja, das Flag der Sicherung zu bekommen und ein anderer Eingang das Signal, das eigentlich vom Alexa oder Wemo-Node käme.
Gibt es eine Möglichkeit, in der Funktion irgendwie auf ein State eines Objektszuzugreifen? Dann wäre es für mich viel einfacher zu verstehn.
-
Ich habe nun weider viel gelernt.
Viel über die Funktionsweise von node-red.
Ergebnis: ich konnte mein Problem lösen und ist eigentlich ganz einfach.
man muss nur verstehen, wie die Informationen in node-red weiter geleitet werden und einen Knoten haben, der Zustände in iobroker auslesen kann. Und das innerhalb eines Flows.
Schlüssel ist ein Knoten, der auf ioBroker zugreifen kann und sowohl einen Eingang als auch einen Ausgang hat.
Ich glaube nicht, dass dieser Knoten schon im Grundset dabei ist. Leider weiß ich nicht mehr, wie er da im Laufe meiner Versuche reingekommen ist.
Wenn mir also jemand sagen kann, wie ich erkennen kann, über welches Paket ein Knoten rein gekommen ist, trage ich das gerne nach.
Auch kann ich leider im Moment keinen Screenshot senden, weil ich im Büro bin . Aber ich versuche es zu beschreiben….
Am Anfang des Flows habe ich einen WeMo-node, der den Flow über einen Trigger (Alexa Sprachkommando) startet.
Das Kommando soll einen Zustand im IObroker setzen. Hier ist es eine Lampe schalten.
im nächsten Schritt wandle ich den String im Payload in einen booleschen Wert um. Das kann theoretisch auch später erst gemacht werden weil es für mein Problem nicht relevant ist, aber ich hatte es halt so entschieden.
Nach der Umwandlung kommt der eigentliche Trick: Ich nehme das Umwandlungsergebnis und führe es in einen Node "iobroker.get" (oder so ähnlich)
Dieser Knoten macht nicht viel, ist aber für mich das Schweizer Taschenmesser.
Man kann nämlich hier Variablen von iobroker-Objekten auslesen und sie zusätzlich in das msg-Objekt hinzuzufügen ohne den ursprünglichen payload zu verändern.
Der nachgeschaltete Switch entscheidet dann, ob das Ergebnis weiter verarbeitet wird oder nicht.
Und schon habe ich eine Kindersicherung.
Sehr beim Verständnis über das msg-Objekt hat mir dieser Beitrag geholfen:
-
Sehr beim Verständnis über das msg-Objekt hat mir dieser Beitrag geholfen:
viewtopic.php?t=14632 `
Und wer hat es geschrieben? :lol:Es gibt eine Vielzahl von Lösungsansätzen.
Über einen Timer der eine Flow-Variablen setzt und die Kindersicherung ein- und ausschaltet. In einem Function-Node dann die Logik programmiert und den Ausgang für das Licht setzt.
Über die Logic-Nodes AND, OR, etc. Wobei die dort hinterlegte Logik nicht gerade ganz so verständlich ist. Man könnte es auch über die Variablen msg.payload und msg.topic lösen.
Vielleich möchtest du dich in Node-Red noch weiter einarbeiten. Als deutsche Literatur ist mir kürzlich diese Buch ins Auge gefallen:
https://www.elektor.de/iot-programmierung-mit-node-red
Ansonsten könnte ich diese Tutorials empfehlen:
http://www.notenoughtech.com/home-autom … ed-server/
http://www.notenoughtech.com/home-autom ... ginners-2/
http://www.notenoughtech.com/home-autom ... ginners-3/
http://www.notenoughtech.com/featured/n ... ginners-4/
http://www.notenoughtech.com/home-autom ... ginners-5/
http://www.notenoughtech.com/home-autom ... ginners-6/
https://notenoughtech.com/home-automati ... ginners-7/
https://www.youtube.com/watch?v=GJS_qgVEjQ0
https://www.youtube.com/watch?v=oRTb6bgGN_I
https://www.youtube.com/watch?v=jWjyIz4Jz58
-
.. Ich verstehe aber schon garnicht, warum hier immer ein Trigger verwendet wird… `
Der Trigger simuliert beim Original-Autor lediglich einen Impuls, der halt durchlassen werden soll oder eben nicht.
In deinem Fall kannst du den Trigger samt Inject-node einfach durch einen beliebigen ioBroker-State ersetzen.
Und die Schalter Erlaubt/Verboten kannst du natürlich ebenfalls durch einen einzigen ioBroker-state ersetzen, der muss halt (true=erlaubt/false=verboten) liefern.