Gadgetbridge: Support more devices

Created on 3 May 2015  路  33Comments  路  Source: Freeyourgadget/Gadgetbridge

We would like to support more devices, like FitBits, Jawbones, Withings, Uno Noteband, Polar devices, ...

But we need help from owners of such devices.

For reference:

help wanted

All 33 comments

I'm hesitant to buy a miband or a fitbit. I have no technical expertise in coding, but perhaps with some indications I may help in some way. will I be helpful in case I buy a fitbit?
Amazing work guys/girls!! Thanks, you are great!!

Thanks for your encouraging words! We are currently busy with the Pebble and the Mi Band, so we cannot add support for other devices ourselves. This ticket is mostly to indicate that Gadgetbridge is not a closed world for Pebble+Mi. If someone jumps in to add support for other devices, s/he is very welcome to do so and we will support that.

I haven't even done any research regarding the "openness" of other devices, or reverse engineering efforts.

So if you want to have a Gadgetbridge-supported device right, it would be Pebble or Mi, mostly dependingon your intentions and wallet :-)

I would love to see support for fitbit, i.e. fitbit charge hr, which I own. There is a python project capable of interacting to some extend with a fitbit BLE device.

See https://bitbucket.org/benallard/galileo for further information.

How could one proceed here?

Thanks,
Raoul

Excellent :-)

At first, if you would like to help implementing support for it, one would start by opening a ticket "Support for fitbit devices" or something like that.

Then, we'd take the first steps in connecting with the fitbit by creating a class FitbitCoordinator like the class MiBandCoordinator and add that to the list of all device coordinators in DeviceHelper.createCoordinators().

The FitbitCoordinator has a method supports() which checks whether the given device is supported, e.g. by checking its MAC address for a given pattern, or something like that. If that method returns true, the fitbit will be recognized as "supported" and a pairing attempt is made, either with the standard android pairing dialog, or if that doesn't work like with the Mi Band, a custom pairing activity can be implemented.

That would be the first steps. What features of the fitbit are you most interested in?

I think we have quite a solid base now, so we can "easily" add support for new devices. "Easily" depends on whether the actual communication protocol for a particular device is open or already reverse engineered, of course.

If anyone has a spare device for which the protocol is known, I can offer two things

  1. give support/hand holding how to add support for the device in Gadgetbridge
  2. if someone sends me a spare device, I can add support for it myself (or someone else from our team)

Hi,

Unfortunately, I currently do not have enough time to purse this :-/
(I would need to set up the whole build environment, etc. which I currently do not have).

Happy to be kept in the loop though.

Cheers,
Raoul

No worries. Eventually we'll get there :-)

Surely it is great ambition to support many devices. But I think, that you should focus on providing stable universal platform, and move device support to plugins.

It's not like we're working on supporting 10 other devices right now. It's more a statement of intent. We _aim_ to be device independent and support many different devices. And we intend to write the code in such a way as to easily support different devices.

And by this, we also want to attract other people with different devices to succeed in that goal.

Has there been any movement recently towards supporting fitbit devices? I recently got a fitbit flex and was keen on using an opensource app like this one. I would love to test/know any updates!

No, not yet. I'm checking the related sites mentioned above for progress but I don't see a breakthrough yet.

AFAICS the problematic topics atm are:

  • bluetooth communication
  • encrypted data
  • the format of the "megadumps"

