Android notifications were patchy, now bust

I’ve got HAOS running with all updates, and the full companion app on my Pixel 8.

I use notify.mobile_app_pixel_8 a lot in my automations and scripts.
For the last couple of weeks these notifications getting to my phone have been patchy.
I first noticed it when my phones ringer stopped reliably changing between normal and vibrate using this:

action: notify.mobile_app_pixel_8
data:
  message: command_ringer_mode
  data:
    command: vibrate

I think restarting either the phone or HA might have made a difference temporarily, but tbh I’m not sure.
I went to the extent of clearing the cache and data for the android app and was seeing how it went after that.

I have persistent connection set to never and get the same if I’m on my home wifi or mobile data connection.

Today though, notifications seem to have given up completely. My automations are firing, but stop when the notification fails to send, like this:


It’s causing all sorts of things to fail!

If I manually ‘run action’ from within an automation, I see this:
image
and this:

I’ve managed to catch two sets of companion app logs that might be related:

--------- beginning of main
08-11 18:32:39.262  7961  7961 D WindowOnBackDispatcher: setTopOnBackInvokedCallback (unwrapped): androidx.navigationevent.OnBackInvokedInput$createOnBackAnimationCallback$1@e7ee421
08-11 18:32:39.268  7961  8537 D ServerConnectionStateProviderImpl: usesInternalSsid is: true, usesWifi is: true
08-11 18:32:39.270  7961  8537 D ServerConnectionStateProviderImplKt: Using internal URL
08-11 18:32:39.272  7961  8537 D ServerConnectionStateProviderImpl: usesInternalSsid is: true, usesWifi is: true
08-11 18:32:39.275  7961  7961 D WebViewActivity$onCreate: Matter/Thread step changed to NOT_STARTED
08-11 18:32:39.279  7961  9132 E WebSocketCoreImpl: Websocket: onFailure
08-11 18:32:39.279  7961  9132 E WebSocketCoreImpl: java.net.SocketException: Software caused connection abort
08-11 18:32:39.279  7961  9132 E WebSocketCoreImpl: 	at java.net.SocketInputStream.socketRead0(Native Method)
08-11 18:32:39.279  7961  9132 E WebSocketCoreImpl: 	at java.net.SocketInputStream.socketRead(SocketInputStream.java:118)
08-11 18:32:39.279  7961  9132 E WebSocketCoreImpl: 	at java.net.SocketInputStream.read(SocketInputStream.java:173)
08-11 18:32:39.279  7961  9132 E WebSocketCoreImpl: 	at java.net.SocketInputStream.read(SocketInputStream.java:143)
08-11 18:32:39.279  7961  9132 E WebSocketCoreImpl: 	at okio.internal.DefaultSocket$SocketSource.read(DefaultSocket.kt:124)
08-11 18:32:39.279  7961  9132 E WebSocketCoreImpl: 	at okio.RealBufferedSource.read(RealBufferedSource.kt:215)
08-11 18:32:39.279  7961  9132 E WebSocketCoreImpl: 	at okhttp3.internal.connection.Exchange$ResponseBodySource.read(Exchange.kt:345)
08-11 18:32:39.279  7961  9132 E WebSocketCoreImpl: 	at okio.RealBufferedSource.request(RealBufferedSource.kt:232)
08-11 18:32:39.279  7961  9132 E WebSocketCoreImpl: 	at okio.RealBufferedSource.require(RealBufferedSource.kt:225)
08-11 18:32:39.279  7961  9132 E WebSocketCoreImpl: 	at okio.RealBufferedSource.readByte(RealBufferedSource.kt:235)
08-11 18:32:39.279  7961  9132 E WebSocketCoreImpl: 	at okhttp3.internal.ws.WebSocketReader.readHeader(WebSocketReader.kt:128)
08-11 18:32:39.279  7961  9132 E WebSocketCoreImpl: 	at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.kt:111)
08-11 18:32:39.279  7961  9132 E WebSocketCoreImpl: 	at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.kt:317)
08-11 18:32:39.279  7961  9132 E WebSocketCoreImpl: 	at okhttp3.internal.ws.RealWebSocket$connect$1.onResponse(RealWebSocket.kt:204)
08-11 18:32:39.279  7961  9132 E WebSocketCoreImpl: 	at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:582)
08-11 18:32:39.279  7961  9132 E WebSocketCoreImpl: 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1100)
08-11 18:32:39.279  7961  9132 E WebSocketCoreImpl: 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
08-11 18:32:39.279  7961  9132 E WebSocketCoreImpl: 	at java.lang.Thread.run(Thread.java:1572)

and

