WLAN shows "Low quality" and switches to/uses Cellular Data, instead of disconnecting or Roaming to better AP

Model: FP5
Android version: 15
Build number: FP5.VT2P.C.089.20260311

Issue/Unexpected behaviour:
Since the update to the current build (about 3 weeks ago) my FP5 often begins using Mobile data, while keeping an active but then unused WLAN connection with the Status “Low quality” (“Niedrige Qualität” if set to german).
If I disable Mobile data the WLAN connection is stable and works fine, as soon as I then enable Mobile data again, the issue imidiately occurs again.
The FP5 has never recoverd from this bad state, without me moving it to anoter location or disabling WLAN waiting several seconds and then reenabling it or switching to another SSID.
Other Android devices at the exact same location have a stable and working WLAN connection.

Expected behaviour:
If a “low quality” WLAN connection is detected, I would expect my phone to either roam to a different AP (if available) or to cleanly disconnect from (and eventually reconnect to) WLAN and begin using Mobile data.

Current Settings:
System > Developer options > Mobile data always active = disabled (it was never enabled, but some posts suggested this would cause more aggressive network switching so I include it)
System > Developer options > Enable Wi-Fi verbose logging = enabled (for better insight/debugging)

Locations:
At first I thought the issue was my Home WLAN Setup, because I currently run multiple old 802.11ac (Wi-Fi 5) APs with openWRT and am replacing them with 802.11be (Wi-Fi 7) Unify APs as they fail, but up until now it was stable and Roaming somewhat worked and the low quality issue also occured at other locations by now.

Screenshot of Settings > Network and Internet > Internet durring an occurence of the Issue:

Several extracts from WifiScoreReport from adb shell dumpsys wifi:

