I have an application for a join node, which needs to be duplicated for a dozen identical flows (except one branch of their mqtt topic is unique).
farm/fans/[device1:device2:etc]/cmd/#
[{"id":"53f6c7f2.440858","type":"inject","z":"4c195d90.05acd4","name":"Mode 3","topic":"farm/fans/test/cmd/mode","payload":"3","payloadType":"str","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":200,"y":660,"wires":[["213bd5df.55d40a"]]},{"id":"b63ead4.c02a15","type":"inject","z":"4c195d90.05acd4","name":"Min Speed Drying 10","topic":"farm/fans/test/cmd/minspddrying","payload":"10","payloadType":"str","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":160,"y":720,"wires":[["213bd5df.55d40a"]]},{"id":"48849e20.dab9f","type":"inject","z":"4c195d90.05acd4","name":"Temperature 5","topic":"weather/tempc","payload":"5","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":190,"y":880,"wires":[["213bd5df.55d40a"]]},{"id":"213bd5df.55d40a","type":"join","z":"4c195d90.05acd4","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":true,"timeout":"","count":"5","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":430,"y":780,"wires":[["c1b70fb8.3fbe5"]]},{"id":"5ceae7e3.d32c18","type":"function","z":"4c195d90.05acd4","name":"","func":"\nreturn msg;","outputs":1,"noerr":0,"x":730,"y":780,"wires":[["4d02cf2.fd7033"]]},{"id":"4d02cf2.fd7033","type":"debug","z":"4c195d90.05acd4","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":770,"y":840,"wires":[]},{"id":"ce13bb5b.7e8158","type":"inject","z":"4c195d90.05acd4","name":"Max Speed Drying 75","topic":"farm/fans/test/cmd/maxspddrying","payload":"75","payloadType":"str","repeat":"","crontab":"","once":true,"onceDelay":0.1,"x":160,"y":780,"wires":[["213bd5df.55d40a"]]},{"id":"28a5da98.a897b6","type":"inject","z":"4c195d90.05acd4","name":"Temperature 0","topic":"weather/tempc","payload":"0","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":190,"y":840,"wires":[["213bd5df.55d40a"]]},{"id":"f93bfb37.2f5408","type":"inject","z":"4c195d90.05acd4","name":"Temperature 25","topic":"weather/tempc","payload":"25","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":180,"y":920,"wires":[["213bd5df.55d40a"]]},{"id":"76d60153.366b3","type":"inject","z":"4c195d90.05acd4","name":"Temperature 30","topic":"weather/tempc","payload":"30","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":180,"y":960,"wires":[["213bd5df.55d40a"]]},{"id":"b4357583.d03f48","type":"inject","z":"4c195d90.05acd4","name":"Humidity 30","topic":"weather/humidity","payload":"30","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":190,"y":1020,"wires":[["213bd5df.55d40a"]]},{"id":"6b6d7524.25a44c","type":"inject","z":"4c195d90.05acd4","name":"Humidity 40","topic":"weather/humidity","payload":"40","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":190,"y":1060,"wires":[["213bd5df.55d40a"]]},{"id":"1af4bdfd.095f32","type":"inject","z":"4c195d90.05acd4","name":"Humidity 85","topic":"weather/humidity","payload":"85","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":190,"y":1100,"wires":[["213bd5df.55d40a"]]},{"id":"94bec3ca.b9a8f","type":"inject","z":"4c195d90.05acd4","name":"Humidity 95","topic":"weather/humidity","payload":"95","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":190,"y":1140,"wires":[["213bd5df.55d40a"]]},{"id":"c1b70fb8.3fbe5","type":"switch","z":"4c195d90.05acd4","name":"","property":"payload[\"farm/fans/test/cmd/mode\"]","propertyType":"msg","rules":[{"t":"eq","v":"3","vt":"str"},{"t":"else"}],"checkall":"false","repair":false,"outputs":2,"x":570,"y":780,"wires":[["5ceae7e3.d32c18"],["279eb0f4.8e0ff"]]},{"id":"279eb0f4.8e0ff","type":"debug","z":"4c195d90.05acd4","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":590,"y":840,"wires":[]},{"id":"638a0b06.5b4c94","type":"inject","z":"4c195d90.05acd4","name":"Mode 1","topic":"farm/fans/test/cmd/mode","payload":"1","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":210,"y":620,"wires":[["213bd5df.55d40a"]]}]
What is a good way to duplicate the flow so that if I change one flow, they all change? If I create a sub flow, it would only include the join and function nodes and I still have to modify each mqtt node when I duplicate the flow?
I envision I could use one flow if the join node could be setup in a two tier system. What I mean is, can it join 5 payloads from each device separately in the same join node?