08-11 18:22:21.706  7961  9058 I SensorReceiverBase: Sensor updates and sync completed
08-11 18:22:21.777  7961  9058 E IntegrationRepositoryImpl: Unable to get notification rate limits
08-11 18:22:21.777  7961  9058 E IntegrationRepositoryImpl: retrofit2.HttpException: HTTP 403 
08-11 18:22:21.777  7961  9058 E IntegrationRepositoryImpl: 	at retrofit2.KotlinExtensions$await$2$2.onResponse(KotlinExtensions.kt:53)
08-11 18:22:21.777  7961  9058 E IntegrationRepositoryImpl: 	at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:164)
08-11 18:22:21.777  7961  9058 E IntegrationRepositoryImpl: 	at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:582)
08-11 18:22:21.777  7961  9058 E IntegrationRepositoryImpl: 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1100)
08-11 18:22:21.777  7961  9058 E IntegrationRepositoryImpl: 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
08-11 18:22:21.777  7961  9058 E IntegrationRepositoryImpl: 	at java.lang.Thread.run(Thread.java:1572)
08-11 18:22:21.777  7961  9058 D SettingsPresenterImpl$getNotificationRateLimits: Unable to get rate limits
08-11 18:22:21.777  7961  9058 D SettingsPresenterImpl$getNotificationRateLimits: io.homeassistant.companion.android.common.data.integration.IntegrationException: retrofit2.HttpException: HTTP 403 
08-11 18:22:21.777  7961  9058 D SettingsPresenterImpl$getNotificationRateLimits: 	at io.homeassistant.companion.android.common.data.integration.impl.IntegrationRepositoryImpl.getNotificationRateLimits(IntegrationRepositoryImpl.kt:351)
08-11 18:22:21.777  7961  9058 D SettingsPresenterImpl$getNotificationRateLimits: 	at io.homeassistant.companion.android.common.data.integration.impl.IntegrationRepositoryImpl$getNotificationRateLimits$1.invokeSuspend(IntegrationRepositoryImpl.kt:13)
08-11 18:22:21.777  7961  9058 D SettingsPresenterImpl$getNotificationRateLimits: 	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:34)
08-11 18:22:21.777  7961  9058 D SettingsPresenterImpl$getNotificationRateLimits: 	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:98)
08-11 18:22:21.777  7961  9058 D SettingsPresenterImpl$getNotificationRateLimits: 	at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:124)
08-11 18:22:21.777  7961  9058 D SettingsPresenterImpl$getNotificationRateLimits: 	at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:89)
08-11 18:22:21.777  7961  9058 D SettingsPresenterImpl$getNotificationRateLimits: 	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:586)
08-11 18:22:21.777  7961  9058 D SettingsPresenterImpl$getNotificationRateLimits: 	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:798)
08-11 18:22:21.777  7961  9058 D SettingsPresenterImpl$getNotificationRateLimits: 	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:717)
08-11 18:22:21.777  7961  9058 D SettingsPresenterImpl$getNotificationRateLimits: 	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:704)
08-11 18:22:21.777  7961  9058 D SettingsPresenterImpl$getNotificationRateLimits: Caused by: retrofit2.HttpException: HTTP 403 
08-11 18:22:21.777  7961  9058 D SettingsPresenterImpl$getNotificationRateLimits: 	at retrofit2.KotlinExtensions$await$2$2.onResponse(KotlinExtensions.kt:53)
08-11 18:22:21.777  7961  9058 D SettingsPresenterImpl$getNotificationRateLimits: 	at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:164)
08-11 18:22:21.777  7961  9058 D SettingsPresenterImpl$getNotificationRateLimits: 	at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:582)
08-11 18:22:21.777  7961  9058 D SettingsPresenterImpl$getNotificationRateLimits: 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1100)
08-11 18:22:21.777  7961  9058 D SettingsPresenterImpl$getNotificationRateLimits: 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
08-11 18:22:21.777  7961  9058 D SettingsPresenterImpl$getNotificationRateLimits: 	at java.lang.Thread.run(Thread.java:1572)

Having already cleared the mobile apps cache and data, I’m not sure what else I should be trying.

Has anyone seen this before and/or have any ideas please?

I run HAOS in hyper-v, so can rollback to snapshots I take before any significant changes.

If I roll back to core 2026.7.4 then notifications to my mobile work, but if I re-update to 2026.8.0 or 2026.8.1 they seem to break completely.

I was wrong about the Core version. Things worked for a couple of notifications, then did exactly the same.
I’ve tried going back a few Core versions and a few versions of the android app, and haven’t been able to get things back to a reliable/working state. :man_shrugging:

It might have been much simpler than I thought.
Removing my phone from the Mobile App integration and letting it re-add itself seems to have got everything working OK again. At least for now. :crossed_fingers: