Eingang zwischen zwei Ausängen umschalten

Hallo Leute
Ich habe ein Problem bei dem ich eure Hilfe benötige.
Ich habe mir einen Flow gebastelt, der aber nicht richtig funktioniert.

Der Injet-Nod liefert einen Text (msg.payload.E1 "HALLO") dieser soll in Abhängikeit von von "Injet E2" (der Toggelt true/false) bei Ausgang 1 oder Ausgang 2 landen.
Das "HALLO" kommt immer bei Ausgang 2 raus egal was der INJET-E2 toggelt.

Ich bin neu bei Node-red, und hoffe auf eure Hilfe.

type or paste code here

[{"id":"439acc0ded3ff4d2","type":"inject","z":"a5911143974613fb","name":"OPEN","props":[{"p":"payload.E1","v":"HALLO","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":370,"y":220,"wires":[["1ebe148d41a313de"]]},{"id":"af39ea09f999f888","type":"InjectUltimate","z":"a5911143974613fb","name":"Inject","topic":"E2","curVal":true,"outputJSON":"{ \n\t\"payload\":\"E2\",\n\t\"topic\":\"false\"\n}","x":360,"y":380,"wires":[[],[],["1ebe148d41a313de"],[]],"outputLabels":["","","Toggle",""]},{"id":"1ebe148d41a313de","type":"function","z":"a5911143974613fb","name":"JSON","func":"if (msg.payload.E1 !== undefined) {\n if (msg.payload.E2 === true) {\n return [null, { payload: msg.payload.E1 }]; // E1 → Ausgang 1\n } \n else{\n return [{ payload: msg.payload.E1 }, null];\n }\n}\nelse{\n\nreturn null; // Falls kein E1-Signal existiert, keine Nachricht senden\n} ","outputs":2,"timeout":"1","noerr":0,"initialize":"","finalize":"","libs":[],"x":570,"y":300,"wires":[["d4046f0b4c1128fd"],["b468829235f5493d"]]},{"id":"b468829235f5493d","type":"debug","z":"a5911143974613fb","name":"Ausgang 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":770,"y":380,"wires":[]},{"id":"d4046f0b4c1128fd","type":"debug","z":"a5911143974613fb","name":"Ausgang 2","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":770,"y":220,"wires":[]}]

Vielen Dank
Johannes

Dein sample-code hat nen fehler und kann nicht importiert werden... zumindest fuer mich.

Zusaetzlich kannst du auch noch ein Pic uploaden, das macht das verstaendnis n bisl einfacher

Hallo Johannes

Im Inject Node setzt du E1 aber nicht E2, also die Nachricht was in die Funktion Node kommt sieht dann so aus:

msg.payload.E1 = "HALLO"

dein Funktion Node macht folgendes:

if (msg.payload.E1 !== undefined) {
 if (msg.payload.E2 === true) {
 return [null, { payload: msg.payload.E1 }]; // E1 → Ausgang 1
 } 
 else{
 return [{ payload: msg.payload.E1 }, null];
 }
}
else{

return null; // Falls kein E1-Signal existiert, keine Nachricht senden
}

damit wird immer nur return [{ payload: msg.payload.E1 }, null]; ausgefuehrt und daher dein Ergebnis.

Was der "InjectUltimate" Node macht weiss ich nicht also kann dazu nichts sagen aber dein Funktion-Node Logik sieht richtig aus.

P.S. den return null brauchst du nicht - auch ohne return passiert genau nichts.

Also:

if (msg.payload.E1 !== undefined) {
    if (msg.payload.E2 === true) {
        return [null, { payload: msg.payload.E1 }]; // E1 → Ausgang 1
    }
    else {
        return [{ payload: msg.payload.E1 }, null];
    }
}

wuerde auch funktionieren.

Hallo Gregorius
Danke für deine Antwort.
Der "InjectUltimate" gibt am obersten Ausgang immer "true" aus, am nächsten darunter kommt immer "false" raus, beim dritten Ausgang wird zwischen "true" und "false" getoggel und am letzten
Ausgang kann ein beliebiger "payload" hinterlegt werden. Die Funktion wäre folgende:
Beim Eingang E1 kommt vom Shelly-I4 ein Schaltsignalsignal, das in Abhängikeit von E2 beim Ausgang A1 oder A2 ankommen.

kannst du mal ein Beispiel fuer das was beim InjectUltimate rausgekommt posten? Also ein Beispiel msg was vom InjectUltimate kam ist was ich meine.

reicht ein debug-nod vom InjetUltimad?


[{"id":"439acc0ded3ff4d2","type":"inject","z":"a5911143974613fb","name":"OPEN","props":[{"p":"payload.E1","v":"HALLO","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":370,"y":220,"wires":[["1ebe148d41a313de"]]},{"id":"1ebe148d41a313de","type":"function","z":"a5911143974613fb","name":"JSON","func":"//if (msg.payload.E1 !== undefined) {\n    if (msg.payload.E2 === false) {\n        return [null, { payload: msg.payload.E1 }]; // E1 → Ausgang 1\n    } \n    else{\n        return [{ payload: msg.payload.E1 }, null];\n    }\n//}\n//else{\n\nreturn null;  // Falls kein E1-Signal existiert, keine Nachricht senden\n//} ","outputs":2,"timeout":"1","noerr":0,"initialize":"","finalize":"","libs":[],"x":570,"y":300,"wires":[["d4046f0b4c1128fd"],["b468829235f5493d"]]},{"id":"b468829235f5493d","type":"debug","z":"a5911143974613fb","name":"Ausgang 1","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":770,"y":380,"wires":[]},{"id":"d4046f0b4c1128fd","type":"debug","z":"a5911143974613fb","name":"Ausgang 2","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":770,"y":220,"wires":[]},{"id":"c5cf57550dd1b1b2","type":"InjectUltimate","z":"a5911143974613fb","name":"Inject","topic":"E2","curVal":true,"outputJSON":"{ \n\t\"payload\":\"hello\",\n\t\"topic\":\"1\"\n}","x":340,"y":380,"wires":[[],[],["1ebe148d41a313de","53b84e7fc147585b"],[]]},{"id":"53b84e7fc147585b","type":"debug","z":"a5911143974613fb","name":"debug 9","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":560,"y":440,"wires":[]}]

Es scheint also ob der E1 vom "Inject E2" node garnicht gesetzt wird. Dein Screenshot zeigt nur ein Wert fuer E2.

Oder hast du den Debug node auf nur "msg.payload.E2" beschraenkt? Das hilft dann natuerlich nicht - lieber die komplette Nachrichten loggen als nur teile.

EDIT:

Ah sorry, ich sehe gerade das du den Debug nicht beschraenkt hast: