# If-set-else-set node

**URL:** <https://discourse.nodered.org/t/if-set-else-set-node/33120>\
**Category:** General\
**Created:** [20 September 2020 16:21 UTC](https://discourse.nodered.org/t/if-set-else-set-node/33120 "2020-09-20T16:21:35Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![ludekvodicka](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/ludekvodicka/32/28881_2.png) [@ludekvodicka](https://discourse.nodered.org/u/ludekvodicka)\
**Post date:** [20 September 2020 16:21 UTC](https://discourse.nodered.org/t/if-set-else-set-node/33120/1 "2020-09-20T16:21:35Z")

</div>

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

```auto
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.

 ![chrome_2020-09-20_18-18-59](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/3/6/36d824e9725d7fa90980490bee21914f70f7c537.png)

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:

![](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/5/6/5694bfd04dbe7ed4398089a9038c8f3ffd9e4745.png)

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

Is there any way how to do that?

Thanks

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [20 September 2020 16:37 UTC](https://discourse.nodered.org/t/if-set-else-set-node/33120/2 "2020-09-20T16:37:14Z")

</div>

I think what you need is a subflow.

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

![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/2/0/201e7d9943f3aab28c081fd7bcc12dcf388b6f70.png)

Then you can have multiple instances of the subflow.

This might be of some help...

[![](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/4/5/452d83191d17b35a0056dfa0bd4b5e770c804bf5.jpeg "Subflows - Node-RED Essentials") ](https://www.youtube.com/watch?v=zdDdBG_zuLU)

---

<div class="post-metadata">

**Author:** ![ludekvodicka](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/ludekvodicka/32/28881_2.png) [@ludekvodicka](https://discourse.nodered.org/u/ludekvodicka)\
**Post date:** [20 September 2020 16:39 UTC](https://discourse.nodered.org/t/if-set-else-set-node/33120/3 "2020-09-20T16:39:00Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![E1cid](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/e1cid/32/77971_2.png) [@E1cid](https://discourse.nodered.org/u/E1cid)\
**Post date:** [20 September 2020 16:41 UTC](https://discourse.nodered.org/t/if-set-else-set-node/33120/4 "2020-09-20T16:41:14Z")

</div>

Yes the change node.

```auto
[{"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":[]}]

```

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [20 September 2020 16:41 UTC](https://discourse.nodered.org/t/if-set-else-set-node/33120/5 "2020-09-20T16:41:54Z")

</div>

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](https://flows.nodered.org/node/node-red-contrib-components) - perhaps that might be preferable?

---

<div class="post-metadata">

**Author:** ![ludekvodicka](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/ludekvodicka/32/28881_2.png) [@ludekvodicka](https://discourse.nodered.org/u/ludekvodicka)\
**Post date:** [20 September 2020 16:42 UTC](https://discourse.nodered.org/t/if-set-else-set-node/33120/6 "2020-09-20T16:42:45Z")

</div>

Thank you! This is exactly what I looking for.

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

---

<div class="post-metadata">

**Author:** ![ludekvodicka](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/ludekvodicka/32/28881_2.png) [@ludekvodicka](https://discourse.nodered.org/u/ludekvodicka)\
**Post date:** [20 September 2020 16:43 UTC](https://discourse.nodered.org/t/if-set-else-set-node/33120/7 "2020-09-20T16:43:18Z")

</div>

This is also interesting for more complex tasks. Thanks!

---

<div class="post-metadata">

**Author:** ![E1cid](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/e1cid/32/77971_2.png) [@E1cid](https://discourse.nodered.org/u/E1cid)\
**Post date:** [20 September 2020 16:45 UTC](https://discourse.nodered.org/t/if-set-else-set-node/33120/8 "2020-09-20T16:45:05Z")

</div>

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

> **[JSONata](https://jsonata.org/)**

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/1X/d073cd938eafa2e558d7c2cd59003b3ef4963033.png) [@system](https://discourse.nodered.org/u/system)\
**Post date:** [19 November 2020 16:45 UTC](https://discourse.nodered.org/t/if-set-else-set-node/33120/9 "2020-11-19T16:45:08Z")

</div>

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.
