Make template from node red flow

How do I turn a node red flow into a template. If I want to use the below template in another room, i have to change all references to the motion detector to the new motion detector, the light to the new light, and the automation boolean to the new automation boolean. Ideally i would just need to specify each of these things once, rather then editing every occurrence of each variable in the flow. Can this be done?

[{"id":"36ae403a7f79ba26","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"17503aceef3d0c86","type":"server-state-changed","z":"36ae403a7f79ba26","name":"Motion","server":"6a4a397b.bae638","version":3,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"binary_sensor.master_bedroom_motion_ias_zone","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"$entities(\"input_boolean.master_bedroom_automation\").state = \"on\" ","halt_if_type":"jsonata","halt_if_compare":"jsonata","outputs":2,"output_only_on_state_change":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[],"x":130,"y":580,"wires":[["7fd0e1fb668a490a","aa70a0c07c985ab6"],[]]},{"id":"aa70a0c07c985ab6","type":"trigger","z":"36ae403a7f79ba26","name":"","op1":"","op2":"","op1type":"nul","op2type":"payl","duration":"3","extend":true,"overrideDelay":false,"units":"min","reset":"on","bytopic":"all","topic":"topic","outputs":1,"x":250,"y":640,"wires":[["22b44f2579e6a24a"]]},{"id":"cc0a13bfdbdb4c9c","type":"api-call-service","z":"36ae403a7f79ba26","name":"Light off","server":"6a4a397b.bae638","version":3,"debugenabled":false,"service_domain":"light","service":"turn_off","entityId":"light.master_bedroom_light","data":"","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":620,"y":620,"wires":[[]]},{"id":"1c11c98bb74ddb77","type":"api-current-state","z":"36ae403a7f79ba26","name":"Mode?","server":"6a4a397b.bae638","version":2,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_select.time_of_day","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"percent","propertyType":"msg","value":"(\t    $levels := {\t        \"Day\": 100,\t        \"Evening\": 20,\t        \"Night\": 0\t    };\t\t    $lookup($levels, $entity().state)    \t)","valueType":"jsonata"}],"override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":700,"y":540,"wires":[["27cdebdd40f5aaf1"]]},{"id":"27cdebdd40f5aaf1","type":"api-call-service","z":"36ae403a7f79ba26","name":"Turn on Lights","server":"6a4a397b.bae638","version":3,"debugenabled":false,"service_domain":"light","service":"turn_on","entityId":"light.master_bedroom_light","data":"{\"brightness_pct\": percent }","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":880,"y":540,"wires":[[]]},{"id":"ae2da0f47601c2fe","type":"trigger","z":"36ae403a7f79ba26","name":"","op1":"","op2":"","op1type":"nul","op2type":"payl","duration":"30","extend":true,"overrideDelay":false,"units":"min","reset":"on","bytopic":"all","topic":"topic","outputs":1,"x":550,"y":680,"wires":[["cc0a13bfdbdb4c9c","c18f5dfe037c75e2"]]},{"id":"86c275031e92b82b","type":"server-state-changed","z":"36ae403a7f79ba26","name":"Motion","server":"6a4a397b.bae638","version":3,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"binary_sensor.master_bedroom_motion_ias_zone","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"$entity().state = on and $entities(\"input_boolean.master_bedroom_automation\").state = \"off\" ","halt_if_type":"jsonata","halt_if_compare":"jsonata","outputs":2,"output_only_on_state_change":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[],"x":354,"y":724,"wires":[["ae2da0f47601c2fe"],[]]},{"id":"cbe180fd8d8ed207","type":"comment","z":"36ae403a7f79ba26","name":"Master Bedroom","info":"","x":170,"y":520,"wires":[]},{"id":"c18f5dfe037c75e2","type":"api-call-service","z":"36ae403a7f79ba26","name":"Re-Enable Motion Automation","server":"6a4a397b.bae638","version":3,"debugenabled":false,"service_domain":"input_boolean","service":"turn_on","entityId":"input_boolean.master_bedroom_automation","data":"","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":790,"y":680,"wires":[[]]},{"id":"5f9b38e5588266bb","type":"server-state-changed","z":"36ae403a7f79ba26","name":"","server":"6a4a397b.bae638","version":3,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"input_boolean.master_bedroom_automation","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"off","halt_if_type":"str","halt_if_compare":"is","outputs":2,"output_only_on_state_change":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":220,"y":680,"wires":[["ae2da0f47601c2fe"],[]]},{"id":"22b44f2579e6a24a","type":"api-current-state","z":"36ae403a7f79ba26","name":"Automation on?","server":"6a4a397b.bae638","version":2,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.master_bedroom_automation","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":420,"y":640,"wires":[["cc0a13bfdbdb4c9c"],[]]},{"id":"7fd0e1fb668a490a","type":"api-current-state","z":"36ae403a7f79ba26","name":"","server":"6a4a397b.bae638","version":2,"outputs":2,"halt_if":"Day,Evening","halt_if_type":"str","halt_if_compare":"includes","entity_id":"input_select.time_of_day","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":400,"y":560,"wires":[["aa70a0c07c985ab6","1c11c98bb74ddb77"],[]]},{"id":"6a4a397b.bae638","type":"server","name":"Home Assistant","version":1,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]```

You can use a change node to write all variables in at the “start” of the sequence, then use the message variables in the nodes.

Or if you need to set it already from the first triggering node, then set them in flow variables.
But i think flow variables get cleared when node red restarts so it probably needs to be run after a restart.

Do you have an example you can provide that I can reference?

image

[{"id":"63679689036f5ac9","type":"subflow","name":"Subflow 2","info":"","category":"","in":[],"out":[],"env":[{"name":"light","type":"str","value":"","ui":{"type":"input","opts":{"types":["str"]}}},{"name":"motion","type":"str","value":"","ui":{"type":"input","opts":{"types":["str"]}}},{"name":"boolean","type":"str","value":"","ui":{"type":"input","opts":{"types":["str"]}}}],"meta":{},"color":"#DDAA99"},{"id":"17503aceef3d0c86","type":"server-state-changed","z":"63679689036f5ac9","name":"Motion","server":"","version":3,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"${motion}","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"$entities($env(\"boolean\")).state = \"on\" ","halt_if_type":"jsonata","halt_if_compare":"jsonata","outputs":2,"output_only_on_state_change":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[],"x":194,"y":80,"wires":[["7fd0e1fb668a490a","aa70a0c07c985ab6"],[]]},{"id":"aa70a0c07c985ab6","type":"trigger","z":"63679689036f5ac9","name":"","op1":"","op2":"","op1type":"nul","op2type":"payl","duration":"3","extend":true,"overrideDelay":false,"units":"min","reset":"on","bytopic":"all","topic":"topic","outputs":1,"x":358,"y":128,"wires":[["22b44f2579e6a24a"]]},{"id":"cc0a13bfdbdb4c9c","type":"api-call-service","z":"63679689036f5ac9","name":"Light off","server":"","version":3,"debugenabled":false,"service_domain":"light","service":"turn_off","entityId":"${light}","data":"","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":732,"y":128,"wires":[[]]},{"id":"1c11c98bb74ddb77","type":"api-current-state","z":"63679689036f5ac9","name":"Mode?","server":"","version":2,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_select.time_of_day","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"percent","propertyType":"msg","value":"(\t    $levels := {\t        \"Day\": 100,\t        \"Evening\": 20,\t        \"Night\": 0\t    };\t\t    $lookup($levels, $entity().state)    \t)","valueType":"jsonata"}],"override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":722,"y":80,"wires":[["27cdebdd40f5aaf1"]]},{"id":"27cdebdd40f5aaf1","type":"api-call-service","z":"63679689036f5ac9","name":"Turn on Lights","server":"","version":3,"debugenabled":false,"service_domain":"light","service":"turn_on","entityId":"${light}","data":"{\"brightness_pct\": percent }","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":944,"y":80,"wires":[[]]},{"id":"ae2da0f47601c2fe","type":"trigger","z":"63679689036f5ac9","name":"","op1":"","op2":"","op1type":"nul","op2type":"payl","duration":"30","extend":true,"overrideDelay":false,"units":"min","reset":"on","bytopic":"all","topic":"topic","outputs":1,"x":742,"y":176,"wires":[["cc0a13bfdbdb4c9c","c18f5dfe037c75e2"]]},{"id":"86c275031e92b82b","type":"server-state-changed","z":"63679689036f5ac9","name":"Motion","server":"","version":3,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"${motion}","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"$entity().state = on and $entities($env(\"boolean}).state = \"off\" ","halt_if_type":"jsonata","halt_if_compare":"jsonata","outputs":2,"output_only_on_state_change":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[],"x":530,"y":224,"wires":[["ae2da0f47601c2fe"],[]]},{"id":"c18f5dfe037c75e2","type":"api-call-service","z":"63679689036f5ac9","name":"Re-Enable Motion Automation","server":"","version":3,"debugenabled":false,"service_domain":"input_boolean","service":"turn_on","entityId":"${boolean}","data":"","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":994,"y":176,"wires":[[]]},{"id":"5f9b38e5588266bb","type":"server-state-changed","z":"63679689036f5ac9","name":"","server":"","version":3,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"${boolean}","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"off","halt_if_type":"str","halt_if_compare":"is","outputs":2,"output_only_on_state_change":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":254,"y":176,"wires":[["ae2da0f47601c2fe"],[]]},{"id":"22b44f2579e6a24a","type":"api-current-state","z":"63679689036f5ac9","name":"Automation on?","server":"","version":2,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"${boolean}","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":544,"y":128,"wires":[["cc0a13bfdbdb4c9c"],[]]},{"id":"7fd0e1fb668a490a","type":"api-current-state","z":"63679689036f5ac9","name":"","server":"","version":2,"outputs":2,"halt_if":"Day,Evening","halt_if_type":"str","halt_if_compare":"includes","entity_id":"input_select.time_of_day","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":448,"y":80,"wires":[["aa70a0c07c985ab6","1c11c98bb74ddb77"],[]]},{"id":"cbe180fd8d8ed207","type":"comment","z":"36ae403a7f79ba26","name":"Master Bedroom","info":"","x":112,"y":352,"wires":[]},{"id":"bf2e32e4af78e53a","type":"subflow:63679689036f5ac9","z":"36ae403a7f79ba26","name":"Master Bedroom","env":[{"name":"light","value":"light.master_bedroom_light","type":"str"},{"name":"motion","value":"binary_sensor.master_bedroom_motion_ias_zone","type":"str"},{"name":"boolean","value":"input_boolean.master_bedroom_automation","type":"str"}],"x":112,"y":400,"wires":[]}]

Thanks. How exactly do i modify, for example, “motion” in my flow to reference the motion detector that is defined earlier?