Payload negieren: true>false, false>true

Node-RED als CCU3/RaspberryMatic Addon, WebApp, HomeKit, ...

Moderator: Co-Administratoren

Antworten
VolGra
Beiträge: 86
Registriert: 24.03.2012, 11:40
Hat sich bedankt: 19 Mal
Danksagung erhalten: 2 Mal

Payload negieren: true>false, false>true

Beitrag von VolGra » 12.04.2024, 14:18

Eigentlich habe ich eine ganz simple Aufgabenstellung: Wie schon im Betreff geschrieben, will ich einen Payload ganz simpel negieren. Nun dachte ich, ganz einach einen change zu nehmen und dort den Payload wie folgt zu "Änderen":
1. Regel: Ändere msg.Payload - Suchen nach true - Ersetzen durch false
2. Regel: Ändere msg.Payload - Suchen nach false - Ersetzen durch true.
Vorm deployen steht der Trigger auf true. Nach deployen setze ich ein false und erhalte richtigerweise ein true. Wenn ich nun true triggere, bleibt der Ausgang auf true. Das gleiche Ergebnis erhalte ich, wenn ich die beiden Regeln auf je einen change verteile und beide Eingänge dann auf den Trigger sowie beide Ausgänge auf den value-Eingang lege.
Ist die change-Node hier der falsche Ansatz oder was mache ich hier nur verkehrt?
Für hilfreiche Antworten danke ich im Voraus

SGiersch
Beiträge: 240
Registriert: 28.12.2007, 07:33
Hat sich bedankt: 4 Mal
Danksagung erhalten: 2 Mal
Kontaktdaten:

Re: Payload negieren: true>false, false>true

Beitrag von SGiersch » 12.04.2024, 15:53

Der schnellste Weg.
Nimm ein Function Node und schreib vollenden Code rein.

Code: Alles auswählen

msg.payload = !msg.payload;
return msg;

By
Stephan

VolGra
Beiträge: 86
Registriert: 24.03.2012, 11:40
Hat sich bedankt: 19 Mal
Danksagung erhalten: 2 Mal

Re: Payload negieren: true>false, false>true

Beitrag von VolGra » 12.04.2024, 20:00

Klappt so, wie soll. Vielen Dank
Nun würde ich gerne noch als nicht_programmieren_könnender_Anfänger daraus lernen: Was war mit meiner Change-Lösung verkehrt und was sagt der mir gesendete Code?
Alternativ: Sind erwerbbare Bücher über Node-RED für RedMatic 1:1 verwendbar? Ich habe da meine Zweifel, wenn ich mir dort Lösungswege anschaue...

SGiersch
Beiträge: 240
Registriert: 28.12.2007, 07:33
Hat sich bedankt: 4 Mal
Danksagung erhalten: 2 Mal
Kontaktdaten:

Re: Payload negieren: true>false, false>true

Beitrag von SGiersch » 12.04.2024, 22:40

Ganz ehrlich, über deinen Code habe ich nicht nachgedacht.

Der gesendete Code ist recht einfach zu interpretieren.
Nachfolgend wird der eingehende Payload der Nachricht (rechte Seite des Gleichheitszeichen) mit dem "!" negiert und dann mit dem Gleichheitszeichen dem neuen Payload der Nachricht wieder zugewiesen.
In der zweiten Zeile wird die "neue" Nachricht zur Ausgabe bereitgestellt.
msg.payload = !msg.payload;
return msg;
Bücher für NodeRed gibt es.
Für den Anfang helfen aber auch die diversen Websites die so zu finden sind.
Dein Wissen wird dann mit den Problemen, die sich dir stellen, wachsen.


VolGra
Beiträge: 86
Registriert: 24.03.2012, 11:40
Hat sich bedankt: 19 Mal
Danksagung erhalten: 2 Mal

Re: Payload negieren: true>false, false>true

Beitrag von VolGra » 13.04.2024, 09:45

Hallo Baxxy,
danke, kommt mit in meine Sammlung

Benutzeravatar
Henke
Beiträge: 1527
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 307 Mal

Re: Payload negieren: true>false, false>true

Beitrag von Henke » 13.04.2024, 15:49

VolGra hat geschrieben:
12.04.2024, 20:00
Sind erwerbbare Bücher über Node-RED für RedMatic 1:1 verwendbar? Ich habe da meine Zweifel, wenn ich mir dort Lösungswege anschaue...
Was ist RedMatic?
RedMatic ist ein AddOn mit dem auf einfache Weise NodeRed auf diversen Systemen installiert werden kann. Zusätzlich enthält es auch eine Homematic Anbindung.

Bücher über NodeRed sind also definitiv anwendbar.
Durch den hohen Verbreitungsgrad ist im Netz aber zu fast jedem Problem eine Lösung zu finden. Bücher bzw. Videokurse sind mMn überflüssig.

VolGra
Beiträge: 86
Registriert: 24.03.2012, 11:40
Hat sich bedankt: 19 Mal
Danksagung erhalten: 2 Mal

Re: Payload negieren: true>false, false>true

Beitrag von VolGra » 13.04.2024, 18:32

SGiersch hat geschrieben:
12.04.2024, 15:53
Der schnellste Weg.
Nimm ein Function Node und schreib vollenden Code rein.

Hallo Stephan,
hallo in die Runde
gibt es eine derartig elegante Lösung auch für on_time?: Habe viele wired-geräte, welche im value keine on_time anbieten. Und genau dafür brauche ich für die Umstellung auf Redmatic eine Lösung, die auf einen boolschen Wert eine fest programmierbare Einschaltphase mit true liefert. Suchte erfolglos in den time-Nodes schon den ganzen Tag und auch hier im Forum nach einer Lösung.
Danke im Voraus für alle guten Tipps

drose28357
Beiträge: 183
Registriert: 14.10.2011, 09:05
System: CCU
Wohnort: Bremen
Hat sich bedankt: 57 Mal
Danksagung erhalten: 7 Mal

Re: Payload negieren: true>false, false>true

Beitrag von drose28357 » 19.04.2024, 20:02

Der Change-Node wäre schon richtig. Aus der Beschreibung ist nicht zu ersehen (es fehlt ein Screenshot) ob suchen "True" in einem String oder als Boolean gesetzt wurde.

So hätte ich es mit Change gemacht :
NodeRed_Change_Boolean.png
Im Gegensatz zu Suche in Strings :
NodeRed_Change_Boolean_string.png
RaspberryMatic auf Raspberry Pi 4 2Gbyte

Benutzeravatar
Henke
Beiträge: 1527
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 307 Mal

Re: Payload negieren: true>false, false>true

Beitrag von Henke » 20.04.2024, 10:39

Beide Versionen mit der Change Node und "Ersetzten durch" sind falsch.
Es wird von oben nach unten abgearbeitet und als Ergebnis kommt immer payload = false raus, egal ob der Input true oder false ist.

Wenn unbedingt eine Change Node verwendet werden soll, dann kann das durch JSONata erledigt werden. Ist im Prinzip wie die Funktion Node.
Alternativ dazu setze ich häufiger auch den langen Weg mit "Switch" und 2 "Change" Nodes ein, da viele Geräte unabhängig vom payload an/aus geschaltet werden.
Bildschirmfoto_20-4-2024_10335_127.0.0.1.jpeg
flow

Code: Alles auswählen

