Hello i hope somebody can help me.
My Payload looks now like that
I need to change it like that
how do they correspond as the numbers are both different in both images, what goes where.
Also supply your input data a a copyable text. and also how the output should be using the input data values, so numbers correspond and we can see what needs moving where.
Now it output this
{"canid":416,"a":0,"b":64,"c":178,"d":21,"e":254,"f":254,"g":0,"h":16}
I need it like that
{"canfd":false,"ext":false,"rtr":false,"canid":416,"dlc":5,"data":[0,64,178,21,254,254,0,16]}
You can use a change node and JSONata
e.g.
[{"id":"21a060ef7df935b9","type":"inject","z":"65617ffeb779f51c","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"canid\":416,\"0\":0,\"1\":64,\"2\":178,\"3\":21,\"4\":254,\"5\":254,\"6\":0,\"7\":16}","payloadType":"json","x":110,"y":220,"wires":[["22fb581c516a0fc7"]]},{"id":"22fb581c516a0fc7","type":"change","z":"65617ffeb779f51c","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\t \"canfd\":false,\t \"ext\":false,\t \"rtr\":false,\t \"canid\":$$.payload.canid,\t \"dlc\":5,\t \"data\":($$.payload ~> |$|{}, \"canid\"|).*\t}","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":240,"y":200,"wires":[["30d55c3ac12c7bfd"]]},{"id":"30d55c3ac12c7bfd","type":"debug","z":"65617ffeb779f51c","name":"debug 239","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":450,"y":180,"wires":[]}]
expression
{
"canfd":false,
"ext":false,
"rtr":false,
"canid":$$.payload.canid,
"dlc":5,
"data":($$.payload ~> |$|{}, "canid"|).*
}
or use a template node that will guarantee the array positions. e.g.
[{"id":"21a060ef7df935b9","type":"inject","z":"65617ffeb779f51c","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"{\"canid\":416,\"a\":0,\"b\":64,\"c\":178,\"d\":21,\"e\":254,\"f\":254,\"g\":0,\"h\":16}","payloadType":"json","x":91,"y":244.00000667572021,"wires":[["5655b765ce604c35"]]},{"id":"5655b765ce604c35","type":"template","z":"65617ffeb779f51c","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{\n \"canfd\":false,\n \"ext\":false,\n \"rtr\":false,\n \"canid\": {{payload.canid}},\n \"dlc\":5,\n \"data\": [\n {{payload.a}},\n {{payload.b}},\n {{payload.c}},\n {{payload.d}},\n {{payload.e}},\n {{payload.f}},\n {{payload.g}},\n {{payload.h}}\n ]\n}","output":"json","x":301,"y":244.00000667572021,"wires":[["30d55c3ac12c7bfd"]]},{"id":"30d55c3ac12c7bfd","type":"debug","z":"65617ffeb779f51c","name":"debug 239","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":451,"y":184.00000667572021,"wires":[]}]
Looks like you are working with CAN frames & CAN buses, assuming your input is comming from a CAN bus, you could try using the : node-red-contrib-socketcan node, which read from the CAN buses and output the data the way you need it to be
thank you very much it works
This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.