NEWS
String in 2 Variable/Objekte
-
Nabend,
ich hole mir mit Node-Red über Mqtt Daten, die in Base64 encrypted sind.
Decrypted werden die Daten im Skript:
Input= "MyAAMDE5AAA="
function:
// msg1 - Unencrypted (vanilla data) var msg1 = { payload: msg.payload.length }; msg1.payload = JSON.parse(msg.payload); msg1.payload = msg1.payload; // msg2 - Decrypt to Text var msg2 = { payload: msg.payload.length }; msg2.payload = JSON.parse(msg.payload); msg2.payload = new Buffer(msg2.payload.payload, 'base64').toString('ascii'); // msg3 - Decrypt as Binary value (MSB,LSB) var msg3 = { payload: msg.payload.length }; msg3.payload = JSON.parse(msg.payload); msg3.payload = new Buffer(msg3.payload.payload, 'base64').toString('hex'); msg3.payload = parseInt(msg3.payload, 16); return [ msg1, msg2, msg3 ];
in ASCII und Hex
Im Output werden die Daten in einem String ausgegeben:
- <size size="200">3 019</size> 3 Helligkeitswert
019 Temperatur.
Diese beiden Werte würde ich gerne getrennt im IoBroker als Objekte anlegen.
Mit der Funktion:
var outputMsgs = []; var words = msg.payload.split(" "); for (var w in words) { outputMsgs.push({payload:words[w]}); } return [ outputMsgs ];
bekomme ich die beiden Daten einzeln angezeigt, schaffe es aber nicht auch beide Werte einzeln so auszugeben,
dass diese dann mit dem IOBroker verknüpft werden können.
Gibt es hier einen Javascript Experten, der mir an dieser Stelle weiterhelfen kann oder einen besseren Weg kennt?
Gruß
Micha
-
Hi,
Du machst das ganze doch in Node-Red, wenn ich Dich richtig verstanden habe.
Du hast doch am Script-Block 3 Ausgänge (durch "Return [msg1, msg2, msg3]").
An den jeweiligen Ausgangspunkt bindest Du dann den ioBroker-Output (also zwei Stück).
Ich hoffe es kommt rüber was ich meine. Hab nur mein iPhone zur Hand und bin erst morgen Abend zu Hause.
Gruß,
Eric
-
Nach Adam-Riese sollte:
var words = msg.payload.split(" "); var helligkeit = words[1]; var temperatur = words[2];
Solltest dann die unterschiedlichen Werte einzeln verarbeiten können.
-
Klasse das werde ich morgen früh gleich mal testen
Gesendet von iPhone mit Tapatalk
-
Die Variante von Eric hat leider nicht geklappt.
Fsjoke, wie bringe ich das in ein Script ? Also das splitten, welches mein Script macht und das mit deinem - in 2 strings ausgeben?
Gruß
Micha
Gesendet von iPhone mit Tapatalk
-
Moin,
Die Variante von Eric hat leider nicht geklappt. `
Was hat da nicht geklappt?Hast Du bei der Funktion unten die Anzahl Outputs auf 3 erhöht?
Du musst rechts an dem Funktionsblock 3 kleine Kreise haben (siehe Screenshot)
Und Du musst im ioBroker-Output noch angeben, das ein nicht existierender Datenpunkt erzeugt werden soll.
Und hier mal mein kompletter Test als Node-Red-Export:
! ````
[
{
"id": "4ccef53d.2e1dec",
"type": "function",
"z": "e863ae55.b767a8",
"name": "Funktion",
"func": "var wert1 = {};\nvar wert2 = {};\nvar wert3 = {};\n\nwert1.payload = "1";\nwert2.payload = "2";\nwert3.payload = "3";\n\nreturn [wert1, wert2, wert3];\n",
"outputs": "3",
"noerr": 0,
"x": 332.5,
"y": 771,
"wires": [
[
"4a44b388.416b54",
"7a97485e.94816"
],
[
"e75de716.e74258",
"1c477691.5b99c9"
],
[
"b1e2db79.5596",
"77c1711a.b379e8"
]
]
},
{
"id": "9affbc33.e2f368",
"type": "inject",
"z": "e863ae55.b767a8",
"name": "Start",
"topic": "",
"payload": "",
"payloadType": "date",
"repeat": "",
"crontab": "",
"once": false,
"x": 100.5,
"y": 775,
"wires": [
[
"4ccef53d.2e1dec"
]
]
},
{
"id": "4a44b388.416b54",
"type": "debug",
"z": "e863ae55.b767a8",
"name": "",
"active": true,
"console": "false",
"complete": "payload",
"x": 707.5,
"y": 615,
"wires": []
},
{
"id": "e75de716.e74258",
"type": "debug",
"z": "e863ae55.b767a8",
"name": "",
"active": true,
"console": "false",
"complete": "false",
"x": 716.5,
"y": 730,
"wires": []
},
{
"id": "b1e2db79.5596",
"type": "debug",
"z": "e863ae55.b767a8",
"name": "",
"active": true,
"console": "false",
"complete": "false",
"x": 720.5,
"y": 852,
"wires": []
},
{
"id": "7a97485e.94816",
"type": "ioBroker out",
"z": "e863ae55.b767a8",
"name": "",
"topic": "node-red.0.Test.wert1",
"ack": "false",
"autoCreate": "true",
"x": 730.5,
"y": 656,
"wires": []
},
{
"id": "1c477691.5b99c9",
"type": "ioBroker out",
"z": "e863ae55.b767a8",
"name": "",
"topic": "node-red.0.Test.wert2",
"ack": "false",
"autoCreate": "true",
"x": 740.5,
"y": 767,
"wires": []
},
{
"id": "77c1711a.b379e8",
"type": "ioBroker out",
"z": "e863ae55.b767a8",
"name": "",
"topic": "node-red.0.Test.wert3",
"ack": "false",
"autoCreate": "true",
"x": 739.5,
"y": 892,
"wires": []
}
]Gruß, Eric
-
Danke für die ausführliche Antwort, hatte die Anzahl der Ausgänge nur auf 2 erhöht. Werde das heute Abend nochmal versuchen.
Gruß
Micha
Gesendet von iPhone mit Tapatalk