Skip to content

[Bug]: App sometimes refuses to reconnect to node over BLE after node reboot #3589

Description

@jp-bennett

Contact Details

jp-bennett

Checklist

  • I am able to reproduce the bug with the latest version.

  • I made sure that there are no existing OPEN or CLOSED issues which I could contribute my information to.

  • I have taken the time to fill in all the required details. I understand that the bug report will be dismissed otherwise.

  • This issue contains only one bug.

  • I have read and understood the Contribution Guidelines.

  • I agree to follow this project's Code of Conduct

Affected app version

2.7.5

Affected Android version

Android 16

Affected phone model

Pixel 9a and others

Affected node model

Currently testing with a Thinknode-m5

Affected node firmware version

2.7.13

Steps to reproduce the bug

  1. Connect to node over BLE in Android
  2. Trigger reboot on node
  3. Look at Android BLE list and see node is connected
  4. Look in Meshtastic App, see node is unconnected

Actual behavior

Android sees node as connected, Meshtastic app sees node as not connected.

Expected behavior

Meshtastic app should recognize that node is connected via BLE and start want-config flow to re-establish API connection.

Screenshots/Screen recordings

Will share screen recording privately

Relevant log output

INFO  | ??:??:?? 11 [Screen] Done with boot screen
DEBUG | ??:??:?? 11 [Screen] Show standard frames
DEBUG | ??:??:?? 11 [Screen] Show 10 module frames
DEBUG | ??:??:?? 11 [Screen] Added modules.  numframes: 10
DEBUG | ??:??:?? 11 [Screen] Finished build frames. numframes: 10
DEBUG | ??:??:?? 11 [Screen] determineMode(): 
DEBUG | ??:??:?? 11 [Screen] refresh=FULL, reason=FLAGGED_COSMETIC, frameFlags=0x5
DEBUG | ??:??:?? 11 [Screen] Update E-Paper
DEBUG | ??:??:?? 12 [Screen] done
DEBUG | ??:??:?? 12 [Screen] Async full-refresh begins (drop frames)
DEBUG | ??:??:?? 12 [Screen] refresh=SKIPPED, reason=EXCEEDED_RATELIMIT_FAST, frameFlags=0x3
DEBUG | ??:??:?? 12 [GPS] Upgrade time to quality GPS
DEBUG | 12:39:23 12 [GPS] NMEA GPS time set 2025-10-31 17:39:23 age 6
DEBUG | 12:39:25 14 [EInkDynamicDisplay] Async full-refresh complete
INFO  | 12:39:25 14 [Screen] BLE authentication complete
DEBUG | 12:39:25 14 [Screen] BluetoothStatus CONNECTED
DEBUG | 12:39:25 14 [Screen] determineMode():

At this point, manually triggering the connection from within the app results in:
DEBUG | 12:43:04 233 [NimbleBluetooth] NimbleBluetooth: handling ToRadio packet, fromPhoneQueueSize=1
INFO  | 12:43:04 233 [NimbleBluetooth] Client wants config, nonce=9
INFO  | 12:43:04 233 [NimbleBluetooth] BLE onConfigStart
DEBUG | 12:43:05 234 [NimbleBluetooth] Got 6 files in manifest
INFO  | 12:43:05 234 [NimbleBluetooth] Start API client config millis=234116
DEBUG | 12:43:05 234 [NimbleBluetooth] FromRadio=STATE_SEND_MY_INFO
INFO  | 12:43:05 234 [NimbleBluetooth] getFromRadio=STATE_SEND_UIDATA

Additional information

I suspect the issue is that the Android OS is triggering the re-connection, and the Android app doesn't recognize that the physical BLE connection is back up. When the app is in this state of non-connected, we probably need to be watching the current BLE connections in the background, and when we discover we have a BLE connection to a paired node, restart the want config flow.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions