Payload negieren: true>false, false>true
Moderator: Co-Administratoren
-
- Beiträge: 86
- Registriert: 24.03.2012, 11:40
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 2 Mal
Payload negieren: true>false, false>true
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
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
-
- Beiträge: 242
- Registriert: 28.12.2007, 07:33
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 2 Mal
- Kontaktdaten:
Re: Payload negieren: true>false, false>true
Der schnellste Weg.
Nimm ein Function Node und schreib vollenden Code rein.
By
Stephan
Nimm ein Function Node und schreib vollenden Code rein.
Code: Alles auswählen
msg.payload = !msg.payload;
return msg;
By
Stephan
-
- 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
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...
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...
-
- Beiträge: 242
- Registriert: 28.12.2007, 07:33
- Hat sich bedankt: 4 Mal
- Danksagung erhalten: 2 Mal
- Kontaktdaten:
Re: Payload negieren: true>false, false>true
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.
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.
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.
Bücher für NodeRed gibt es.msg.payload = !msg.payload;
return msg;
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.
- Baxxy
- Beiträge: 11064
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 634 Mal
- Danksagung erhalten: 2293 Mal
Re: Payload negieren: true>false, false>true
Grüße... Baxxy
- Raspberry Pi 4 als Homematic-Zentrale - Tipps und Informationen
- Analysescript für genutzte Funk-Adressen, Funkmodul-Hardware und Zentralen Hardware
- NANO CUL 868MHz - Stick zum AskSin Analyzer XS umflashen (Anleitung für ArduinoIDE unter Windows)
- Firmware Updates für IP-Aktoren / Sensoren... Info's, Tipps und Sonstiges
- CCU funkt nicht - CarrierSense (CS) Probleme erkennen und lösen
- Henke
- Beiträge: 1543
- Registriert: 27.06.2022, 20:51
- System: CCU
- Hat sich bedankt: 144 Mal
- Danksagung erhalten: 315 Mal
Re: Payload negieren: true>false, false>true
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.
-
- 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
SGiersch hat geschrieben: ↑12.04.2024, 15:53Der 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
-
- Beiträge: 193
- Registriert: 14.10.2011, 09:05
- System: CCU
- Wohnort: Bremen
- Hat sich bedankt: 63 Mal
- Danksagung erhalten: 7 Mal
Re: Payload negieren: true>false, false>true
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 : Im Gegensatz zu Suche in Strings :
So hätte ich es mit Change gemacht : Im Gegensatz zu Suche in Strings :
RaspberryMatic auf Raspberry Pi 4 2Gbyte
- Henke
- Beiträge: 1543
- Registriert: 27.06.2022, 20:51
- System: CCU
- Hat sich bedankt: 144 Mal
- Danksagung erhalten: 315 Mal
Re: Payload negieren: true>false, false>true
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.
flow
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.
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"
]
]
}
]