without its own client_id, how will it connect? you need to use subscriber client_id so that the device connects and use the publisher client_id to subscribe to publisher topic.
there is another way around if you like to do it, it is using node-red.
there is a tutorial on how to start with node-red and cayenne from @adam Using Node-RED as a Local Fallback Server
once you have got famillar with it and got your pi connect to cayenne with node-red, you can import this flow into your node-red:
[{"id":"6bc56682.b5c4f8","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"cf4707f9.2326d8","type":"mqtt in","z":"6bc56682.b5c4f8","name":"Cayenne Input","topic":"v1/username/things/client_id_of_publiser/data/14","qos":"2","broker":"33f82b09.92c7c4","x":160,"y":300,"wires":[["482ccb10.ea7314","a152a6b.6b47658","b51992fe.10189","c3a50bce.d011f8"]]},{"id":"482ccb10.ea7314","type":"debug","z":"6bc56682.b5c4f8","name":"","active":true,"console":"false","complete":"false","x":390,"y":260,"wires":[]},{"id":"a152a6b.6b47658","type":"function","z":"6bc56682.b5c4f8","name":"Send Back Received Value","func":"msg.payload = msg.payload.slice(-1);\n\nreturn msg;","outputs":1,"noerr":0,"x":440,"y":300,"wires":[["5da5bc04.608494"]]},{"id":"7340f6f4.0c1128","type":"inject","z":"6bc56682.b5c4f8","name":"Setup","topic":"","payload":"","payloadType":"str","repeat":"","crontab":"","once":true,"x":130,"y":180,"wires":[["f09360d8.604c9"]]},{"id":"f09360d8.604c9","type":"function","z":"6bc56682.b5c4f8","name":"Set Global Variables","func":"global.set(\"username\",\"See Post\");\nglobal.set(\"client_id_of_subscriber\",\"See Post\");\n\nreturn msg;","outputs":1,"noerr":0,"x":420,"y":180,"wires":[["cb06d1a7.6fcc3"]]},{"id":"cb06d1a7.6fcc3","type":"debug","z":"6bc56682.b5c4f8","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","x":770,"y":180,"wires":[]},{"id":"5da5bc04.608494","type":"debug","z":"6bc56682.b5c4f8","name":"","active":false,"console":"false","complete":"false","x":770,"y":240,"wires":[]},{"id":"b51992fe.10189","type":"mqtt out","z":"6bc56682.b5c4f8","name":"Cayenne Output Channel 1","topic":"v1/username/things/client_id_of_publiser/data/16","qos":"0","retain":"true","broker":"33f82b09.92c7c4","x":600,"y":440,"wires":[]},{"id":"c3a50bce.d011f8","type":"serial out","z":"6bc56682.b5c4f8","name":"output","serial":"7232faf5.520024","x":348.5,"y":546,"wires":[]},{"id":"33f82b09.92c7c4","type":"mqtt-broker","z":"","name":"","broker":"mqtt.mydevices.com","port":"1883","clientid":"client_id_of_subscriber","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"7232faf5.520024","type":"serial-port","z":"","serialport":"/dev/ttyACM0","serialbaud":"57600","databits":"8","parity":"none","stopbits":"1","newline":"\\n","bin":"false","out":"char","addchar":false,"responsetimeout":"10000"}]
in the flow, only the cayenne input
node will have the client_id of the publisher, so that it subscriber to the topic of the publisher.
the flow gets the temperature data from the publisher and send it to the arduino via serial port and shows the temperature from the publisher on the subscriber dashboard.
this is a basic flow on how to get data from another publisher device. you have change the flow according to your need.