Logische Verknüpfung von Inputs in node-red?

Rund um die Software von Revolution Pi
Post Reply
Rapanui
Posts: 8
Joined: 21 Jan 2020, 17:30
Answers: 0

Logische Verknüpfung von Inputs in node-red?

Post by Rapanui »

Hallo Kunbus-Forum,

ein Forenneuling hier. Ich habe gerade die Gelegenheit einen RevPi mit Input-Modul zu testen. Grundsätzlich läuft bisher alles so, wie es soll. Sehr schön.

Zum Auslesen der Input-Pins benutze ich mit Erfolg eure node-red-contrib-revpi-nodes 1.0.2, vielen Dank für die Bereitstellung an den Maintainer!!

Ich scheitere allerdings gleich an der Lösung einer vermeintlich einfachen Problemstellung:

Ich möchte gerne die Werte der Inputs logisch verknüpfen.

Nehmen wir als Beispiel den einfachsten Fall, daß I_1 und I_2 logisch AND-verknüpft werden sollen.

Die Inputs liefern mir 1 oder 0. Alle Bool- bzw. Logic-Gatter, die ich über den Paletten-Manager von nodered gefunden habe, können mit diesen Eingangswerten allerdings nicht umgehen. Sie brauchen offenbar immer noch ein eindeutiges "topic" zusätzlich, damit diese zwei Inputs unterscheidbar sind.

Ich habe die Werte 1 und 0 auch mit dem change-node schonmal nach true und false gewandelt, aber auch mit diesen Werten scheitern die Logik-Vernüpfungen anscheinend an der fehlenden Unterscheidbarkeit der beiden Inputs mangels topic.

Hoffentlich habe ich nur ein Neulings-typisches Brett vor dem Kopf, denn ich kann mir nicht so recht vorstellen, daß so grundlegende Operationen mit eueren revpi-nodes unter node-red nicht möglich sein sollen.

Wer hat eine Idee?

Schönen Tag noch
jgerlach-erminas
Official 3rd Party Support Erminas
Posts: 38
Joined: 22 Jan 2020, 14:31
Answers: 0

Re: Logische Verknüpfung von Inputs in node-red?

Post by jgerlach-erminas »

Hallo Rapanui,

du hast da 2 Möglichkeiten:

1. Mittels einem change node den messages das nötige topic noch anhängen.
2. Du benutzt eine function Node um die Logik-Bedingung zu überprüfen.

Ich habe einen Beispiel flow mit den 2 Möglichkeiten erstellt:

Code: Select all

[{"id":"75ba1a8a.8f2b6c","type":"change","z":"775a9f3b.26bc4","name":"I_1","rules":[{"t":"move","p":"payload.I_1","pt":"msg","to":"payload","tot":"msg"},{"t":"set","p":"topic","pt":"msg","to":"I_1","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":566.5,"y":118,"wires":[["d81d29a8.d6e7a"]]},{"id":"79ce6dfd.66a98c","type":"debug","z":"775a9f3b.26bc4","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":1112,"y":399,"wires":[]},{"id":"7addc8fb.420a98","type":"revpi-multiple-input","z":"775a9f3b.26bc4","server":"92663e35.c2e5d8","inputPinList":["I_1","I_2"],"inputpin":"I_1,I_2","x":299,"y":396,"wires":[["4365492.cbb7438"]]},{"id":"4365492.cbb7438","type":"function","z":"775a9f3b.26bc4","name":"I_1 AND I_2","func":"\n\nmsg.payload=(msg.payload.I_1==1 && msg.payload.I_2==1);\n\nreturn msg;","outputs":1,"noerr":0,"x":685.5,"y":397,"wires":[["79ce6dfd.66a98c"]]},{"id":"867ee0aa.96174","type":"debug","z":"775a9f3b.26bc4","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":1121,"y":167,"wires":[]},{"id":"85d2bba5.ab3b38","type":"change","z":"775a9f3b.26bc4","name":"I_2","rules":[{"t":"move","p":"payload.I_2","pt":"msg","to":"payload","tot":"msg"},{"t":"set","p":"topic","pt":"msg","to":"I_2","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":567,"y":215,"wires":[["d81d29a8.d6e7a"]]},{"id":"d81d29a8.d6e7a","type":"BooleanLogic","z":"775a9f3b.26bc4","name":"I_1 AND I_2","operation":"AND","inputCount":"2","topic":"result","x":817.5,"y":168,"wires":[["867ee0aa.96174"]]},{"id":"e56ef90c.4835c8","type":"revpi-multiple-input","z":"775a9f3b.26bc4","server":"92663e35.c2e5d8","inputPinList":["I_1","I_2"],"inputpin":"I_1,I_2","x":312,"y":167,"wires":[["75ba1a8a.8f2b6c","85d2bba5.ab3b38"]]},{"id":"92663e35.c2e5d8","type":"revpi-server","z":0,"host":"127.0.0.1","port":"8000"}]
Benutzt habe ich das Paket node-red-contrib-boolean-logic, aber bei anderen sollte das Prinzip ähnlich sein. Wenn das dir nicht weiterhilft, sag ruhig nochmal Bescheid. Freut uns zu hören, dass sonst alles geklappt hat.
Gruß,
Jonas
Rapanui
Posts: 8
Joined: 21 Jan 2020, 17:30
Answers: 0

Re: Logische Verknüpfung von Inputs in node-red?

Post by Rapanui »

Wow, vielen Dank für die Hilfestellung, Jonas!

Ich war gestern auch schon auf einer ähnlichen Spur, indem ich einen Change-node zwischengeschaltet hatte, der ein eindeutiges msg.topic pro Pin ergänzt hat. Somit kann ich selbst auch noch eine dritte Lösungsmöglichkeit beisteuern:

Code: Select all

[{"id":"8913d5fc.b6d018","type":"inject","z":"5a9d1470.3fc50c","name":"Get I_1","topic":"","payload":"I_1","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":280,"wires":[["2f238b39.3285fc"]]},{"id":"2f238b39.3285fc","type":"revpi-getpin","z":"5a9d1470.3fc50c","server":"edd452ff.4e1f88","inputpin":"I_1","getoverwritevalue":false,"x":360,"y":280,"wires":[["65b3fa23.8fb38c"]]},{"id":"5b793dca.d5da64","type":"inject","z":"5a9d1470.3fc50c","name":"Get I_2","topic":"","payload":"I_2","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":340,"wires":[["83dedde6.c95ba"]]},{"id":"83dedde6.c95ba","type":"revpi-getpin","z":"5a9d1470.3fc50c","server":"edd452ff.4e1f88","inputpin":"I_3","getoverwritevalue":true,"x":370,"y":340,"wires":[["b6c33bae.c3c69"]]},{"id":"87d12314.0b7be","type":"inject","z":"5a9d1470.3fc50c","name":"Get I_3","topic":"","payload":"I_3","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":400,"wires":[["83dedde6.c95ba"]]},{"id":"65b3fa23.8fb38c","type":"change","z":"5a9d1470.3fc50c","name":"topicsetter1","rules":[{"t":"set","p":"topic","pt":"msg","to":"Pfosten1","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":590,"y":280,"wires":[["ec75414e.5c9cb"]]},{"id":"b6c33bae.c3c69","type":"change","z":"5a9d1470.3fc50c","name":"topicsetter2","rules":[{"t":"set","p":"topic","pt":"msg","to":"Pfosten2","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":590,"y":340,"wires":[["ec75414e.5c9cb"]]},{"id":"ec75414e.5c9cb","type":"BooleanLogic","z":"5a9d1470.3fc50c","name":"","operation":"AND","inputCount":"2","topic":"result","x":860,"y":300,"wires":[["3f7517e4.301888"]]},{"id":"3f7517e4.301888","type":"BDebug","z":"5a9d1470.3fc50c","name":"Debug","x":1090,"y":300,"wires":[]},{"id":"edd452ff.4e1f88","type":"revpi-server","z":0,"host":"127.0.0.1","port":"8000"}]
Als ich die Lösungen heute einem Kollegen gezeigt habe, musste ich mir die Frage gefallen lassen, warum die Problemstellung nur so "umständlich" über Change-Nodes oder selbstgeschriebene Java-Funktionen zu lösen sei. Ich fühlte mich da etwas entwaffnet, denn mein spontaner Eindruck war ja ähnlich gewesen :)

Was spricht eigentlich dagegen, den revpi-getpin node selbst schon mit einem eindeutigen msg.topic auszustatten?

Das wäre für Einsteiger deutlich intuitiver und vereinfacht die grafische Darstellung der nodes nochmals. Obwohl die gezeigten Lösungen sicherlich gut funktionieren, hatte ich jetzt schon leichte Schwierigkeiten mit der Akzeptanz von Node-red in meinem Umfeld.

Ich selbst bleibe da jetzt aber dran, wie ich sehe, ist die Flexibilität ja durchaus gegeben!

Grüsse
jgerlach-erminas
Official 3rd Party Support Erminas
Posts: 38
Joined: 22 Jan 2020, 14:31
Answers: 0

Re: Logische Verknüpfung von Inputs in node-red?

Post by jgerlach-erminas »

Hallo,
Was spricht eigentlich dagegen, den revpi-getpin node selbst schon mit einem eindeutigen msg.topic auszustatten?
Wir haben die Idee bereits aufgegriffen und werden das vorrausichtlich beim nächsten Release mit einbauen.

Danke für das Feedback,
Jonas
Rapanui
Posts: 8
Joined: 21 Jan 2020, 17:30
Answers: 0

Re: Logische Verknüpfung von Inputs in node-red?

Post by Rapanui »

Das klingt gut, freue mich schon drauf! Top!

Danke meinerseits
Rapanui
Posts: 8
Joined: 21 Jan 2020, 17:30
Answers: 0

Re: Logische Verknüpfung von Inputs in node-red?

Post by Rapanui »

Hallo nochmal,

ich sehe gerade, wie ein normaler Raspberry Pi input node gestaltet ist. Dort wird heute immer ein zusätzlicher topic string generiert:

Aus der zugehörigen Node Help:
----------------------------------------------------------------------
Raspberry Pi input node.
Generates a msg.payload with either a 0 or 1 depending on the state of the input pin.
Outputs

payload number
the payload will be a 1 or a 0.
topic string
the topic will be set to pi/{the pin number}.
-----------------------------------------------------------------------

Sehr wahrscheinlich wird euch das bekannt sein, nur falls nicht, kann es ja nochmal als Anregung für den "node-red-contrib-revpi-node" dienen.

Grüsse
jgerlach-erminas
Official 3rd Party Support Erminas
Posts: 38
Joined: 22 Jan 2020, 14:31
Answers: 0

Re: Logische Verknüpfung von Inputs in node-red?

Post by jgerlach-erminas »

Hallo Rapanui,

die RevPi Nodes enthalten nun endlich standardmäßig ein msg.topic. Du kannst das Softwaremodul direkt über die Palette in Node-RED aktualisieren. Würde mich freuen zu hören, ob es für dich so passt.
Grüße,
Jonas
Rapanui
Posts: 8
Joined: 21 Jan 2020, 17:30
Answers: 0

Re: Logische Verknüpfung von Inputs in node-red?

Post by Rapanui »

Hallo Jonas,
sorry, habe deine Mitteilung gerade erst gelesen - die letzten Wochen waren bisher einfach zu chaotisch.
Ich werde es auf jeden Fall sobald möglich testen und dann nochmal Feedback geben. Bin jetzt schon überzeugt, daß wieder gute Arbeit geleistet wurde.

Ganz vielen Dank schonmal!
Rapanui
Posts: 8
Joined: 21 Jan 2020, 17:30
Answers: 0

Re: Logische Verknüpfung von Inputs in node-red?

Post by Rapanui »

So, mein Nachtrag:

Habe jetzt die revpi-nodes von 1.0.3 auf 1.0.5 wie geraten über die Palette aktualisiert und anschließend sicherheitshalber den noderedrevpinodes-server und nodered restartet.

Der Status der IO-Pins lässt sich dank neuem msg.topic jetzt direkt von einem Logik-Node auswerten! Sehr schön!

Nur zur Veranschaulichung mein Test-Flow als Bildanhang.

Oben im Bild wird nach Triggerung der Pin I_1 direkt gelesen.
In der Mitte des Flows Schicke ich einen Payload "I_2" und der revpi-getpin liest diesen String und holt dann entsprechend den Status von Pin I_2.
Unten habe ich noch einen switch im dashboard verknüpft, der je nach Stellung true oder false liefert.

Frohe Ostern und danke nochmal!
Attachments
revpi-nodes-1.0.5-test.png
revpi-nodes-1.0.5-test.png (23.17 KiB) Viewed 22598 times
Post Reply