time             , session, netid, rssi, filtered_rssi, rssi_threshold, freq, txLinkSpeed, rxLinkSpeed, txTput, rxTput, bcnCnt, tx_good, tx_retry, tx_bad, rx_pps , nudrq, nuds, internalScorerType, internalScore, internalAdjustedScore, internalIsUsable, externalScore
4-21 9:59:40.459 ,      25,   223, -82 ,           0.0, -80.0         , 2462,          17,           1,      5,     14,   5606,    0.48,     0.02,   0.00,    0.97,   118,   79, ML                ,            81,                   100, true            , -1
4-21 9:59:43.487 ,      25,   223, -82 ,           0.0, -80.0         , 2462,          17,           1,      5,     14,   5632,    0.17,     0.01,   0.00,    0.35,   119,   80, ML                ,            81,                   100, true            , -1
4-21 9:59:46.516 ,      25,   223, -81 ,           0.0, -80.0         , 2462,          17,           1,      5,     14,   5642,    0.48,     0.00,   0.00,    0.55,   120,   80, ML                ,            76,                   100, true            , -1
4-21 9:59:49.531 ,      25,   223, -81 ,           0.0, -80.0         , 2462,          17,           1,      5,     14,   5646,    0.17,     0.00,   0.00,    0.20,   121,   81, ML                ,            80,                   100, true            , -1
4-21 9:59:52.547 ,      25,   223, -81 ,           0.0, -80.0         , 2462,          17,           1,      5,     14,   5648,    0.06,     0.00,   0.00,    0.07,   122,   81, ML                ,            80,                   100, true            , -1
4-21 9:59:55.569 ,      25,   223, -79 ,           0.0, -80.0         , 2462,          17,           1,      5,     14,   5669,    2.12,     0.42,   0.00,    2.76,   123,   82, ML                ,            75,                   100, true            , -1
4-21 9:59:58.610 ,      25,   223, -80 ,           0.0, -80.0         , 2462,          17,           1,      5,     14,   5695,    1.19,     0.15,   0.00,    1.42,   124,   82, ML                ,            75,                     0, false           , -1
4-21 10:0:1.632  ,      25,   223, -79 ,           0.0, -80.0         , 2462,          17,           1,      5,     14,   5724,    0.43,     0.05,   0.00,    0.51,   125,   83, ML                ,            78,                     0, false           , -1
4-21 10:0:4.666  ,      25,   223, -83 ,           0.0, -80.0         , 2462,          17,           1,      5,     14,   5741,    0.93,     0.02,   0.00,    0.47,   126,   83, ML                ,            69,                     0, false           , -1
4-21 10:0:7.687  ,      25,   223, -83 ,           0.0, -80.0         , 2462,          17,           1,      5,     14,   5746,    0.34,     0.00,   0.00,    0.17,   127,   84, ML                ,            70,                     0, false           , -1
4-21 10:0:10.712 ,      25,   223, -79 ,           0.0, -80.0         , 2462,          17,          34,      5,     14,   5749,    1.38,     0.63,   0.00,    1.53,   127,   84, ML                ,            72,                     0, false           , -1
time             , session, netid, rssi, filtered_rssi, rssi_threshold, freq, txLinkSpeed, rxLinkSpeed, txTput, rxTput, bcnCnt, tx_good, tx_retry, tx_bad, rx_pps , nudrq, nuds, internalScorerType, internalScore, internalAdjustedScore, internalIsUsable, externalScore
4-20 12:10:13.816,      24,   121, -53 ,           0.0, -80.0         , 5220,         516,         541,     12,    131,   6764,    4.88,     3.19,   0.00,    5.62,    14,   31, ML                ,            93,                   100, true            , -1
4-20 12:10:16.850,      24,   121, -53 ,           0.0, -80.0         , 5220,         516,         541,     12,    131,   6794,    2.28,     0.87,   0.00,    2.96,    14,   31, ML                ,            93,                   100, true            , -1
4-20 12:10:19.871,      24,   121, -53 ,           0.0, -80.0         , 5220,         516,         541,     12,    131,   6824,    1.46,     0.32,   0.00,    2.55,    14,   31, ML                ,            93,                   100, true            , -1
4-20 12:10:23.393,      24,   121, -52 ,           0.0, -80.0         , 5220,         516,         541,     12,    131,   6856,    0.95,     0.32,   0.00,    1.77,    14,   31, ML                ,            93,                   100, true            , -1
4-20 12:10:26.415,      24,   121, -52 ,           0.0, -80.0         , 5220,         516,         541,     12,    131,   6886,    0.49,     2.06,   0.00,    1.13,    15,   32, ML                ,            28,                   100, true            , -1
4-20 12:10:29.446,      24,   121, -50 ,           0.0, -80.0         , 5220,         516,         541,     12,    131,   6915,    1.43,     0.75,   0.00,    2.51,    15,   32, ML                ,            86,                     0, false           , -1
4-20 12:10:32.472,      24,   121, -52 ,           0.0, -80.0         , 5220,         516,         541,     12,    131,   6943,    7.44,     2.37,   0.00,    7.63,    15,   32, ML                ,            82,                     0, false           , -1
4-20 12:10:35.505,      24,   121, -51 ,           0.0, -80.0         , 5220,         516,         541,     12,    131,   6971,    3.34,     0.86,   0.00,    4.87,    15,   32, ML                ,            88,                     0, false           , -1
4-20 12:10:38.533,      24,   121, -53 ,           0.0, -80.0         , 5220,         516,         541,     12,    131,   7001,    1.21,     0.31,   0.00,    2.82,    15,   32, ML                ,            85,                     0, false           , -1
4-20 12:10:41.561,      24,   121, -53 ,           0.0, -80.0         , 5220,         516,         541,     12,    131,   7030,    0.86,     0.11,   0.00,    2.28,    15,   32, ML                ,            93,                     0, false           , -1
4-20 12:10:44.592,      24,   121, -55 ,           0.0, -80.0         , 5220,         516,         325,     12,    131,   7059,    0.31,     0.04,   0.00,    1.25,    15,   32, ML                ,            92,                     0, false           , -1


Did/Does anyone else also have this problem?

3 Likes

Having the exact same issue with the same phone, android version and build number.
Also it only appeared with the newest update for me

Update:

Disabling

Settings > Developer options > Wi-Fi scan throttling

seems to somewhat mitigate it. My phone still switches to mobile data and shows ‘Low quality’ sometimes, but it recovers within a minute and begins to use WLAN again, if a strong enough one is available.

The downside of this mitigation is the likely higher battery consumption.

1 Like

Sweet, I’ll test it out over the next few days and see what the changes are!

I am experiencing the same issue on my FP5 with current Android 15 build.

Disabling
Settings > Developer options > Wi-Fi scan throttling
did not improve the situation for me.

I opened a ticket at Fairphone Support.