-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
How to work in reverse - emulate the controllers instead of connecting to them? #9
Comments
After doing some experimenting and reviewing this source, QZ, and monitoring network traffic, I got this basic test to appear like a Wahoo KICKR over the network, in c#. Not a controller (yet) but progress in .NET. Zwift queries for both Also of note, I now have a JetBlack Victory and it's actually answering as
|
I don't really have anything to add here, other than to say my original intention was to emulate the controllers. I quickly hit a dead end, not with the ZAP part of the the Bluetooth protocol, but the standard device profile services that couldn't replace the existing ones the phone itself broadcast. (or indeed the one on the Pi I tried) Its really interesting to apply all this over ethernet though. |
Could you walk through the order or steps of what you were trying to do on mobile (I assume Android) or the Pi? There's a lot more flexibility with mDNS and TCP traffic. I'm also hoping to find someone with a KICKR Bike because that is a known quantity that has passed Controls to Zwift through the network. It's possible that Zwift doesn't care if a device is available over Bluetooth or the network - it's also possible they only expect certain devices over the network and that an unexpected one would be ignored. |
guys check this cagnulein/qdomyos-zwift#2961 (comment) |
Nice! I just got a Victory and have been starting to work on it as well. I have been spending time reading through your QZ source @cagnulein, that's part of how I was able to get C# I wrote above to work. I hadn't seen this branch, though. Are you getting an emulated Zwift Play controller to appear through DirCon? This is from one of the earlier commits in that PR, it's not the final format.
|
yes i'm able to emulate the custom 00001 characteristics from zwift with that code. |
I have an app I'm working on where the goal isn't to integrate with the Zwift Play controllers - instead I want to make video game controllers available to Zwift. You have a .NET c# example here of an application replicating what Zwift does to handshake and communicate with Zwift Play controllers... can we virtually replicate what the Zwift Play controllers themselves do and connect that to Zwift instead?
I have been reading through this repo, working to better understand cagnulein's QZ, and reading Makinolo's posts. I think I'm at the very beginning of starting to understand this... but barely. I could really use some help.
GPLama has a video showing the Wahoo KICKR Bike can "Direct Connect" its handlebar controller over ethernet to Zwift. Between the KICKR Bike being a controller over ethernet and QZ demonstrating that it's possible to emulate Wahoo's "Direct Connect" ethernet technology, I think we're seeing it's technically feasible to virtually implement either a Zwift Play controller or a KICKR Bike controller.
Instead of BLE Advertising I believe QZ and Zwift use mDNS to multicast their presence on the network, which enables the other host to answer the query and begin the conversation. I just got a JetBlack Victory with Wi-Fi capabilities, so I should be able to test and Wireshark-capture this with real hardware. As far as I can tell, the data packets are the same, it's just sent over Wi-Fi.
Furthermore it makes me wonder if Zwift cares if the device is Bluetooth or Wi-Fi... if Zwift is expecting specific devices over the network then this would require spoofing Wahoo KICKR, but if any compatible device is okay to "appear" over Ethernet then we could present as Zwift Play or even Zwift Ride.
Do you think you could take a stab at a .NET or C# sample that behaves like a Zwift Play controller? I don't understand this well enough to know how easy or difficult that might be.
The text was updated successfully, but these errors were encountered: