How about a function node?
[{"id":"77fb6a686686f25e","type":"inject","z":"6f729596a4b72dd6","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"nothing","payloadType":"str","x":350,"y":320,"wires":[["f334b635cf738b20"]]},{"id":"e22b766ad5f30e6c","type":"inject","z":"6f729596a4b72dd6","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"no_pose","payloadType":"str","x":360,"y":500,"wires":[["6fb7c7ef7790601b"]]},{"id":"1ecf48f75f4bc5be","type":"inject","z":"6f729596a4b72dd6","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"cat","payloadType":"str","x":350,"y":360,"wires":[["f334b635cf738b20"]]},{"id":"373979a7e10313aa","type":"inject","z":"6f729596a4b72dd6","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"sitting","payloadType":"str","x":350,"y":540,"wires":[["6fb7c7ef7790601b"]]},{"id":"a85b801b2b94eb9d","type":"inject","z":"6f729596a4b72dd6","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"walking","payloadType":"str","x":350,"y":580,"wires":[["6fb7c7ef7790601b"]]},{"id":"64a0fa709af412fd","type":"inject","z":"6f729596a4b72dd6","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"dog","payloadType":"str","x":350,"y":400,"wires":[["f334b635cf738b20"]]},{"id":"f334b635cf738b20","type":"change","z":"6f729596a4b72dd6","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"object","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":540,"y":360,"wires":[["7c02427e5ab1352f"]]},{"id":"6fb7c7ef7790601b","type":"change","z":"6f729596a4b72dd6","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"pose","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":540,"y":540,"wires":[["7c02427e5ab1352f"]]},{"id":"7c02427e5ab1352f","type":"function","z":"6f729596a4b72dd6","name":"","func":"const valOrReset = function (newVal, oldVal, lastVal, resetVal) {\n return (newVal == oldVal) ? lastVal : resetVal\n}\n\nconst resetObject = 'nothing'\nconst resetPose = 'no_pose'\n\nconst lastObject = flow.get('lastObject') || resetObject\nconst lastPose = flow.get('lastPose') || resetPose\n\nlet newObject\nlet newPose\n\nif (msg.topic == 'object') {\n newObject = msg.payload\n flow.set('lastObject', newObject)\n newPose = valOrReset(newObject, lastObject, lastPose, resetPose)\n} else {\n if (msg.topic == 'pose') {\n newPose = msg.payload\n flow.set('lastPose', newPose)\n //newObject = valOrReset(newPose, lastPose, lastObject, resetObject)\n newObject = lastObject\n } else {\n msg.payload = { 'object': lastObject, 'pose': lastPose }\n return msg;\n }\n\n}\n\nmsg.payload = { 'object': newObject, 'pose': newPose }\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":760,"y":440,"wires":[["cc032979ee6f1822"]]},{"id":"cc032979ee6f1822","type":"debug","z":"6f729596a4b72dd6","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":930,"y":440,"wires":[]}]
Gives you in payload an object like this:
EDIT: corrected function to keep old Object if only pose changed