[device request] VivoActive HR (and any VivoActive) Garmin devices? #959

Open
by kalakrumanov opened 3 years ago · 29 comments
kalakrumanov commented 3 years ago (Migrated from github.com)
Owner

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.

Cheers.

K

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. Cheers. K
Owner

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?

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?
Toby-Haynes commented 3 years ago (Migrated from github.com)
Owner

The Garmin devices use ANT+ for communication and there are a few example implementations.

https://github.com/corbamico/ANT-Library

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.

https://github.com/jmackie/fitdc

The Garmin devices use ANT+ for communication and there are a few example implementations. https://github.com/corbamico/ANT-Library 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. https://github.com/jmackie/fitdc
nikhiljha commented 3 years ago (Migrated from github.com)
Owner

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.

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.
kalakrumanov commented 3 years ago (Migrated from github.com)
Poster
Owner

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?

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?**
geekpete commented 3 years ago (Migrated from github.com)
Owner

What about a tiny USB to bluetooth bridge?

What about a tiny USB to bluetooth bridge?
kalakrumanov commented 3 years ago (Migrated from github.com)
Poster
Owner

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.

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.
Tucura commented 2 years ago (Migrated from github.com)
Owner

Hello,
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!

Tuc

Hello, 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! Tuc
jedie commented 2 years ago (Migrated from github.com)
Owner

Support for Garmin Forerunner 235 would be great!

Support for **Garmin Forerunner 235** would be great!
ec1oud commented 2 years ago (Migrated from github.com)
Owner

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 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.
dmhowcroft commented 2 years ago (Migrated from github.com)
Owner

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).

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).
frafra commented 2 years ago (Migrated from github.com)
Owner
Interesting projects: - https://github.com/Tigge/openant - https://github.com/scrapper/postrunner

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.

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.

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? 🤔

Are the APIs for accessing data from different Garmin watches so different? So is access for Forerunner entirely different than access for Fenix? 🤔
Owner

@Mormegil

Do you aim to have this merged?

@Mormegil Do you aim to have this merged?

@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.

@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.

Hi!

Any news with Garming devices?? Fenix 3 and 5 have almost the same software.

Cheers!

Hi! Any news with Garming devices?? Fenix 3 and 5 have almost the same software. Cheers!

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 😉

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 :wink:

I wanna buy the Garmin Vivoactive3. Someone experiences whether @Mormegil fork will work with this model?

@Mormegil could you help us and explain a little bit what you have done to get the information you needed for your Garmin support? Do you use a blutooth sniffer or something like that?

I wanna buy the Garmin Vivoactive3. Someone experiences whether @Mormegil fork will work with this model? @Mormegil could you help us and explain a little bit what you have done to get the information you needed for your Garmin support? Do you use a blutooth sniffer or something like that?

@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.

@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?

@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_ELASTICSEARCH and 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 Oh, right, those are not versioned, they contain my local logging configuration. Just delete the offending lines completely (they are guarded by the `ENABLE_ELASTICSEARCH` and `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.)

@Mormegil could you please shortly explain what was the intention of integrating the elastic appender? As far as I understand the elasticsearch stores log messages in the cloud, or I am wrong?

@Mormegil could you please shortly explain what was the intention of integrating the elastic appender? As far as I understand the elasticsearch stores log messages in the cloud, or I am wrong?

@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)?

@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](https://www.elastic.co/start), 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](https://github.com/mormegil-cz/Gadgetbridge/discussions) (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.

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.

@ablu one big commit is not what we should aim for. It's more work but I'm currently adding commit by commit and squash only aspects that belong together.

@ablu one big commit is not what we should aim for. It's more work but I'm currently adding commit by commit and squash only aspects that belong together.

@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.

@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.

@ablu I agree, for personal usage one single commit is totally fine.

I want to provide the changes to upstream and maybe in the future we could work toghether to improve the feature set even more. :)

I will hurry up to avoid motivation loss on this project :D

@ablu I agree, for personal usage one single commit is totally fine. I want to provide the changes to upstream and maybe in the future we could work toghether to improve the feature set even more. :) I will hurry up to avoid motivation loss on this project :D

Great! I will likely continue testing on my weekends. So let me know whenever you have an updated patch set.
Feel free to ping me at https://matrix.to/#/@Ablu:matrix.org if you need help.

Great! I will likely continue testing on my weekends. So let me know whenever you have an updated patch set. Feel free to ping me at https://matrix.to/#/@Ablu:matrix.org if you need help.
Sign in to join this conversation.
No Milestone
No Assignees
9 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.