And as far as I understand (correct me if I'm wrong), all the projects need an internet connection to the fitbit servers in order to read the data.

I have been digging about this, and yes, you seem to be right. All projects seem to communicate to the server to get the data.
I was hoping there could be a way to circumvent that (from what I understand, it is done for the current devices), but from what you say, seems like no one has yet found everything needed to get data off of the device.
I wish there was something I could so, I would love to see this being supported. I am not a coder, but if there is something outside of coding that could help you, let me know. I would glady help towards the contribution.

You could ask the active projects if there is any progress in that regard. I only checked the docs and issues for 10minutes to come to this conclusion.

You could also ask if they actively try to get it server-less at all.

It would be really great if you could incorporate Jawbone functionality since the Jawbone service went down "temporarily" a few weeks back and hasn't returned. I have 2 (current and spare) Jawbone Up Move devices which are now essentially useless!

Plus, a lot of the work may be done for you already as the API appears to have been reverse-engineered already... http://eric-blue.com/projects/up-api/

@a1b0hph0b1a this is a community project so your sentence:

Plus, a lot of the work may be done for you already as the API appears to have been reverse-engineered already...

really should be written like:

Plus, a lot of the work may be done for us already as the API appears to have been reverse-engineered already...

@danielegobbetti LOL, point taken. It's a bit above my level of coding skill probably, but I'll help where I can! So, it really is more a you than an us TBH!

But yeh, Jawbone integration will make a lot of Jawbone owners happy (my self included) at least till their stash of Jawbone devices dies forever!

@a1b0hph0b1a I may be splitting hairs here, but: "the work may be done for us" doesn't necessarily mean "done by us" :wink:

@a1b0hph0b1a

While personally I am interested in Up! support, the link you posted is useless because it does not document the Bluetooth protocol but the http protocol which is used between servers and proprietary app. So this information could be used to replace the jawbone servers with ones own servers by reimplementing the server side code while keeping the closed source app. But this is not what we want.

We would need information on the Bluetooth protocol.

Ah, my fault. Obviously didn't read in enough detail.

So, what would be my best way to go about reverse engineering the protocol? I have an ESP32 which has BLE support, which may be a place to start. I've reversed engineered a few things over the years, namely the 434MHz Uni-com wireless doorbell, but this is a new kettle of fish. Otherwise there are such things as "protocol analysers" and such.

I've started with nRF Connect, but the data doesn't mean a lot to me.

@a1b0hph0b1a you can start by capturing bluetooth snoops from your phone (it's in the developers settings of your android device). The captured snoops can be analyzed with wireshark.

@danielegobbetti May you please detail more or point to a link detailing the process of BT snooping ? as I have Withings Pulse and I would be happy to help if I can to support it in a way or an other ;)

@vincegre there should be an option to capture BT logs in the developers settings of your phone. You could have searched for "snoop" here and you would have found this wiki page. :)

Happy hacking!

@danielegobbetti oups and thanks for link ;) Have tried to do that on my OnePlus 3 but not much luck ! the option in developper settings is not exact same name and it doesn't record any file (snoop files I found in phone are one year old !). Will try with my tablet, might have more luck ;)

@danielegobbetti Succeeded to do the capture on tablet of the whole pairing process !! Now I need to extract data of that binary blob ! I tried to open it directly in Wireshak but not much chance !聽Any indications somewhere how to proceed ? Made quick search on net but found nothing usable out of stating I have to consider it as PCAP聽logs in Wireshak....

Would it be possible to also support other devices such as Mi Smart Kettle?

If I would have known I could only use it when I allow Xiaomi to spy myself, I wouldn't have bought it.

Yes, sure. It just needs someone to figure out the protocol and probably adding a bit of UI for it.

Would love to see support for Jawbone - just by looking on reddit it seems that many people still own and like their jawbone devices (especially the Up3) since Jawbone dropped their support.

As you mention a new device would you please also write the main chip,
proprietary app name and means of communication? That would help at some
point

regarding #504 i have looked and played around with a fitbit charge HR and https://github.com/seemoo-lab/fitness-app and i got 'live mode' enabled which sends the devices time, steps, distance, calories, elevation, very active minutes (training), and Heart Rate, its a bit buggy but that might be my old fitbits fault, the fitbit app behaves the same, i could try to port the live mode parts into this app. my end goal is transmit my heartrate data to my bike gps so i can look at it while rideing (but that would be a different feature)

Hi, I'm also using a Jawbone UP Move.. or should I say I used it..
Would be amazing if you could add support for it.
I can't code but if there is something I can help I'm more then willing. And I'd definatly buy you coffee if you bring my jawbone back to live!

I have a FitBit Charge 3 with NFC for payments.

How can I be of assistance for bringing the support to this app?

Are there any news about the Mi Smart Kettle?

Was this page helpful?
0 / 5 - 0 ratings

Related issues

6arms1leg picture 6arms1leg  路  6Comments

RustyRaptor picture RustyRaptor  路  3Comments

UncleInf picture UncleInf  路  3Comments

Jiack214 picture Jiack214  路  4Comments

NeverUsedID picture NeverUsedID  路  5Comments