Ok, give this a whirl. It queries all bulbs for which IP addresses are given every 10 seconds, and sends this to MQTT, and queries again on a change to a bulb (via UDP).
This works very nicely for me, and faster than the Wiz app. I struggled a little bit with the templating for the RGB bulbs, but otherwise I think this is pretty tight.
[{"id":"21cbe739.15d9c8","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"b579249.841f4d8","type":"udp in","z":"21cbe739.15d9c8","name":"UDP2MQTT <gw listening UDP port>","iface":"","port":"38900","ipv":"udp4","multicast":"false","group":"","datatype":"utf8","x":210,"y":660,"wires":[["2ae4d01b.79f26"]]},{"id":"4e9174c8.cb986c","type":"comment","z":"21cbe739.15d9c8","name":"Relay UDP to MQTT","info":"","x":130,"y":600,"wires":[]},{"id":"fa19997f.c4a078","type":"function","z":"21cbe739.15d9c8","name":"relay to udp","func":"var ipArr = [\n\"192.168.164.x\",\n\"192.168.164.x\",\n\"192.168.164.x\",\n\"192.168.164.x\"\n ];\n\nmultiMsg = {};\n\nipArr.forEach(myFunction); \n\nfunction myFunction(item, index) \n{ \n var msg = {}\n msg.ip = item;\n msg.port = 38899;\n \n var pl = {method:\"getPilot\", \n params : {}};\n \n msg.payload = pl;\n multiMsg[item] = msg.payload;\n}\n\nmsg.payload = multiMsg;\nreturn msg;","outputs":1,"noerr":0,"x":330,"y":240,"wires":[["4a40c54.eb1663c"]]},{"id":"9738fe47.c95a1","type":"inject","z":"21cbe739.15d9c8","name":"Repeat q 10 s","topic":"","payload":"","payloadType":"date","repeat":"10","crontab":"","once":true,"onceDelay":"5","x":100,"y":240,"wires":[["fa19997f.c4a078"]]},{"id":"ba6b39ae.da6508","type":"udp out","z":"21cbe739.15d9c8","name":"UDP auto port/ip","addr":"","iface":"","port":"38899","ipv":"udp4","outport":"38900","base64":false,"multicast":"false","x":810,"y":240,"wires":[]},{"id":"4a40c54.eb1663c","type":"split","z":"21cbe739.15d9c8","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"ip","x":490,"y":240,"wires":[["c5c478f6.506058"]]},{"id":"c5c478f6.506058","type":"json","z":"21cbe739.15d9c8","name":"","property":"payload","action":"","pretty":false,"x":630,"y":240,"wires":[["ba6b39ae.da6508"]]},{"id":"645e1d4b.17b4b4","type":"comment","z":"21cbe739.15d9c8","name":"Query All Bulbs Every 10 Seconds","info":"","x":160,"y":180,"wires":[]},{"id":"4c6937dc.999c28","type":"json","z":"21cbe739.15d9c8","name":"","property":"payload","action":"","pretty":false,"x":230,"y":500,"wires":[["c4e6fab9.e40268"]]},{"id":"d45bf5f9.053ac8","type":"comment","z":"21cbe739.15d9c8","name":"Relay MQTT to UDP","info":"","x":110,"y":360,"wires":[]},{"id":"c4e6fab9.e40268","type":"function","z":"21cbe739.15d9c8","name":"relay to udp","func":"// expects the mqtt topic to be wizlight/ip/command\n\nmsg.ip = msg.topic.split(\"/\")[1];\n\nvar obj = {}; \nobj = msg.payload;\n \nvar p = {};\n\nvar pl = {method:\"setPilot\", \n id:527, \n env:\"pro\", \n params : obj};\n\nmsg.payload = pl;\nmsg.command = msg.topic.split(\"/\")[2];\n\nmsg.port = 38899\n\nreturn msg;","outputs":1,"noerr":0,"x":390,"y":500,"wires":[["d3371846.5b01a8"]]},{"id":"1ea8ec1d.0d2d74","type":"mqtt in","z":"21cbe739.15d9c8","name":"Wizlight In","topic":"wizlight/#","qos":"0","datatype":"auto","broker":"7ca43ccf.bcea44","x":100,"y":440,"wires":[["4c6937dc.999c28"]]},{"id":"b98d58c7.ccb928","type":"udp out","z":"21cbe739.15d9c8","name":"UDP auto port/ip","addr":"","iface":"","port":"","ipv":"udp4","outport":"38899","base64":false,"multicast":"false","x":1010,"y":400,"wires":[]},{"id":"47549dc1.9ba0a4","type":"json","z":"21cbe739.15d9c8","name":"","property":"payload","action":"","pretty":false,"x":650,"y":500,"wires":[["8764c6c2.3d27d8"]]},{"id":"a0d26ebc.76d71","type":"repeat","z":"21cbe739.15d9c8","name":"Triple It Up","repetitions":"3","elseOutput":false,"outputs":1,"x":730,"y":400,"wires":[["b98d58c7.ccb928","47549dc1.9ba0a4","f086575b.7055a8"]]},{"id":"8764c6c2.3d27d8","type":"delay","z":"21cbe739.15d9c8","name":"","pauseType":"delay","timeout":"25","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":830,"y":500,"wires":[["a0d26ebc.76d71"]]},{"id":"2ae4d01b.79f26","type":"json","z":"21cbe739.15d9c8","name":"","property":"payload","action":"","pretty":false,"x":470,"y":660,"wires":[["7e2173a7.c445ec"]]},{"id":"7e2173a7.c445ec","type":"function","z":"21cbe739.15d9c8","name":"Create MQTT message","func":"// expects the mqtt topic to be wizlight/ip/command\n\n// convert state to on/off\n\n\n\nmsg.payload = msg.payload.result;\nmsg.topic = \"wizlight/\" + msg.ip + \"/status\"\n\nif (msg.payload.state === true) {\n msg.payload.state = \"on\"\n} else {\n msg.payload.state = \"off\"\n}\n\n\nreturn msg;","outputs":1,"noerr":0,"x":670,"y":660,"wires":[["8e010fb5.fb0bd"]]},{"id":"8e010fb5.fb0bd","type":"mqtt out","z":"21cbe739.15d9c8","name":"Send to MQTT","topic":"","qos":"0","retain":"","broker":"a6852ac6.173b78","x":900,"y":660,"wires":[]},{"id":"d3371846.5b01a8","type":"switch","z":"21cbe739.15d9c8","name":"","property":"command","propertyType":"msg","rules":[{"t":"eq","v":"set","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":530,"y":560,"wires":[["47549dc1.9ba0a4"]]},{"id":"f086575b.7055a8","type":"repeat","z":"21cbe739.15d9c8","name":"Only Allow Once","repetitions":"1","elseOutput":false,"outputs":1,"x":710,"y":340,"wires":[["22de1803.bbafd8"]]},{"id":"22de1803.bbafd8","type":"delay","z":"21cbe739.15d9c8","name":"Wait One Second","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":930,"y":340,"wires":[["fa19997f.c4a078"]]},{"id":"7ca43ccf.bcea44","type":"mqtt-broker","z":"","name":"<IP of your MQTT broker>","broker":"<IP of your MQTT broker>","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"a6852ac6.173b78","type":"mqtt-broker","z":"","name":"<IP of your MQTT broker>","broker":"<IP of your MQTT broker>","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","willTopic":"","willQos":"0","willPayload":""}]