I have Zwave TDBU Bali shades (new models, purchased this year), and only bottom rail is working with all available drivers.
Top rail is using custom and undocumented zwave commands.
I've been messing around with Claude to try to reverse engineer it. I got it to work, partially. It's good enough for my use, but sharing it with more people - it may also work for you, or maybe you want to continue reverse engineering to make it fully functional.
I'm only able to move top rail to 69% (nice, but no idea why this number) on 2 TDBU shades I have. And then close it.
With those limitations (I don't need granular control) driver just supports 4 states - fully open, fully closed, half open from top, half open from bottom. Given that top moves in weird way, it cannot transition smoothly between those states, so it may fully open/close shades before setting the right command. That's why it has travelTimeSec - it's how long driver needs to wait before issuing next commands - it's set by default to 40s, as my shades take about 35s to make full move.
This all vibecoded, and included outcome of the current state of research in the comments. No warranty, I have no intention in developing it further myself. But with the current state of vibecoding, you should be able to take it further/tune it for your needs if you want to support your TDBU shades.
Ok, my previous attempt failed WAF tests, and while I was happy with it, I had to go back to the drawing board.
I ended up with much better working driver now. I was able to reverse engineer how to set presets - and they trigger movement of both motors. Great thing about it, is that internally shades understand current state and know how to move between presets in most optimal way - previous driver required some weird dance around it.
It's really simple. switchMultilevelSet, starting from 246 correspond to presets in the app. 1st one is 246, 2nd one is 247, etc. I've configured 6 for myself, and created explicit commands for those presets. If anyone is interested - it's easy to rename those/add/remove or figure out nicer interface for it.
Hopefully WAF test is now at 100% and I don't need to reverse engineer more.