Bangle.js 2 and GrapheneOS

Posted on
  • I commented this on a conversation marked completed so I wasn't sure if anyone would see it. I am reposting it.

    Just got my Bangle.JS 2 a few days ago. I'm unable to pair the watch to my Pixel 7 with GrapheneOS.

    OS and hardware:

    GrapheneOS on Pixel 7
    Ubuntu 23 on dell laptop
    Asus USB-BT500 usb bluetooth adapter

    Behavior and troubleshooting:

    Originally showed up as a device in GrapheneOS, and in Ubuntu on my laptop.
    It would not allow me to pair and load apps in brave(as said in the docs), but it does allow me to pair and load apps in ungoogled-chromium without any issues as long as the proper chrome flags are enabled
    After disconnecting from ubuntu I tried to pair with my pixel, originally it would show up and allow a pair, but not let me do anything with it, then it would show up as a pairable device, but not let me pair just does nothing when I tap on it. Now, sometimes it'll show up and sometimes it won't.
    Gadgetbridge does not see it even when my bluetooth does
    My work device, a macbook pro would not even see the device in bluetooth.
    It pairs without issue on my old Galaxy S10e, but says it needs an app for the device
    A lot of the time I have to quit settings, turn off bluetooth, open settings back up and turn it back on to see the device again in both Ubuntu and GrapheneOS
    I have never had any issues with any bluetooth devices on Graphene, or Ubuntu with my usb bluetooth adapter.
    I noticed at one point either on ubuntu or graphene when I selected my bangle the bluetooth symbol on the bangle would flash blue for a sec every time I selected the device to connect. I do not remember which device this was on and can't seem to reproduce it.
    I've factory reset my bangle once.
    I've tried using the gadgetbridge app from the playstore, aurora store, and F-droid
    I've tried connecting on my profile with google play services enabled and my profile that has google play services not installed

    Edit: I am able to see it as a device consistently now by turning off Bluetooth and restarting the bangle, but still nothing happens when I select it for pairing in my Bluetooth settings.

    Any help would be appreciated

  • Don't pair directly in the device's Bluetooth settings. If you have already, unpair it.

    Use the "Connect" button in the App loader, or "Connect new device" in Gadgetbridge (and it might even be beneficial to choose the option not to pair there).

    That's something to start with...

  • There was some trouble with a series of recent Linux kernels as well, but now they seem to have worked it out. See e.g. https://forum.espruino.com/conversations­/388952/

  • Are you using whitelist feature in settings of bangle?

    Some tips:
    Make sure you are disconnected from it on other devices/apps before trying others.
    Experiment with enabling pin and disabling pin, in watch settings
    Ensure whitelist in the watch settings is off for now.
    Use a default clock or long press and go to recovery menu and use Clean Boot, see if that helps.
    Toggle your bluetooth on and off on phone, unpair if already paired. Reinstall gadgetbridge, ensure it has correct permissions.
    Ensure programmable and connectable is set to true in watch settings.
    Ensure your watch has up to date firmware and apps. Try fresh install if haven't.
    Test if nrf DFU app detects your watch in dfu mode. (long press button, then release midway), it shows as DfuTarg

  • Thank you for the replies, I've tried everything you described and the Bangle won't show up in the device discovery in the Bangle.js gadgetbride.

    I've installed bangle gadgetbridge on my old galaxy s10e and it finds the device and pairs without issues. So it must be something in GrapheneOS. I don't know what it is, but if anyone has grapheneOS and has their Bangle connected please let me know if I need to enable some permission in the settings.

  • This behaviour seems to have started with the update to Android 13. I can not say that for sure, since the device also has changed from Pixel 4a to Pixel 6a at that time, but I suspect the hardware has nothing to do with this. Installing the Bangle.js build from the Playstore (I used Aurora from FDroid to do that) has worked and the notification access permission can be set to on as expected. Both versions of GB from FDroid do not work on that device for me, the changing of the setting is just not allowed.

    From another graphene user.
    From this thread : https://forum.espruino.com/conversations­/382553/#16818510

    https://www.espruino.com/Gadgetbridge#ex­tra-setup

    1. Make sure the watch isn't paired in the phone's Bluetooth settings.
    2. Make sure the watch isn't connected to any other device.
    3. Enable Passkey in Settings -> Bluetooth on the watch.
    4. Connect the watch through Gadgetbridge and choose not to pair.

    That's what seems to have worked on the other thread you replied to (for a GrapheneOS user).

  • Thank you for the replies, I have tested a lot with the passkey setting. I just tested again a few times after reading your reply with the Bangle gadgetbridge app from the playstore. Still nothing. Previously I was getting some sort of background service error using the app from the Aurora store. I'm no longer getting that error, but still nothing.

    Edit: I was mistaken I am actually still getting this error, here's a screeshot

  • Thank you for the reply, are you suggesting I use a USB-c bluetooth adapter? I don't think I'd see that as a solution, I'd have to remove it when charging.

  • Nope, just grabbing as much from web as I can. Check that codeberg.org link, the bugs are quite recent. You might not be alone

  • Thank you for your reply! I had hope, but still nothing after performing the extra steps in the gadgetbridge settings. I can't do any of the device settings obviously.

  • https://codeberg.org/Freeyourgadget/Gadg­etbridge/issues/3439

    This thread mentions using, the debug page in GadgetBridge menu, after Debug, scroll down, press orange button "Add test device manually", Choose bangle.js and enter correct MAC address.

  • Thanks for the help! It would be encouraging If I wasn't alone, but of course they start to pop-up once I get involved. My luck!

  • unfortunately, gadgetbridge says it's not a valid MAC address

    Edit: I deleted the Playstore Bangle.JS GadgetBridge and installed the F-droid version incase the OS is seeing it's connected to Google Play Services and isn't trusting it. When manually adding a debug device I don't get a "not valid bluetooth MAC address", but it still does not connect.

  • In Gadgetbridge's Discovery and Pairing Options that you get to after pressing the + button to add a device, is Ignore bonded devices checked?

    That probably wouldn't be helping matters if so, but it sounds like if GrapheneOS is doing something to stop the Gadgetbridge app running in the background, even if you can get it connected to the Bangle it's not going to be much use to you if it's shut down every time you leave the app...

  • Seems like there is a permission setting you might have missed? On normal android, background running options are under battery category. Unfortunately I do not know graphene well enough.

    Settings > Apps & notifications > Advanced > Special app access > Battery optimization >

  • I have Gadgetbridge set to unrestricted battery access which allows it to run background process at startup. At least that's what I've seem from the forums. Also, I always have a notif basically saying no devices connected even when I close the app.

  • Thank you for the reply! Yes, I've tested with it checked and unchecked, but It's always enabled by default.

  • I'm guessing that, like the Playstore app said. For some reason GadgetBridge does not see it as a valid bluetooth device. I did notice that my MAC looks different that others. The last for characters are all letters. They're also the same 4 characters that are used at my device identifier that are displayed in the top right corner of my bangle. I've noticed that all other MAC addresses have at least one number in the last 4 characters. In the Bangle.JS 2 startup guide it describes the unique identifier as "numbers". I don't know anything about how OS and Software determine's what a valid bluetooth MAC is, but it's just something I noticed. Maybe the way Gadgetbridge identifies valid bluetooth MAC addresses just doesn't align with my MAC. Just a guess, if somebody who worked on the Bangle fork of Gadgetbridge or knows anything about it could confirm or deny that guess.

  • Success! I realized I'd entered the wrong MAC address when I downloaded GadgetBridge from F-droid and manually added the MAC in debug. I re-entered it, tried to connect and suddenly my Bangle.JS 2 popped up as an available device. It still kept the manually added device, but I just deleted it. So far so good!

    RESOLUTION:

    1. Use the F-droid version of the Bangle.JS GadgetBridge.
    2. Make sure GadgetBridge is set to unrestricted battery access in GrapheneOS settings.
    3. In GadgetBridge go to debug and add the device manually.

    Thank you to everyone who replied and assisted! I've never submitted an issue on any forum or community and had so much help with troubleshooting.

  • Great news, I'm really happy for you and that our efforts paid off. Hopefully this will help many other Bangle.js GrapheneOS users.

    Good job.

  • Post a reply
    • Bold
    • Italics
    • Link
    • Image
    • List
    • Quote
    • code
    • Preview
About

Bangle.js 2 and GrapheneOS

Posted by Avatar for maddogskullcap @maddogskullcap

Actions