# Toggle node (subflow)

**URL:** <https://discourse.nodered.org/t/toggle-node-subflow/54804>\
**Category:** Share Your Nodes\
**Created:** [7 December 2021 02:40 UTC](https://discourse.nodered.org/t/toggle-node-subflow/54804 "2021-12-07T02:40:50Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Trying\_to\_learn](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/trying_to_learn/32/28400_2.png) [@Trying\_to\_learn](https://discourse.nodered.org/u/Trying_to_learn)\
**Post date:** [7 December 2021 02:40 UTC](https://discourse.nodered.org/t/toggle-node-subflow/54804/1 "2021-12-07T02:40:50Z")

</div>

This is my effort at a node which could be handy for people who like flashy things on their dashboard.

You want to make a _light_ blink rather than just be constantly on.

Though not complicated, this may save you some heart ache.

The `toggle` node does this for you and you can configure it with 3 settings:  
1 - how fast you want it to toggle. (Set in milliseconds)  
2 - The first message to be sent  
3 - The second message to be sent

There is an optional `offmsg` which could be handy if you are blinking a light between two colours and want it off when the flashing has stopped.

Example flow included.

Subflow node:

```auto
[{"id":"ca5e1e7f2227fa14","type":"subflow","name":"Toggler","info":"# **Output toggle node to send alternating messages at a specified frequency.\n#** \n## 3 things need to be set to configure this subflow\n * 1 - `delay`: milliseconds between toggls\n * 2 - `msg1`: text message for state 1\n * 3 - `msg2`: text message for state 2\n \n## Optional:\n`offmsg` - sent when it is reset.\nMay be handy to make sure things are *off*.\n\n## Input message\nTo start send `msg.payload` (anything)\n\nTo stop, send `msg.reset` (anything but don't use `timestamp`)\n\nSet the variables (`delay`, `msg1`, `msg2` and optionally `offmsg`) as environment variables in this node's config page.\n","category":"","in":[{"x":50,"y":80,"wires":[{"id":"bebc43cf227dc00a"},{"id":"8e3e5f0baa510afb"}]}],"out":[{"x":660,"y":80,"wires":[{"id":"7f2e332fb32d3422","port":0},{"id":"0666cb89ee9025cf","port":0}]}],"env":[],"meta":{"module":"Toggler","version":"0.1","desc":"Toggles output between `msg1` and `msg2` set in node config"},"color":"#A6BBCF","icon":"node-red-contrib-bool-gate/switch.png"},{"id":"a19da66d6694960f","type":"trigger","z":"ca5e1e7f2227fa14","name":"","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"-2","extend":false,"overrideDelay":true,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":380,"y":80,"wires":[["7f2e332fb32d3422"]]},{"id":"7f2e332fb32d3422","type":"function","z":"ca5e1e7f2227fa14","name":"toggle","func":"let c = context.get(\"counter\") ||0;\nif (c == 0)\n{\n // 0\n //msg.payload = \"rgb,1,0,18,12\";\n msg.payload = env.get(\"msg1\");\n} else\nif (c == 1)\n{\n // 1\n //msg.payload = \"rgb,1,0,0,0\";\n msg.payload = env.get(\"msg2\");\n}\nc = (c + 1) % 2;\ncontext.set(\"counter\",c);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":550,"y":80,"wires":[[]]},{"id":"bebc43cf227dc00a","type":"change","z":"ca5e1e7f2227fa14","name":"","rules":[{"t":"set","p":"delay","pt":"msg","to":"delay","tot":"env"}],"action":"","property":"","from":"","to":"","reg":false,"x":190,"y":80,"wires":[["a19da66d6694960f"]]},{"id":"8e3e5f0baa510afb","type":"switch","z":"ca5e1e7f2227fa14","name":"reset?","property":"reset","propertyType":"msg","rules":[{"t":"nempty"}],"checkall":"true","repair":false,"outputs":1,"x":160,"y":120,"wires":[["705f9da2fdc55481"]]},{"id":"705f9da2fdc55481","type":"switch","z":"ca5e1e7f2227fa14","name":"off msg?","property":"offmsg","propertyType":"env","rules":[{"t":"nempty"}],"checkall":"true","repair":false,"outputs":1,"x":360,"y":120,"wires":[["0666cb89ee9025cf"]]},{"id":"0666cb89ee9025cf","type":"change","z":"ca5e1e7f2227fa14","name":"set off message","rules":[{"t":"set","p":"payload","pt":"msg","to":"offmsg","tot":"env"}],"action":"","property":"","from":"","to":"","reg":false,"x":520,"y":120,"wires":[[]]},{"id":"2d6c0ca8e486046c","type":"subflow:ca5e1e7f2227fa14","z":"3b6b347467ee4c87","name":"","env":[{"name":"delay","value":"1000","type":"num"},{"name":"msg1","value":"message 1","type":"str"},{"name":"msg2","value":"message 2","type":"str"},{"name":"offmsg","value":"off","type":"str"}],"x":420,"y":280,"wires":[["6e383c3d1a21b3aa"]],"info":"** 3 things needed to configure\n1 - delay: milliseconds between toggling\n2 - msg1: text message 1\n3 - msg2: text message 2\n"}]

```

Example flow:

```auto
[{"id":"ca5e1e7f2227fa14","type":"subflow","name":"Toggler","info":"# **Output toggle node to send alternating messages at a specified frequency.\n#** \n## 3 things need to be set to configure this subflow\n * 1 - `delay`: milliseconds between toggls\n * 2 - `msg1`: text message for state 1\n * 3 - `msg2`: text message for state 2\n \n## Optional:\n`offmsg` - sent when it is reset.\nMay be handy to make sure things are *off*.\n\n## Input message\nTo start send `msg.payload` (anything)\n\nTo stop, send `msg.reset` (anything but don't use `timestamp`)\n\nSet the variables (`delay`, `msg1`, `msg2` and optionally `offmsg`) as environment variables in this node's config page.\n","category":"","in":[{"x":50,"y":80,"wires":[{"id":"bebc43cf227dc00a"},{"id":"8e3e5f0baa510afb"}]}],"out":[{"x":660,"y":80,"wires":[{"id":"7f2e332fb32d3422","port":0},{"id":"0666cb89ee9025cf","port":0}]}],"env":[],"meta":{"module":"Toggler","version":"0.1","desc":"Toggles output between `msg1` and `msg2` set in node config"},"color":"#A6BBCF","icon":"node-red-contrib-bool-gate/switch.png"},{"id":"a19da66d6694960f","type":"trigger","z":"ca5e1e7f2227fa14","name":"","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"-2","extend":false,"overrideDelay":true,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":380,"y":80,"wires":[["7f2e332fb32d3422"]]},{"id":"7f2e332fb32d3422","type":"function","z":"ca5e1e7f2227fa14","name":"toggle","func":"let c = context.get(\"counter\") ||0;\nif (c == 0)\n{\n // 0\n //msg.payload = \"rgb,1,0,18,12\";\n msg.payload = env.get(\"msg1\");\n} else\nif (c == 1)\n{\n // 1\n //msg.payload = \"rgb,1,0,0,0\";\n msg.payload = env.get(\"msg2\");\n}\nc = (c + 1) % 2;\ncontext.set(\"counter\",c);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":550,"y":80,"wires":[[]]},{"id":"bebc43cf227dc00a","type":"change","z":"ca5e1e7f2227fa14","name":"","rules":[{"t":"set","p":"delay","pt":"msg","to":"delay","tot":"env"}],"action":"","property":"","from":"","to":"","reg":false,"x":190,"y":80,"wires":[["a19da66d6694960f"]]},{"id":"8e3e5f0baa510afb","type":"switch","z":"ca5e1e7f2227fa14","name":"reset?","property":"reset","propertyType":"msg","rules":[{"t":"nempty"}],"checkall":"true","repair":false,"outputs":1,"x":160,"y":120,"wires":[["705f9da2fdc55481"]]},{"id":"705f9da2fdc55481","type":"switch","z":"ca5e1e7f2227fa14","name":"off msg?","property":"offmsg","propertyType":"env","rules":[{"t":"nempty"}],"checkall":"true","repair":false,"outputs":1,"x":360,"y":120,"wires":[["0666cb89ee9025cf"]]},{"id":"0666cb89ee9025cf","type":"change","z":"ca5e1e7f2227fa14","name":"set off message","rules":[{"t":"set","p":"payload","pt":"msg","to":"offmsg","tot":"env"}],"action":"","property":"","from":"","to":"","reg":false,"x":520,"y":120,"wires":[[]]},{"id":"7679fb92b3291a98","type":"inject","z":"3b6b347467ee4c87","name":"start","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payloadType":"date","x":210,"y":260,"wires":[["2d6c0ca8e486046c"]]},{"id":"fc206ec3b72d19b7","type":"inject","z":"3b6b347467ee4c87","name":"stop","props":[{"p":"reset","v":"blah","vt":"str"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":210,"y":300,"wires":[["2d6c0ca8e486046c"]]},{"id":"6e383c3d1a21b3aa","type":"debug","z":"3b6b347467ee4c87","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":580,"y":280,"wires":[]},{"id":"2d6c0ca8e486046c","type":"subflow:ca5e1e7f2227fa14","z":"3b6b347467ee4c87","name":"","env":[{"name":"delay","value":"1000","type":"num"},{"name":"msg1","value":"message 1","type":"str"},{"name":"msg2","value":"message 2","type":"str"},{"name":"offmsg","value":"off","type":"str"}],"x":420,"y":280,"wires":[["6e383c3d1a21b3aa"]],"info":"** 3 things needed to configure\n1 - delay: milliseconds between toggling\n2 - msg1: text message 1\n3 - msg2: text message 2\n"}]

```

Enjoy!

🙂

---

<div class="post-metadata">

**Author:** ![Trying\_to\_learn](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/trying_to_learn/32/28400_2.png) [@Trying\_to\_learn](https://discourse.nodered.org/u/Trying_to_learn)\
**Post date:** [7 December 2021 03:02 UTC](https://discourse.nodered.org/t/toggle-node-subflow/54804/2 "2021-12-07T03:02:55Z")

</div>

Ok, I fixed a small problem with the reset input.

This works a bit better with what it will accept.

```auto
[{"id":"ca5e1e7f2227fa14","type":"subflow","name":"Toggler","info":"# **Output toggle node to send alternating messages at a specified frequency.\n#** \n## 3 things need to be set to configure this subflow\n * 1 - `delay`: milliseconds between toggls\n * 2 - `msg1`: text message for state 1\n * 3 - `msg2`: text message for state 2\n \n## Optional:\n`offmsg` - sent when it is reset.\nMay be handy to make sure things are *off*.\n\n## Input message\nTo start send `msg.payload` (anything)\n\nTo stop, send `msg.reset` (anything but don't use `timestamp`)\n\nSet the variables (`delay`, `msg1`, `msg2` and optionally `offmsg`) as environment variables in this node's config page.\n","category":"","in":[{"x":50,"y":80,"wires":[{"id":"bebc43cf227dc00a"},{"id":"8e3e5f0baa510afb"}]}],"out":[{"x":660,"y":80,"wires":[{"id":"7f2e332fb32d3422","port":0},{"id":"0666cb89ee9025cf","port":0}]}],"env":[],"meta":{"module":"Toggler","version":"0.1","desc":"Toggles output between `msg1` and `msg2` set in node config"},"color":"#A6BBCF","icon":"node-red-contrib-bool-gate/switch.png"},{"id":"a19da66d6694960f","type":"trigger","z":"ca5e1e7f2227fa14","name":"","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"-2","extend":false,"overrideDelay":true,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":380,"y":80,"wires":[["7f2e332fb32d3422"]]},{"id":"7f2e332fb32d3422","type":"function","z":"ca5e1e7f2227fa14","name":"toggle","func":"let c = context.get(\"counter\") ||0;\nif (c == 0)\n{\n // 0\n //msg.payload = \"rgb,1,0,18,12\";\n msg.payload = env.get(\"msg1\");\n} else\nif (c == 1)\n{\n // 1\n //msg.payload = \"rgb,1,0,0,0\";\n msg.payload = env.get(\"msg2\");\n}\nc = (c + 1) % 2;\ncontext.set(\"counter\",c);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":550,"y":80,"wires":[[]]},{"id":"bebc43cf227dc00a","type":"change","z":"ca5e1e7f2227fa14","name":"","rules":[{"t":"set","p":"delay","pt":"msg","to":"delay","tot":"env"}],"action":"","property":"","from":"","to":"","reg":false,"x":190,"y":80,"wires":[["a19da66d6694960f"]]},{"id":"8e3e5f0baa510afb","type":"switch","z":"ca5e1e7f2227fa14","name":"reset?","property":"reset","propertyType":"msg","rules":[{"t":"nnull"}],"checkall":"true","repair":false,"outputs":1,"x":160,"y":120,"wires":[["705f9da2fdc55481"]]},{"id":"705f9da2fdc55481","type":"switch","z":"ca5e1e7f2227fa14","name":"off msg?","property":"offmsg","propertyType":"env","rules":[{"t":"nempty"}],"checkall":"true","repair":false,"outputs":1,"x":360,"y":120,"wires":[["0666cb89ee9025cf"]]},{"id":"0666cb89ee9025cf","type":"change","z":"ca5e1e7f2227fa14","name":"set off message","rules":[{"t":"set","p":"payload","pt":"msg","to":"offmsg","tot":"env"}],"action":"","property":"","from":"","to":"","reg":false,"x":520,"y":120,"wires":[[]]},{"id":"171d974123a15379","type":"subflow:ca5e1e7f2227fa14","z":"7e987ddf260bdf0d","name":"","env":[{"name":"delay","value":"1000","type":"num"},{"name":"msg1","value":"message 1","type":"str"},{"name":"msg2","value":"message 2","type":"str"},{"name":"offmsg","value":"message 2","type":"str"}],"x":410,"y":1190,"wires":[["03dd24229eac2d14"]],"info":"** 3 things needed to configure\n1 - delay: milliseconds between toggling\n2 - msg1: text message 1\n3 - msg2: text message 2\n"}]

```

---

<div class="post-metadata">

**Author:** ![smanjunath211](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/smanjunath211/32/95742_2.png) [@smanjunath211](https://discourse.nodered.org/u/smanjunath211)\
**Post date:** [7 December 2021 05:58 UTC](https://discourse.nodered.org/t/toggle-node-subflow/54804/3 "2021-12-07T05:58:39Z")

</div>

Hi, I had customised something like this for my project. i had also put status message by copying from somewhere else. Have added that bit in your code.  
please give comments, is this the way to do status ?

```auto
[{"id":"ca5e1e7f2227fa14","type":"subflow","name":"Toggler","info":"# **Output toggle node to send alternating messages at a specified frequency.\n#** \n## 3 things need to be set to configure this subflow\n * 1 - `delay`: milliseconds between toggls\n * 2 - `msg1`: text message for state 1\n * 3 - `msg2`: text message for state 2\n \n## Optional:\n`offmsg` - sent when it is reset.\nMay be handy to make sure things are *off*.\n\n## Input message\nTo start send `msg.payload` (anything)\n\nTo stop, send `msg.reset` (anything but don't use `timestamp`)\n\nSet the variables (`delay`, `msg1`, `msg2` and optionally `offmsg`) as environment variables in this node's config page.\n","category":"","in":[{"x":50,"y":80,"wires":[{"id":"bebc43cf227dc00a"},{"id":"8e3e5f0baa510afb"}]}],"out":[{"x":660,"y":80,"wires":[{"id":"7f2e332fb32d3422","port":0},{"id":"0666cb89ee9025cf","port":0}]}],"env":[],"meta":{"module":"Toggler","version":"0.1","desc":"Toggles output between `msg1` and `msg2` set in node config"},"color":"#A6BBCF","icon":"node-red-contrib-bool-gate/switch.png","status":{"x":720,"y":250,"wires":[{"id":"35b8fce3ecba3c2c","port":1},{"id":"16fed96dce14c03b","port":1}]}},{"id":"a19da66d6694960f","type":"trigger","z":"ca5e1e7f2227fa14","name":"","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"-2","extend":false,"overrideDelay":true,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":380,"y":80,"wires":[["7f2e332fb32d3422"]]},{"id":"7f2e332fb32d3422","type":"function","z":"ca5e1e7f2227fa14","name":"toggle","func":"let c = context.get(\"counter\") ||0;\nif (c == 0)\n{\n // 0\n //msg.payload = \"rgb,1,0,18,12\";\n msg.payload = env.get(\"msg1\");\n} else\nif (c == 1)\n{\n // 1\n //msg.payload = \"rgb,1,0,0,0\";\n msg.payload = env.get(\"msg2\");\n}\nc = (c + 1) % 2;\ncontext.set(\"counter\",c);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":540,"y":80,"wires":[["04d482a4531aeafe"]]},{"id":"bebc43cf227dc00a","type":"change","z":"ca5e1e7f2227fa14","name":"","rules":[{"t":"set","p":"delay","pt":"msg","to":"delay","tot":"env"}],"action":"","property":"","from":"","to":"","reg":false,"x":190,"y":80,"wires":[["a19da66d6694960f"]]},{"id":"8e3e5f0baa510afb","type":"switch","z":"ca5e1e7f2227fa14","name":"reset?","property":"reset","propertyType":"msg","rules":[{"t":"nnull"}],"checkall":"true","repair":false,"outputs":1,"x":160,"y":120,"wires":[["705f9da2fdc55481"]]},{"id":"705f9da2fdc55481","type":"switch","z":"ca5e1e7f2227fa14","name":"off msg?","property":"offmsg","propertyType":"env","rules":[{"t":"nempty"}],"checkall":"true","repair":false,"outputs":1,"x":330,"y":120,"wires":[["0666cb89ee9025cf"]]},{"id":"0666cb89ee9025cf","type":"change","z":"ca5e1e7f2227fa14","name":"set off message","rules":[{"t":"set","p":"payload","pt":"msg","to":"offmsg","tot":"env"}],"action":"","property":"","from":"","to":"","reg":false,"x":520,"y":120,"wires":[[]]},{"id":"35b8fce3ecba3c2c","type":"function","z":"ca5e1e7f2227fa14","name":"Red-Hiding","func":"let statusMsg = { fill:\"red\", shape:\"ring\", text:\"Message 1\" };\nreturn [msg, {payload:statusMsg}];","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":510,"y":250,"wires":[[],[]]},{"id":"16fed96dce14c03b","type":"function","z":"ca5e1e7f2227fa14","name":"Green-Showing","func":"let statusMsg = { fill:\"green\", shape:\"dot\", text:\"Message 2\" };\nreturn [msg, {payload:statusMsg}];","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":520,"y":290,"wires":[[],[]]},{"id":"04d482a4531aeafe","type":"switch","z":"ca5e1e7f2227fa14","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"message 1","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":420,"y":190,"wires":[["35b8fce3ecba3c2c"],["16fed96dce14c03b"]]},{"id":"171d974123a15379","type":"subflow:ca5e1e7f2227fa14","z":"80b11551520ed2c0","name":"","env":[{"name":"delay","value":"1000","type":"num"},{"name":"msg1","value":"message 1","type":"str"},{"name":"msg2","value":"message 2","type":"str"},{"name":"offmsg","value":"message 2","type":"str"}],"x":1950,"y":3350,"wires":[["f94723c8885856e9"]],"info":"** 3 things needed to configure\n1 - delay: milliseconds between toggling\n2 - msg1: text message 1\n3 - msg2: text message 2\n"}]

```

---

<div class="post-metadata">

**Author:** ![Trying\_to\_learn](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/trying_to_learn/32/28400_2.png) [@Trying\_to\_learn](https://discourse.nodered.org/u/Trying_to_learn)\
**Post date:** [7 December 2021 06:01 UTC](https://discourse.nodered.org/t/toggle-node-subflow/54804/4 "2021-12-07T06:01:16Z")

</div>

Is this a node you wrote or mine with extra stuff added?

---

<div class="post-metadata">

**Author:** ![smanjunath211](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/smanjunath211/32/95742_2.png) [@smanjunath211](https://discourse.nodered.org/u/smanjunath211)\
**Post date:** [7 December 2021 06:02 UTC](https://discourse.nodered.org/t/toggle-node-subflow/54804/5 "2021-12-07T06:02:38Z")

</div>

its yours, sorry, i just added my bit to it, my node was highly customised to share

---

<div class="post-metadata">

**Author:** ![Trying\_to\_learn](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/trying_to_learn/32/28400_2.png) [@Trying\_to\_learn](https://discourse.nodered.org/u/Trying_to_learn)\
**Post date:** [7 December 2021 06:04 UTC](https://discourse.nodered.org/t/toggle-node-subflow/54804/6 "2021-12-07T06:04:02Z")

</div>

???

> [@smanjunath211](#):
>
> i just added my bit to it, my node was highly customised to share

There are so many holes in what you added sorry.

I see what you tried to do, but it not really correct in how it was done.

---

<div class="post-metadata">

**Author:** ![smanjunath211](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/smanjunath211/32/95742_2.png) [@smanjunath211](https://discourse.nodered.org/u/smanjunath211)\
**Post date:** [7 December 2021 06:05 UTC](https://discourse.nodered.org/t/toggle-node-subflow/54804/7 "2021-12-07T06:05:46Z")

</div>

would highly appreciate if you could show me how to do it.  
you see, its actually me _'trying\_to\_learn'_

---

<div class="post-metadata">

**Author:** ![Trying\_to\_learn](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/trying_to_learn/32/28400_2.png) [@Trying\_to\_learn](https://discourse.nodered.org/u/Trying_to_learn)\
**Post date:** [7 December 2021 06:07 UTC](https://discourse.nodered.org/t/toggle-node-subflow/54804/8 "2021-12-07T06:07:06Z")

</div>

To do what you want I am going to have to sit down and study for a while.

---

<div class="post-metadata">

**Author:** ![Trying\_to\_learn](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/trying_to_learn/32/28400_2.png) [@Trying\_to\_learn](https://discourse.nodered.org/u/Trying_to_learn)\
**Post date:** [7 December 2021 06:27 UTC](https://discourse.nodered.org/t/toggle-node-subflow/54804/10 "2021-12-07T06:27:35Z")

</div>

This is version 1.1 of the node with an added text indicator to show it is _toggling_.

```auto
[{"id":"ca5e1e7f2227fa14","type":"subflow","name":"Toggler","info":"# **Output toggle node to send alternating messages at a specified frequency.\n#** \n## 3 things need to be set to configure this subflow\n * 1 - `delay`: milliseconds between toggls\n * 2 - `msg1`: text message for state 1\n * 3 - `msg2`: text message for state 2\n \n## Optional:\n`offmsg` - sent when it is reset.\nMay be handy to make sure things are *off*.\n\n## Input message\nTo start send `msg.payload` (anything)\n\nTo stop, send `msg.reset` (anything but don't use `timestamp`)\n\nSet the variables (`delay`, `msg1`, `msg2` and optionally `offmsg`) as environment variables in this node's config page.\n","category":"","in":[{"x":50,"y":80,"wires":[{"id":"bebc43cf227dc00a"},{"id":"8e3e5f0baa510afb"}]}],"out":[{"x":660,"y":80,"wires":[{"id":"7f2e332fb32d3422","port":0},{"id":"0666cb89ee9025cf","port":0}]}],"env":[],"meta":{"module":"Toggler","version":"0.1.1","desc":"Toggles output between `msg1` and `msg2` set in node config"},"color":"#A6BBCF","icon":"node-red-contrib-bool-gate/switch.png","status":{"x":660,"y":180,"wires":[{"id":"b1feb246df6a838b","port":0}]}},{"id":"a19da66d6694960f","type":"trigger","z":"ca5e1e7f2227fa14","name":"","op1":"1","op2":"0","op1type":"str","op2type":"str","duration":"-2","extend":false,"overrideDelay":true,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":380,"y":80,"wires":[["7f2e332fb32d3422"]]},{"id":"7f2e332fb32d3422","type":"function","z":"ca5e1e7f2227fa14","name":"toggle","func":"msg1 = {};\nlet c = context.get(\"counter\") ||0;\nif (c == 0)\n{\n // 0\n //msg.payload = \"rgb,1,0,18,12\";\n msg.payload = env.get(\"msg1\");\n} else\nif (c == 1)\n{\n // 1\n //msg.payload = \"rgb,1,0,0,0\";\n msg.payload = env.get(\"msg2\");\n}\nmsg1.payload = c;\nc = (c + 1) % 2;\ncontext.set(\"counter\",c);\nreturn [msg,msg1];","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":550,"y":80,"wires":[[],["b1feb246df6a838b"]]},{"id":"bebc43cf227dc00a","type":"change","z":"ca5e1e7f2227fa14","name":"","rules":[{"t":"set","p":"delay","pt":"msg","to":"delay","tot":"env"}],"action":"","property":"","from":"","to":"","reg":false,"x":190,"y":80,"wires":[["a19da66d6694960f"]]},{"id":"8e3e5f0baa510afb","type":"switch","z":"ca5e1e7f2227fa14","name":"reset?","property":"reset","propertyType":"msg","rules":[{"t":"nnull"}],"checkall":"true","repair":false,"outputs":1,"x":160,"y":120,"wires":[["705f9da2fdc55481","490014d846f3ef05"]]},{"id":"705f9da2fdc55481","type":"switch","z":"ca5e1e7f2227fa14","name":"off msg?","property":"offmsg","propertyType":"env","rules":[{"t":"nempty"}],"checkall":"true","repair":false,"outputs":1,"x":360,"y":120,"wires":[["0666cb89ee9025cf"]]},{"id":"0666cb89ee9025cf","type":"change","z":"ca5e1e7f2227fa14","name":"set off message","rules":[{"t":"set","p":"payload","pt":"msg","to":"offmsg","tot":"env"}],"action":"","property":"","from":"","to":"","reg":false,"x":520,"y":120,"wires":[[]]},{"id":"b1feb246df6a838b","type":"function","z":"ca5e1e7f2227fa14","name":"","func":"let c = msg.payload;\nif (c == 0)\n{\n msg.payload = ({text: \"A\"});\n} else if (c == 1)\n{\n msg.payload = ({text: \"B\"});\n} else\n msg.payload = ({text:\" \"});\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":550,"y":180,"wires":[[]]},{"id":"490014d846f3ef05","type":"change","z":"ca5e1e7f2227fa14","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"reset","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":325,"y":180,"wires":[["b1feb246df6a838b"]],"l":false},{"id":"171d974123a15379","type":"subflow:ca5e1e7f2227fa14","z":"7e987ddf260bdf0d","name":"","env":[{"name":"delay","value":"1000","type":"num"},{"name":"msg1","value":"message 1","type":"str"},{"name":"msg2","value":"message 2","type":"str"},{"name":"offmsg","value":"message 2","type":"str"}],"x":410,"y":1190,"wires":[["03dd24229eac2d14"]],"info":"** 3 things needed to configure\n1 - delay: milliseconds between toggling\n2 - msg1: text message 1\n3 - msg2: text message 2\n"}]

```
