[device request] VivoActive HR (and any VivoActive) Garmin devices?
I looked deeply into the wikis and faqs, and haven't seen any place for suggesting new devices. I haven't seen any Garmin, such as Vivo Active family (HR also).
This a massively used device, I think a lot of people will be happy with this addition.
I loooove this project, thanks for all your work. We needed this for a little bit more of privacy.
Thanks for the kind words. We've had a brief look at one of the Garmin devices, but it looked like a pretty closed platform, so we didn't spend much time on it.
Do you know of any other projects reverse engineering their protocol?
The Garmin devices use ANT+ for communication and there are a few example implementations.
File format appears to be FIT. The original implementation is under a license - but there are open source implementations that do not appear to be encumbered.
Samsung devices have support for the ANT+ protocol as well, so it should be fairly straightforward to add support for it on such devices.
The FIT file format is only accessible when connected via USB, which is incredibly inconvenient.
Let's imagine that I want to help the app and others (which I do), and I have a garmin device, how can I help? I mean, I can easily learn almost anything about programming and similar.... What do I have to learn to decrypt the data from the device and publish it here so everyone can benefit from it?
What about a tiny USB to bluetooth bridge?
Any news on Garmin devices? Like the famous Fenix 3 or 5 ? I can provide with any files you need from the devices I have or can borrow from friends.
i have a vivosport. Atm i figured out to find the device and start a pairing process. This works fine! Your tutorial helped me with this.
But now I'm a bit lost. What would be the next step? I thought sniffing the bluetooth traffic between my watch and the vendors app. Is this the right way to figure out the protocol? How awful is it going to be with the channel hopping of BLE.
Is there a way to log the bluetooth traffic between the device and the vendor app on the mobile itself without the need of root?
Thanks in advance, take care!
Support for Garmin Forerunner 235 would be great!
I'm interested in this too; I switched from Pebble to Fenix 5 because the built-in GPS is really nice for tracking biking, skiing and such things, and the battery life is even better than Pebble as long as I don't use GPS. FIT files are easy to convert with gpsbabel, but getting the files off the watch is tedious (Linux is not getting along with their USB implementation, so I have to use a Mac, but then I can mount the filesystem and get the fit files with no further ado). But if gadgetbridge could at least take care of some minimal BLE functionality, I could avoid installing Garmin Connect on my phone for the everyday stuff, even if it's not a complete sports tracker.
I searched github and found some interesting projects like https://github.com/corbamico/ANT-Library https://github.com/cyrilStern/garminblecompteur https://github.com/urbandroid-team/Sleep-as-Android-Garmin-Addon but I haven't tested any of those yet. Sleep As Android is non-free ad-supported.
Several guys I work with have Fenix watches too. They are very popular.
I was able to pair my Fenix 5 on a phone without Connect installed, and by googling I see that it is supposed to support both ANT+ and BLE.
I'm also a Garmin user (VivoFit 2) and incredibly frustrated that I can't get data off my wrist without uploading it to their servers. I'm also willing to help development, but would need some guidance about how to approach the project (e.g. tools for sniffing the bluetooth connection, etc).
As I'm owning a Garmin Fenix 6 Pro, I'm also interested in a support of Garmin watches.
Would it be possible (as a workaround) to implement an import feature for Garmin *.fit and/or *.tcx files? With this feature it would be possible to use the watch in offline mode (without syncing data to Garmin Connect) and using gadgedbridge for evaluating the data.
I have been working on a Garmin Vivomove HR support. My primary motivation was to receive notifications on the watch, but this is basically the only thing I did not get working (yet?). Otherwise, activity data, time setting, find my watch/my mobile, etc. seem to be working fine already and I have been using the forked Gadgetbridge for quite some time.
The code is ugly and not very robust on many places but if you are interested on checking it out, take a look at https://github.com/mormegil-cz/Gadgetbridge/tree/garmin-wip.
Are the APIs for accessing data from different Garmin watches so different?
So is access for Forerunner entirely different than access for Fenix? 🤔
@ashimokawa YES! That was the original idea… in the long run… Erm…
I mean, the current state of the code is very rough; some parts are more-or-less experimental (and for some, a discussion about the best way to design/implement might be useful), some are usable, but possibly not very robust, everything needs cleanup, etc.
And the most important issue for me are the notifications which still don’t work yet…
Unfortunately, the original driving impulse is gone, and now I work on it very intermittently…
@alexanderadam Yeah, my guess is that the code should work for many/most (?) Garmin watches. One issue in my current code is that I have currently “vívomove HR” hardcoded in the pairing filter, since AFAICT the service UUIDs are not available during the
AbstractDeviceCoordinator.getSupportedType scan? Not sure, that is one of the many cleanup issues in the current code. But you could change this tiny bit of source code and test it.
Any news with Garming devices?? Fenix 3 and 5 have almost the same software.
I am going to have a look if I can use the code created by @Mormegil to create a more robust implementation.
My focus is on adding support for the Garmin Venu SQ but hopefully other devices will profit as well :)
This is my first dive into Android Development and I do not know how much time I'll have so don't expect any magic 😉
@bes1002t I believe there is a good chance it might already work. However, there is one limitation in the code. In
VivomoveHrCoordinator.getSupportedType, there is a hardcoded hack to detect the device as supported if its name is "vívomove HR".
Theoretically, the second part of the
getSupportedType implementation might detect all other supported devices, however, it seems the candidate passed to this method does not have its
getServiceUuids filled (yet). I am not sure if it is a bug, limitation of Gadgetbridge or my mistake how is this supposed to work.
Anyway, you might need to change the hardcoded string (or even return
DeviceType.VIVOMOVE_HR unconditionally…) for other Garmin devices to be recognized.
@Mormegil unfortunately your code does not build. Neither class ElasticsearchConfiguration nor SyslogConfiguration, could be found.
Could you please double check whether these classes are under version control?
@bes1002t Oh, right, those are not versioned, they contain my local logging configuration. Just delete the offending lines completely (they are guarded by the
ENABLE_SYSLOG variables), or possibly substitute your own configuration for your ElasticSearch/Syslog instance if you want to have remote logging. (Unfortunately, I see no usable way to keep the references out of the common versioned code without major refactoring; C# partial classes/methods would come in handy here.)
@bes1002t Yeah, basically; your application will send its log messages to the ES server where you can view them, search them, visualize them, etc. (Though it is not necessarily in the cloud; you might have a local installation, just like I do.) Especially when debugging such a mobile application, it’s much more comfortable to have all logs immediately appear in your desktop browser than copying log files from the device after every test.
OBTW I guess other people watching this issue are not much interested in these details? If you want, you might take this off-tracker (e.g. by direct e-mail, or maybe the GitHub Discussions on my fork (though I never used them before)?
Great work @Mormegil! I took your changes, squashed them (made the rebase a bit easier), removed the logging changes and the find my phone functionality (I was not sure how to rebase that), rebased it on top of master and added vivoactive3: https://codeberg.org/ablu/Gadgetbridge/src/branch/garmin-wip
My vivoactive3 seems to connect, battery status is reported and it seems to sync some fit files. Though I am still trying to make sense of how to find my runs there... (they are totally different from the .fit files which I can download via USB). Will give an update once I figure out more.
@bes1002t true. But the history was a interleaving a bit. So I assumed that it would be easier to split the commit later compared to trying to squash and rebase at the same time. But overall this was just the quickest way for testing how well it would work for my vivoactive3 :). This is not meant to be ready for submission by any means.
Deleting a branch is permanent. It CANNOT be undone. Continue?