[
    {
        "id": "bf68ca49b9b06729",
        "type": "change",
        "z": "f757d8982a49568c",
        "name": "FALSCH!",
        "rules": [
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "false",
                "fromt": "bool",
                "to": "true",
                "tot": "bool"
            },
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "true",
                "fromt": "bool",
                "to": "false",
                "tot": "bool"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 880,
        "y": 2600,
        "wires": [
            [
                "e1d70ab9389bf7c2"
            ]
        ]
    },
    {
        "id": "e1d70ab9389bf7c2",
        "type": "debug",
        "z": "f757d8982a49568c",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1215,
        "y": 2600,
        "wires": [],
        "l": false
    },
    {
        "id": "746dae796b702d1d",
        "type": "inject",
        "z": "f757d8982a49568c",
        "name": "",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "true",
        "payloadType": "bool",
        "x": 550,
        "y": 2600,
        "wires": [
            [
                "34f0e7d03117142d"
            ]
        ]
    },
    {
        "id": "d216b9bb333bc63e",
        "type": "inject",
        "z": "f757d8982a49568c",
        "name": "",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "false",
        "payloadType": "bool",
        "x": 550,
        "y": 2660,
        "wires": [
            [
                "34f0e7d03117142d"
            ]
        ]
    },
    {
        "id": "3d5ec2a80d4a71c7",
        "type": "change",
        "z": "f757d8982a49568c",
        "name": "toggle",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "$not(payload)\t",
                "tot": "jsonata"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 870,
        "y": 2680,
        "wires": [
            [
                "7eea8cfe8343a144"
            ]
        ]
    },
    {
        "id": "7eea8cfe8343a144",
        "type": "debug",
        "z": "f757d8982a49568c",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1215,
        "y": 2680,
        "wires": [],
        "l": false
    },
    {
        "id": "a43a6865cd89e711",
        "type": "switch",
        "z": "f757d8982a49568c",
        "name": "",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "true"
            },
            {
                "t": "false"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 870,
        "y": 2820,
        "wires": [
            [
                "dbc8f7f13b49324b"
            ],
            [
                "24fb12682bf09310"
            ]
        ]
    },
    {
        "id": "24fb12682bf09310",
        "type": "change",
        "z": "f757d8982a49568c",
        "name": "true",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "true",
                "tot": "bool"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1090,
        "y": 2840,
        "wires": [
            [
                "afed05bda79a0149"
            ]
        ]
    },
    {
        "id": "dbc8f7f13b49324b",
        "type": "change",
        "z": "f757d8982a49568c",
        "name": "false",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "false",
                "tot": "bool"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1090,
        "y": 2800,
        "wires": [
            [
                "afed05bda79a0149"
            ]
        ]
    },
    {
        "id": "afed05bda79a0149",
        "type": "debug",
        "z": "f757d8982a49568c",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1215,
        "y": 2820,
        "wires": [],
        "l": false
    },
    {
        "id": "ad8abe08e44cbe0b",
        "type": "inject",
        "z": "f757d8982a49568c",
        "name": "Kein Payload Aus",
        "props": [],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "x": 580,
        "y": 2780,
        "wires": [
            [
                "dbc8f7f13b49324b"
            ]
        ]
    },
    {
        "id": "dbae89b3ee178d90",
        "type": "inject",
        "z": "f757d8982a49568c",
        "name": "Kein Payload An",
        "props": [],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "x": 580,
        "y": 2840,
        "wires": [
            [
                "24fb12682bf09310"
            ]
        ]
    },
    {
        "id": "2446f0c9efc82388",
        "type": "function",
        "z": "f757d8982a49568c",
        "name": "toggle",
        "func": "if (msg.payload)\n    msg.payload = false;\nelse\n    msg.payload = true;\nreturn msg;",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 870,
        "y": 2740,
        "wires": [
            [
                "a0ed6ae9296694b3"
            ]
        ]
    },
    {
        "id": "a0ed6ae9296694b3",
        "type": "debug",
        "z": "f757d8982a49568c",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": true,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1215,
        "y": 2740,
        "wires": [],
        "l": false
    },
    {
        "id": "34f0e7d03117142d",
        "type": "junction",
        "z": "f757d8982a49568c",
        "x": 720,
        "y": 2680,
        "wires": [
            [
                "bf68ca49b9b06729",
                "3d5ec2a80d4a71c7",
                "a43a6865cd89e711",
                "2446f0c9efc82388"
            ]
        ]
    }
]

Antworten

Zurück zu „RedMatic“