Well, as i am not aware of the macro capabilities of blue iris, I will show you how to split up that string...
Flow...
[{"id":"48c18140b4da15fd","type":"function","z":"62a0e5a5.fc59bc","name":"","func":"const data = msg.payload;\nconst parts = data.split(\",\");\nconst objects = [];\nconst results = [];\nconst objectResults = {};\n\n//assuming the last entry is the device...\nconst device = parts.pop();\n\n\nfor (let index = 0; index < parts.length; index++) {\n const str = parts[index];\n const pair = str.split(\":\")\n if (pair.length == 2 && pair[1].trim().endsWith(\"%\") ) {\n objects.push(pair[0]);\n results.push(pair[1]);\n objectResults[pair[0]] = pair[1];\n }\n}\n\nconst object = {\n data,\n device,\n objects,\n results,\n objectResults\n}\n\nmsg.payload = object;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1720,"y":280,"wires":[["aedb432b6f8d2cf8"]]},{"id":"0b2e38bd38cc85c1","type":"inject","z":"62a0e5a5.fc59bc","name":"fake blue iris string","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"person:80%,Car:40%,Dog:38%,Camera1","payloadType":"str","x":1760,"y":220,"wires":[["48c18140b4da15fd"]]},{"id":"aedb432b6f8d2cf8","type":"debug","z":"62a0e5a5.fc59bc","name":"","active":true,"tosidebar":true,"console":false,"tostatus":true,"complete":"payload","targetType":"msg","statusVal":"payload","statusType":"auto","x":1920,"y":280,"wires":[]}]
To access parts of the message you are interested in, there’s a great page in the docs that will explain how to use the debug panel to find the right path to any data item.
Pay particular attention to the part about the buttons that appear under your mouse pointer when you over hover a debug message property in the sidebar.
https://nodered.org/docs/user-guide/messages