nightscout / AndroidAPS

Opensource automated insulin delivery system (closed loop)
https://wiki.aaps.app
GNU Affero General Public License v3.0
727 stars 1.77k forks source link

Can't connect to Omnipod DASH pods after Android 15 upgrade #3471

Open n0rbertg opened 1 month ago

n0rbertg commented 1 month ago

Phone: Pixel 9 Pro Android version: Android 15 (stable) Version: 3.2.0.4 (Edit: Tried with latest dev as well [806a18f] same problem)

After upgrading to Android 15, the app can't communicate with Dash. After rebooting the phone, a single handshake works but nothing after. Similarly, I was able to pair a new pod under Android 15, but any connection after times out.

@AdrianLxM @avereha @bartsopers @vanelsberg could any of you take a look at this? Thank you!


03:54:15.548 [RxCachedThreadScheduler-63] D/AUTOMATION: [AutomationPlugin.processActions$automation_fullRelease():255]: processActions
03:54:15.552 [RxCachedThreadScheduler-63] D/AUTOMATION: [TriggerBg.shouldRun():62]: NOT ready for execution: Glucose is lesser than 3.8 MMOL
03:54:15.583 [RxCachedThreadScheduler-67] D/PUMPBTCOMM: [Connection.connectionState():171]: GATT connection state: 2
03:54:15.628 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 8
03:54:15.730 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 8
03:54:15.832 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 8
03:54:15.934 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 8
03:54:16.037 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 8
03:54:16.087 [RxCachedThreadScheduler-67] D/PUMPBTCOMM: [Connection.connectionState():171]: GATT connection state: 2
03:54:16.139 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 8
03:54:16.241 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 8
03:54:16.343 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 9
03:54:16.446 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 9
03:54:16.549 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 9
03:54:16.592 [RxCachedThreadScheduler-67] D/PUMPBTCOMM: [Connection.connectionState():171]: GATT connection state: 2
03:54:16.651 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 9
03:54:16.755 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 9
03:54:16.856 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 9
03:54:16.959 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 9
03:54:17.061 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 9
03:54:17.098 [RxCachedThreadScheduler-67] D/PUMPBTCOMM: [Connection.connectionState():171]: GATT connection state: 2
03:54:17.163 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 9
03:54:17.265 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 9
03:54:17.367 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 10
03:54:17.469 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 10
03:54:17.571 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 10
03:54:17.606 [RxCachedThreadScheduler-67] D/PUMPBTCOMM: [Connection.connectionState():171]: GATT connection state: 2
03:54:17.674 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 10
03:54:17.776 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 10
03:54:17.878 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 10
03:54:17.980 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 10
03:54:18.083 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 10
03:54:18.112 [RxCachedThreadScheduler-67] D/PUMPBTCOMM: [Connection.connectionState():171]: GATT connection state: 2
03:54:18.185 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 10
03:54:18.288 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 10
03:54:18.390 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 11
03:54:18.493 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 11
03:54:18.594 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 11
03:54:18.616 [RxCachedThreadScheduler-67] D/PUMPBTCOMM: [Connection.connectionState():171]: GATT connection state: 2
03:54:18.697 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 11
03:54:18.771 [binder:4453_F] D/PUMPBTCOMM: [BleCommCallbacks.onConnectionStateChange():38]: OnConnectionStateChange with status/state: 19/0
03:54:18.772 [binder:4453_F] I/PUMPBTCOMM: [Connection.onConnectionLost():209]: Lost connection with status: 19
03:54:18.799 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 11
03:54:18.902 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 11
03:54:19.007 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 11
03:54:19.110 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():102]: handshaking 11
03:54:19.119 [RxCachedThreadScheduler-67] D/PUMPBTCOMM: [Connection.disconnect():129]: Disconnecting closeGatt=false
03:54:19.124 [binder:4453_F] D/PUMPBTCOMM: [Connection.disconnect():129]: Disconnecting closeGatt=true
03:54:19.124 [RxCachedThreadScheduler-67] W/PUMPBTCOMM: [OmnipodDashManagerImpl$observeConnectToPodWithStop$1$1.accept():122]: observeConnectToPodWithStop error=info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.exceptions.ConnectException: stopConnecting called
03:54:19.125 [RxCachedThreadScheduler-67] D/PUMP: [OmnipodDashManagerImpl$ErrorInterceptor.accept():780]: Intercepted error in OmnipodDashManagerImpl: info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.exceptions.ConnectException: stopConnecting called
03:54:19.126 [binder:4453_F] D/PUMPBTCOMM: [BleCommCallbacks.resetConnection():217]: Reset connection
03:54:19.126 [ConnectionThread] I/PUMPCOMM: [OmnipodDashPumpPlugin$connect$2.invoke():276]: connect error=java.lang.RuntimeException: info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.exceptions.ConnectException: stopConnecting called
03:54:19.213 [Thread-1378] D/PUMPQUEUE: [QueueThread.run():114]: connect
03:54:19.214 [Thread-1378] I/PUMP: [OmnipodDashPumpPlugin.connect():255]: connect reason=Connection needed
03:54:19.219 [RxCachedThreadScheduler-70] D/PUMP: [OmnipodDashManagerImpl$PodEventInterceptor.accept():704]: Intercepted PodEvent in OmnipodDashManagerImpl: BluetoothConnecting
03:54:19.223 [RxCachedThreadScheduler-70] D/PUMPBTCOMM: [Connection.connectionState():171]: GATT connection state: 0
03:54:19.224 [RxCachedThreadScheduler-70] D/CORE: [Connection.connect():69]: Connecting connectionWaitCond=ConnectionWaitCondition(timeoutMs=null, stopConnection=java.util.concurrent.CountDownLatch@af28aee[Count = 1])
03:54:19.232 [RxCachedThreadScheduler-70] D/PUMPBTCOMM: [Connection.waitForConnection():145]: waitForConnection connectionWaitCond=ConnectionWaitCondition(timeoutMs=null, stopConnection=java.util.concurrent.CountDownLatch@af28aee[Count = 1])
03:54:19.287 [RxCachedThreadScheduler-63] D/AUTOMATION: [AutomationPlugin$onStart$11.accept():180]: Grabbed new BT event: EventBTChange[deviceAddress=AC:3B:96:37:EA:BB,deviceName=<null>,state=DISCONNECT]
03:54:19.290 [RxCachedThreadScheduler-63] D/AUTOMATION: [AutomationPlugin.processActions$automation_fullRelease():255]: processActions
[...]
07:09:13.225 [CommandQueueImplementationHandler] D/PUMPQUEUE: [CommandQueueImplementation.notifyAboutNewCommand$lambda$6():220]: Starting new thread
07:09:13.227 [RxCachedThreadScheduler-66] D/CORE: [UserEntryLoggerImpl$log$1.accept():60]: USER ENTRY: 10/16/24 07:09:13 TEMP_BASAL Loop  [UnitPerHour(value=4.7), Minute(value=30)]
07:09:13.230 [Thread-2559] D/PUMPQUEUE: [QueueThread.run():114]: connect
07:09:13.230 [Thread-2559] I/PUMP: [OmnipodDashPumpPlugin.connect():255]: connect reason=Connection needed
07:09:13.231 [RxCachedThreadScheduler-77] D/PUMP: [OmnipodDashManagerImpl$PodEventInterceptor.accept():704]: Intercepted PodEvent in OmnipodDashManagerImpl: BluetoothConnecting
07:09:13.233 [RxCachedThreadScheduler-77] D/PUMPBTCOMM: [Connection.connectionState():171]: GATT connection state: 2
07:09:13.233 [RxCachedThreadScheduler-77] D/CORE: [Connection.connect():69]: Connecting connectionWaitCond=ConnectionWaitCondition(timeoutMs=null, stopConnection=java.util.concurrent.CountDownLatch@413994e[Count = 1])
07:09:13.235 [RxCachedThreadScheduler-77] D/PUMPBTCOMM: [Connection.waitForConnection():145]: waitForConnection connectionWaitCond=ConnectionWaitCondition(timeoutMs=null, stopConnection=java.util.concurrent.CountDownLatch@413994e[Count = 1])
07:09:13.236 [binder:4453_2] D/PUMPBTCOMM: [BleCommCallbacks.onConnectionStateChange():38]: OnConnectionStateChange with status/state: 0/2
07:09:13.237 [RxCachedThreadScheduler-77] D/PUMPBTCOMM: [Connection.connectionState():171]: GATT connection state: 2
07:09:13.237 [RxCachedThreadScheduler-77] D/PUMPBTCOMM: [ServiceDiscoverer.discoverServices():28]: Discovering services
07:09:13.246 [DefaultDispatcher-worker-4] D/WORKER: [LoggingWorker$doWork$2.invokeSuspend():27]: Worker result SUCCESS for class app.aaps.workflow.UpdateWidgetWorker
07:09:13.247 [main] D/WIDGET: [Widget.onReceive():87]: onReceive WorkFlow
07:09:13.260 [DefaultDispatcher-worker-4] D/WORKER: [LoggingWorker$doWork$2.invokeSuspend():27]: Worker result SUCCESS for class app.aaps.workflow.PreparePredictionsWorker
07:09:13.278 [DefaultDispatcher-worker-4] D/WORKER: [LoggingWorker$doWork$2.invokeSuspend():27]: Worker result SUCCESS for class app.aaps.workflow.UpdateGraphWorker
07:09:13.424 [CompanionHandler] D/CORE: [Widget.updateTemporaryTarget():223]: Adjusted target. Profile: 99.0 APS: 93.0
07:09:13.427 [CompanionHandler] D/CONSTRAINTS: [ConstraintObject.set():28]: Setting value true -> false (Autosens disabled in preferences)[EN]
07:09:13.655 [binder:4453_2] D/PUMPBTCOMM: [BleCommCallbacks.onConnectionStateChange():38]: OnConnectionStateChange with status/state: 19/0
07:09:13.656 [binder:4453_2] I/PUMPBTCOMM: [Connection.onConnectionLost():209]: Lost connection with status: 19
07:09:13.741 [binder:4453_2] D/PUMPBTCOMM: [Connection.disconnect():129]: Disconnecting closeGatt=true
07:09:13.748 [binder:4453_2] D/PUMPBTCOMM: [BleCommCallbacks.resetConnection():217]: Reset connection
07:09:13.751 [RxCachedThreadScheduler-77] D/PUMPBTCOMM: [Connection.disconnect():129]: Disconnecting closeGatt=false
07:09:13.751 [RxCachedThreadScheduler-77] D/PUMPBTCOMM: [BleCommCallbacks.resetConnection():217]: Reset connection
07:09:13.753 [RxCachedThreadScheduler-77] W/PUMPBTCOMM: [OmnipodDashManagerImpl$observeConnectToPodWithStop$1$1.accept():122]: observeConnectToPodWithStop error=info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.exceptions.ConnectException: stopConnecting called
07:09:13.753 [RxCachedThreadScheduler-77] D/PUMP: [OmnipodDashManagerImpl$ErrorInterceptor.accept():780]: Intercepted error in OmnipodDashManagerImpl: info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.exceptions.ConnectException: stopConnecting called```
ahantschel commented 1 month ago

I had the same issues on one of the last betas of Android 15 (first betas worked without problems) with my Pixel 6a and therefore i downgraded back to Android 14. Hoped, this was just a bug in this beta but it seems they changed something in the bluetooth handling...

2flea commented 1 month ago

Same issue on Pixel 8 with Android 15. After reboot the first connection works but then no handshake possible. Switched to another phone using < A15 for now. @MilosKozak please forward to Omnipod specialists. Cheers, Andreas

mariogarofalo commented 1 month ago

Even I same bug. Pixel 8 with Android 15 and Omnipod Dash. However, it seems that, despite the connection error, the basal rate adapts based on the glucose level (increases or decreases). SMBs are also delivered, except when I try to record my carbohydrate intake following a meal, the bolus is not delivered. I hope for a bugfix for the app as soon as possible, because it's a really big problem.

Larsboyscout commented 1 month ago

I had it connect once dash g6 and it delivered insulin

smichelus commented 1 month ago

I also updated to Android 15 and noticed the same problems. My setup is Pixel 6a with AAPS 3.2.0.4 and Omnipod Dash. I have now found a workaround that after closing and then starting the Bluetooth connection and the AAPS app about 4 times, the connection to the Dash works properly and permanently again. After restarting the Pixel, the game starts all over again.

woernsn commented 1 month ago

Same issue here on Pixel 7 after upgrade to Android 15. I switched to an older phone for AAPS in the meantime.

jtmarcot commented 1 month ago

I'm holding off on Android 15 until this is confirmed to be sorted. Thanks for opening the issue, and thanks to anyone working on it!

3.2.0.4 on Pixel 7

2flea commented 1 month ago

Some logs from 3 days ago.

08:30:47.923 [RxCachedThreadScheduler-34] D/CORE: [Connection.connect():69]: Connecting connectionWaitCond=ConnectionWaitCondition(timeoutMs=null, stopConnection=java.util.concurrent.CountDownLatch@232d152[Count = 1])
08:30:49.664 [DefaultDispatcher-worker-2] D/WORKER: [LoggingWorker$doWork$2.invokeSuspend():27]: Worker result SUCCESS for class app.aaps.receivers.KeepAliveWorker
08:30:54.220 [RxCachedThreadScheduler-36] D/CORE: [Connection.connect():69]: Connecting connectionWaitCond=ConnectionWaitCondition(timeoutMs=null, stopConnection=java.util.concurrent.CountDownLatch@471996[Count = 1])
08:31:19.141 [RxCachedThreadScheduler-48] D/CORE: [Connection.connect():69]: Connecting connectionWaitCond=ConnectionWaitCondition(timeoutMs=null, stopConnection=java.util.concurrent.CountDownLatch@8d7c097[Count = 1])
08:31:24.407 [RxCachedThreadScheduler-33] D/CORE: [Connection.connect():69]: Connecting connectionWaitCond=ConnectionWaitCondition(timeoutMs=null, stopConnection=java.util.concurrent.CountDownLatch@bec7c86[Count = 1])
08:31:38.189 [main] D/WIDGET: [Widget.onReceive():87]: onReceive ScheduleEveryMin
08:31:38.554 [CompanionHandler] D/CORE: [Widget.updateTemporaryTarget():223]: Adjusted target. Profile: 100.0 APS: 93.0
08:31:46.488 [RxCachedThreadScheduler-34] D/CORE: [Connection.connect():69]: Connecting connectionWaitCond=ConnectionWaitCondition(timeoutMs=null, stopConnection=java.util.concurrent.CountDownLatch@c13e9d2[Count = 1])
08:31:52.623 [RxCachedThreadScheduler-36] D/CORE: [Connection.connect():69]: Connecting connectionWaitCond=ConnectionWaitCondition(timeoutMs=30000, stopConnection=null)
08:32:22.660 [RxCachedThreadScheduler-36] E/PUMP: [OmnipodDashPumpPlugin$executeProgrammingCommand$3.accept():1364]: Error executing command
info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.exceptions.ConnectException: Service not found: 1a7e-4024-e3ed-4464-8b7e-751e03d0dc5f
    at info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.ServiceDiscoverer.discoverServices(ServiceDiscoverer.kt:54)
    at info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.session.Connection.connect(Connection.kt:101)
    at info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.OmnipodDashBleManagerImpl.connect$lambda$1(OmnipodDashBleManagerImpl.kt:154)
    at info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.OmnipodDashBleManagerImpl.$r8$lambda$c2IZX_V0B5Ile126GNiSOANZRgY(Unknown Source:0)
    at info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.OmnipodDashBleManagerImpl$$ExternalSyntheticLambda0.subscribe(Unknown Source:4)
    at io.reactivex.rxjava3.internal.operators.observable.ObservableCreate.subscribeActual(ObservableCreate.java:41)
    at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:13262)
    at io.reactivex.rxjava3.internal.operators.observable.ObservableDoOnEach.subscribeActual(ObservableDoOnEach.java:42)
    at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:13262)
    at io.reactivex.rxjava3.internal.operators.observable.ObservableDefer.subscribeActual(ObservableDefer.java:40)
    at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:13262)
    at io.reactivex.rxjava3.internal.operators.observable.ObservableConcatMap$ConcatMapDelayErrorObserver.drain(ObservableConcatMap.java:469)
    at io.reactivex.rxjava3.internal.operators.observable.ObservableConcatMap$ConcatMapDelayErrorObserver.onSubscribe(ObservableConcatMap.java:330)
    at io.reactivex.rxjava3.internal.operators.observable.ObservableFromArray.subscribeActual(ObservableFromArray.java:32)
    at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:13262)
    at io.reactivex.rxjava3.internal.operators.observable.ObservableConcatMap.subscribeActual(ObservableConcatMap.java:56)
    at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:13262)
    at io.reactivex.rxjava3.internal.operators.observable.ObservableDoOnEach.subscribeActual(ObservableDoOnEach.java:42)
    at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:13262)
    at io.reactivex.rxjava3.internal.operators.observable.ObservableDoOnEach.subscribeActual(ObservableDoOnEach.java:42)
    at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:13262)
    at io.reactivex.rxjava3.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)
    at io.reactivex.rxjava3.core.Scheduler$DisposeTask.run(Scheduler.java:644)
    at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:65)
    at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:56)
    at java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:307)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
    at java.lang.Thread.run(Thread.java:1012)

What exactly is Service: 1a7e-4024-e3ed-4464-8b7e-751e03d0dc5f?

Does anyone know?

I will enable logs for pump and BT now and do some more tests.

mariogarofalo commented 4 weeks ago

Do you have information on the work status of a possible bug fix for this problem? My glucose levels have been through the roof for almost a week now

tyrex1975 commented 4 weeks ago

Do you have information on the work status of a possible bug fix for this problem? My glucose levels have been through the roof for almost a week now

This is a volunteer project and nobody is required to offer solutions or timeframes. I'm sure the developers are now aware of the problem. In the meantime I suggest you revert to other management practices if AAPS is not working for you, we are all responsible for our own care.

n0rbertg commented 4 weeks ago

Some logs from 3 days ago.

I also have similar in the logs

07:01:43.780 [RxCachedThreadScheduler-74] W/PUMPBTCOMM: [OmnipodDashManagerImpl$observeConnectToPod$1$1.accept():129]: observeConnectToPod error=info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.exceptions.ConnectException: Service not found: 1a7e-4024-e3ed-4464-8b7e-751e03d0dc5f
07:01:43.781 [RxCachedThreadScheduler-74] D/PUMP: [OmnipodDashManagerImpl$ErrorInterceptor.accept():780]: Intercepted error in OmnipodDashManagerImpl: info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.exceptions.ConnectException: Service not found: 1a7e-4024-e3ed-4464-8b7e-751e03d0dc5f
07:01:43.782 [RxCachedThreadScheduler-74] E/PUMP: [OmnipodDashPumpPlugin$executeProgrammingCommand$3.accept():1364]: Error executing command
info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.exceptions.ConnectException: Service not found: 1a7e-4024-e3ed-4464-8b7e-751e03d0dc5f
    at info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.ServiceDiscoverer.discoverServices(ServiceDiscoverer.kt:54)
    at info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.session.Connection.connect(Connection.kt:101)
    at info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.OmnipodDashBleManagerImpl.connect$lambda$1(OmnipodDashBleManagerImpl.kt:154)
    at info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.OmnipodDashBleManagerImpl.$r8$lambda$c2IZX_V0B5Ile126GNiSOANZRgY(Unknown Source:0)
    at info.nightscout.androidaps.plugins.pump.omnipod.dash.driver.comm.OmnipodDashBleManagerImpl$$ExternalSyntheticLambda0.subscribe(Unknown Source:4)
    at io.reactivex.rxjava3.internal.operators.observable.ObservableCreate.subscribeActual(ObservableCreate.java:41)
    at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:13262)
    at io.reactivex.rxjava3.internal.operators.observable.ObservableDoOnEach.subscribeActual(ObservableDoOnEach.java:42)
    at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:13262)
    at io.reactivex.rxjava3.internal.operators.observable.ObservableDefer.subscribeActual(ObservableDefer.java:40)
    at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:13262)
    at io.reactivex.rxjava3.internal.operators.observable.ObservableConcatMap$ConcatMapDelayErrorObserver.drain(ObservableConcatMap.java:469)
    at io.reactivex.rxjava3.internal.operators.observable.ObservableConcatMap$ConcatMapDelayErrorObserver.onSubscribe(ObservableConcatMap.java:330)
    at io.reactivex.rxjava3.internal.operators.observable.ObservableFromArray.subscribeActual(ObservableFromArray.java:32)
    at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:13262)
    at io.reactivex.rxjava3.internal.operators.observable.ObservableConcatMap.subscribeActual(ObservableConcatMap.java:56)
    at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:13262)
    at io.reactivex.rxjava3.internal.operators.observable.ObservableDoOnEach.subscribeActual(ObservableDoOnEach.java:42)
    at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:13262)
    at io.reactivex.rxjava3.internal.operators.observable.ObservableDoOnEach.subscribeActual(ObservableDoOnEach.java:42)
    at io.reactivex.rxjava3.core.Observable.subscribe(Observable.java:13262)
    at io.reactivex.rxjava3.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)
    at io.reactivex.rxjava3.core.Scheduler$DisposeTask.run(Scheduler.java:644)
    at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:65)
    at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:56)
    at java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:307)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
nickb24 commented 4 weeks ago

Seems to be the same error reported in this bug that was closed due to inactivity: https://github.com/nightscout/AndroidAPS/issues/935

nickb24 commented 4 weeks ago

What exactly is Service: 1a7e-4024-e3ed-4464-8b7e-751e03d0dc5f?

Does anyone know?

This is a hardcoded value found here: https://github.com/nightscout/AndroidAPS/blob/3df83535f9f8f3246308121900c2785c50915fa8/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/ServiceDiscoverer.kt#L73

It's the service that the Dash pod broadcasts. This file hasn't changed in years.

The error code in the logs everyone is sharing is from this line in the code: https://github.com/nightscout/AndroidAPS/blob/3df83535f9f8f3246308121900c2785c50915fa8/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/ServiceDiscoverer.kt#L54

This doesn't look like good news. This is starting to look like a Bluetooth driver issue, therefore not something APS can change unless we can debug the bluetooth stack to see why it's not discovering the required service after connecting to the Omnipod Dash.

nickb24 commented 4 weeks ago

Can someone provide more complete logs or logs from Logcat would be ideal. I want to investigate more into this part of the logs which I think is a problem: 19:28:29.423 [RxCachedThreadScheduler-75] D/PUMPBTCOMM: [ServiceDiscoverer.discoverServices():44]: Services discovered 19:28:29.426 [RxCachedThreadScheduler-75] D/PUMPBTCOMM: [Connection.disconnect():121]: Disconnecting closeGatt=false 19:28:29.428 [RxCachedThreadScheduler-75] D/PUMPBTCOMM: [BleCommCallbacks.resetConnection():213]: Reset connection

After services are discovered, it should not be disconnecting, unless the connection is lost, but there is supposed to be a log message for that.

woernsn commented 4 weeks ago

Can someone provide more complete logs or logs from Logcat would be ideal.

https://bin.woernsn.net/p/monkey-emu-goose I copied a little more of my logs in here. Let me know if you need more.

mariogarofalo commented 4 weeks ago

Here, mine

AndroidAPS.log

2flea commented 4 weeks ago

@nickb24 I exported some logs with logcat. Let me know if you need more.

Google-Pixel-8-Android-15_2024-10-21_100641.logcat.zip

t1dude commented 4 weeks ago

FYI it looks like Dexcom is having Bluetooth issues with Android 15 as well: https://www.dexcom.com/en-AU/faqs/will-android-15-affect-my-dexcom-g7-cgm-system

osodebailar commented 4 weeks ago

FYI it looks like Dexcom is having Bluetooth issues with Android 15 as well: https://www.dexcom.com/en-AU/faqs/will-android-15-affect-my-dexcom-g7-cgm-system

Yes they have , because ITS a Google issue, because of changing the BT stack in Android 15

vanelsberg commented 4 weeks ago

What exactly is Service: 1a7e-4024-e3ed-4464-8b7e-751e03d0dc5f? Does anyone know?

The error occurs in the code where the DASH driver is scanning for a BT device with a specific BT service ID 1a7e-4024-e3ed-4464-8b7e-751e03d0dc5f to connect to.

And yes, this ID is fixed in the code because it is unique for DASH BT devices.

Btw: We have seen this problem in the past during DASH driver development with some phone/brands where the DASH BT Firmware was somehow incompatible with the Phone's BT implementation. Other reason could be the OS blocking BT access due to security settings or dependencies?

Not sure if this can be solved though code...

Suggestion: Try the nRF Connect tool app (Playstore): See if does find a DASH device with this service ID?

nickb24 commented 4 weeks ago

I couldn't find anything in the logs. This looks like an Android OS issue.

Based on this post that was closed today: https://issuetracker.google.com/issues/362191722#comment7

Can someone with the issue try installing Android 15 QPR1 Beta 2?

2flea commented 4 weeks ago

nRF connect tool finds the device with ever scan.

1000063303 1000063304 1000063305 1000063306

But when I try to connect it gives the same error messages than AAPS shows in its logs - it cannot discover gatt services:

1000063307

vanelsberg commented 4 weeks ago

nRF connect tool finds the device with ever scan.

That's good. At least the OS does see the Pod. Connecting to it then is the issue. Can not see why. And unfortunately, I do not have a Pixel (or other) with Android 15 to do any research on this..

vanelsberg commented 4 weeks ago

I couldn't find anything in the logs. This looks like an Android OS issue. Based on this post that was closed today: https://issuetracker.google.com/issues/362191722#comment7

Quoting this issue: We have an intermittent but easily reproducible issue that occurs with only one of our BLE device series. Connecting to the device becomes impossible because the connection gets stuck during service discovery. Once the issue occurs, all next connection attempts fail for the same reason. Power cycling the device or restarting the app doesn't help. The issue disappears after toggling Bluetooth OFF and ON on the phone. The problem is likely related to BLE chipset or firmware and Android compatibility, as only one particular device series is affected.

Based on what you all have comment here, it all looks like this issue. Unless there is some work around in the AAPS driver code, I'd say this is a compatibility issue to be fixed in the OS 🤔

vanelsberg commented 4 weeks ago

Seems to be the same error reported in this bug that was closed due to inactivity: #935

Old & I don't think so. Other then: yes: some phones brands/types just are not compatible with DASH. This still goes. But in this case it looks more like this is related to Android 15, not a specific phone brand/type?

woernsn commented 4 weeks ago

Based on what you all have comment here, it all looks like this issue. Unless there is some work around in the AAPS driver code, I'd say this is a compatibility issue to be fixed in the OS 🤔

I would go so far to speculate that also the Dexcom issue is the same. Dexcom stated that they are in contact with Google directly. Therefore I guess, an Android update will need to happen soon .

2flea commented 4 weeks ago

It looks like that QPR1 Beta 2 fixed this behaviour. Mario tested it yesterday evening and during the night. I wait for Beta 3 OTA as I do not wish to wipe my data atm. Let's hope that Google's fix works

n0rbertg commented 4 weeks ago

Can someone with the issue try installing Android 15 QPR1 Beta 2?

I installed last night and during the night it was stable, without signal losses. I am able to connect to the pod now.

So it is an Android issue as it seems.

nickb24 commented 3 weeks ago

I suggest an admin for the Facebook group post an announcement warning Pixel users not to upgrade to Android 15. I have a Pixel 7 pro and I'm holding off on it (although I didn't get the notification on my phone yet). I can't imagine updating one day and all of a sudden my loop system is broken. In my case, I don't even have my Omnipod PDM setup so I would be in big trouble if I need to scramble to get another phone setup just so I can continue to run my pump.

nickb24 commented 3 weeks ago

Can someone with the issue try installing Android 15 QPR1 Beta 2?

I installed last night and during the night it was stable, without signal losses. I am able to connect to the pod now.

So it is an Android issue as it seems.

I see this as good and bad news. The bad news, I worry for people who are not tech savvy enough who end up updating to Android 15 and now will be stuck waiting for Google to push a new update (which is estimated to arrive in December) to fix this. If we mention the solution is to go on the Beta channel for Android, most people would get lost trying to install it.

The good news, if we know it's at the driver level, I wonder if there is a mitigation technique we can implement in the code to fix it. It seems like the Dash pod closes the connection after discovering the services (well from the APS code side it looks like a closed connection). I wonder if we can implement some more checks in the code at this line to re-try the connection: https://github.com/nightscout/AndroidAPS/blob/3df83535f9f8f3246308121900c2785c50915fa8/pump/omnipod-dash/src/main/java/info/nightscout/androidaps/plugins/pump/omnipod/dash/driver/comm/ServiceDiscoverer.kt#L54

To debug further though, I would need a volunteer with the issue to do bluetooth logging as described by Google here: https://issuetracker.google.com/issues/362191722#comment7

1. Go to Developer Settings ->  and set Enable Bluetooth HCI snoop log to Enabled.

2. Also increase the log buffer size by following these steps : System settings-> Developer options-> Logger buffer sizes-> 8M

Then capture and share a new bug report.
2flea commented 3 weeks ago

I suggest an admin for the Facebook group post an announcement warning Pixel users not to upgrade to Android 15. I have a Pixel 7 pro and I'm holding off on it (although I didn't get the notification on my phone yet). I can't imagine updating one day and all of a sudden my loop system is broken. In my case, I don't even have my Omnipod PDM setup so I would be in big trouble if I need to scramble to get another phone setup just so I can continue to run my pump.

I asked Tim Street on FB

2flea commented 3 weeks ago

To debug further though, I would need a volunteer with the issue to do bluetooth logging as described by Google here: https://issuetracker.google.com/issues/362191722#comment7

1. Go to Developer Settings ->  and set Enable Bluetooth HCI snoop log to Enabled.

2. Also increase the log buffer size by following these steps : System settings-> Developer options-> Logger buffer sizes-> 8M

Then capture and share a new bug report.

Where will I find the log file on my Pixel? If you want I can try to get some HCI logs.

Btw, the app nRF Connect also does not discover any services of the Dash. It has the same behaviour than AAPS. It connects but once it calls discoverServices there is none found but it looks like a timeout.

nickb24 commented 3 weeks ago

To debug further though, I would need a volunteer with the issue to do bluetooth logging as described by Google here: https://issuetracker.google.com/issues/362191722#comment7

1. Go to Developer Settings ->  and set Enable Bluetooth HCI snoop log to Enabled.

2. Also increase the log buffer size by following these steps : System settings-> Developer options-> Logger buffer sizes-> 8M

Then capture and share a new bug report.

Where will I find the log file on my Pixel? If you want I can try to get some HCI logs.

Btw, the app nRF Connect also does not discover any services of the Dash. It has the same behaviour than AAPS. It connects but once it calls discoverServices there is none found but it looks like a timeout.

You need to be careful sharing these logs. It will contain sensitive information. More information: https://developer.android.com/studio/debug/bug-report https://source.android.com/docs/core/connect/bluetooth/verifying_debugging#debugging-with-logs

To remove sensitive information you would need to parse the bug report and only share the bluetooth log.

2flea commented 3 weeks ago

To debug further though, I would need a volunteer with the issue to do bluetooth logging as described by Google here: https://issuetracker.google.com/issues/362191722#comment7

1. Go to Developer Settings ->  and set Enable Bluetooth HCI snoop log to Enabled.

2. Also increase the log buffer size by following these steps : System settings-> Developer options-> Logger buffer sizes-> 8M

Then capture and share a new bug report.

Where will I find the log file on my Pixel? If you want I can try to get some HCI logs. Btw, the app nRF Connect also does not discover any services of the Dash. It has the same behaviour than AAPS. It connects but once it calls discoverServices there is none found but it looks like a timeout.

You need to be careful sharing these logs. It will contain sensitive information. More information: https://developer.android.com/studio/debug/bug-report https://source.android.com/docs/core/connect/bluetooth/verifying_debugging#debugging-with-logs

To remove sensitive information you would need to parse the bug report and only share the bluetooth log.

Not sure if this helps and if the Dash request is in it at all - I only switched AAPS back on for 120sec till timeout and enabled HCI just before (incl. BT off/on). Let me know if you find anything except my Garmin watch ;-) (I think there are no sensitive data inside, please let me know if there are any).

btsnooz_hci.log

nickb24 commented 3 weeks ago

To debug further though, I would need a volunteer with the issue to do bluetooth logging as described by Google here: https://issuetracker.google.com/issues/362191722#comment7

1. Go to Developer Settings ->  and set Enable Bluetooth HCI snoop log to Enabled.

2. Also increase the log buffer size by following these steps : System settings-> Developer options-> Logger buffer sizes-> 8M

Then capture and share a new bug report.

Where will I find the log file on my Pixel? If you want I can try to get some HCI logs. Btw, the app nRF Connect also does not discover any services of the Dash. It has the same behaviour than AAPS. It connects but once it calls discoverServices there is none found but it looks like a timeout.

You need to be careful sharing these logs. It will contain sensitive information. More information: https://developer.android.com/studio/debug/bug-report https://source.android.com/docs/core/connect/bluetooth/verifying_debugging#debugging-with-logs To remove sensitive information you would need to parse the bug report and only share the bluetooth log.

Not sure if this helps and if the Dash request is in it at all - I only switched AAPS back on for 120sec till timeout and enabled HCI just before (incl. BT off/on). Let me know if you find anything except my Garmin watch ;-) (I think there are no sensitive data inside, please let me know if there are any).

btsnooz_hci.log

I'm taking a look at the log now. There is no personal information in it. However all the Garmin packets are cluttering the logs so it will take me some time.

nickb24 commented 3 weeks ago

When you enabled the logging, did you also increase the log size too? I see this error in some packets:

image

2flea commented 3 weeks ago

Log Buffer size is/was 1M as suggested by Google.

2flea commented 3 weeks ago

I'm taking a look at the log now. There is no personal information in it. However all the Garmin packets are cluttering the logs so it will take me some time.

Wait ... I will switch off my watch and redo the test for 5min or so...

nickb24 commented 3 weeks ago

Log Buffer size is/was 1M as suggested by Google.

Google says to put the log size to 8M in step 2

2flea commented 3 weeks ago

You're right, I read 1M elsewhere for debug setting, not verbose. New data with log buffer 8M and Garmin switched off btsnooz_hci.log

ahantschel commented 3 weeks ago

As i mentioned above in Post #2 i had the same issues on the Android 15 Beta.

Now i wanted to test it in the Final and after that Install QPR Beta 2. So i did the OTA Update 14 --> 15 and it now works without any problems for me. (On 15 final not QPR Beta)

I had a Dash Pod active yesterday during the Update and also started a new one later the evening.

Now i am running AAPS for over 24h under Android 15 without any connection issues.

Very strange....

2flea commented 3 weeks ago

As i mentioned above in Post #2 i had the same issues on the Android 15 Beta.

Now i wanted to test it in the Final and after that Install QPR Beta 2. So i did the OTA Update 14 --> 15 and it now works without any problems for me. (On 15 final not QPR Beta)

I had a Dash Pod active yesterday during the Update and also started a new one later the evening.

Now i am running AAPS for over 24h under Android 15 without any connection issues.

Very strange....

Which phone and which Build number do you have?

ahantschel commented 3 weeks ago

Pixel 6a Android Build AP3A.241005.015 AndroidAPS 3.2.0.4

Screenshot_20241023-213540.png

Screenshot_20241023-213638.png

Screenshot_20241023-214559.png

2flea commented 3 weeks ago

Can someone with the issue try installing Android 15 QPR1 Beta 2?

I installed last night and during the night it was stable, without signal losses. I am able to connect to the pod now.

So it is an Android issue as it seems.

I installed QPR1 Beta 3 OTA tonight and just tested with nRF. It can connect to Dash and discover services again.

Screenshot_20241023-230111

2flea commented 3 weeks ago

AAPS is also back to normal with QPR1 Beta 3.

nickb24 commented 3 weeks ago

I got my hands on a Pixel 6 to test. I flashed it to 15.0.0 (AP3A.241005.015, Oct 2024). I can't reproduce the issue reported here. Perhaps this only effects Pixel 7 and above?

Larsboyscout commented 3 weeks ago

I got my hands on a Pixel 6 to test. I flashed it to 15.0.0 (AP3A.241005.015, Oct 2024). I can't reproduce the issue reported here. Perhaps this only effects Pixel 7 and above? https://github.com/nightscout/AndroidAPS/issues/3471#issuecomment-2420216457 this comment above is using a 6A same gen as the 7 i assume so yes it looks like that gen and above

CJiwan commented 3 weeks ago

I have installe the QPR1 Beta 3 (Build : AP41.240925.009) on my Pixel 7a. Unfortunately I still have the same problem. I tried restarting the phone but it doesn't change anything For info I use the Dexcom G6 with Byoda and omnipod dash.

2flea commented 3 weeks ago

I did the OTA to QPR1 Beta 3 and also still had issues. Then I did a flash (using Android flash tool) with QPR1 Beta 3 and all seemed ok. But then out of nowhere I had issues again that AAPS nor nRF could discover services. Even restart of the phone did not work. This happened several times with no obvious correlation whatsoever. Handshaking when working took usually 1-3sec, with the "situation" it ended up in timeout. I even could not give a manual bolus for my cake ;-)

I ended up flashing back to stable Android 14 and will stay there.

Here my AAPS log from the time it happened yesterday afternoon 15:36 - 15:54. I only enabled ALL pump related logs, hope it helps... as I said I am back to 14 as this state of 15 is unreliable and unstable. AndroidAPS.log

nickb24 commented 3 weeks ago

Well this is unfortunate news. If QPR1 Beta 2 or 3 doesn't resolve the issue, then it looks like it means that Android 15 will be broken for awhile.