If-set-else-set node

Hello there,
sorry for such easy question, probably I missed something, but I can't find a node for following thing.

I have system (Loxone) which feeds by flow by some values, for example "0" and "1" as a state of the button. And I need to convert these 0/1 to "on" / "off" string values and pass it as MQTT value to Zigbee2Mqtt system.

So, I can create "function" block and code this simple function in JS. Something like

if input=0 then output="off"
else if input="1" then output="on"
else ....

But because this will be used on several places, I would like to use some pre-build node. Is there something for this?

Because I can use "switch" block but then I have to also use some two other blocks (probably change") to modify the payload for the correct value.

But I would like to use only one element to do this thing. It's very inconvenient to create three nodes for every transformation. I would like to see something like this:

Where "TRANSFORM" node is a combination of switch and change node.

Is there any way how to do that?

Thanks

I think what you need is a subflow.

Select the nodes to be "reused" then "selection to subflow"...

image

Then you can have multiple instances of the subflow.

This might be of some help...

Thanks for the reply. I'm aware of the subflows, but I believed that such a basic feature has to be already implemented as a node.

It not, I will use subflows exactly as you mention.

Yes the change node.

[{"id":"309e2100.627d4","type":"inject","z":"1838876b.1af279","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"0","payloadType":"num","x":150,"y":120,"wires":[["bd001232.d968e"]]},{"id":"a1a6e224.201248","type":"inject","z":"1838876b.1af279","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"1","payloadType":"num","x":150,"y":160,"wires":[["bd001232.d968e"]]},{"id":"bd001232.d968e","type":"change","z":"1838876b.1af279","name":"","rules":[{"t":"change","p":"payload","pt":"msg","from":"1","fromt":"num","to":"on","tot":"str"},{"t":"change","p":"payload","pt":"msg","from":"0","fromt":"num","to":"off","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":350,"y":120,"wires":[["554c64d4.9fa4ac"]]},{"id":"554c64d4.9fa4ac","type":"debug","z":"1838876b.1af279","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":550,"y":120,"wires":[]}]

Im not certain what you really want. I suspected a subflow was what you wanted.

Alternatively, there is a node that operates like a subroutine - it is called node-red-contrib-components - perhaps that might be preferable?

Thank you! This is exactly what I looking for.

I didn't know I can use change node in this way. Thank you.

This is also interesting for more complex tasks. Thanks!

Take a look at JSONata expressions to, It is very powerfull.