On Sonos, Asus mesh wifi and Raspberry Pi
Working from home
I suspect that Covid lockdowns and the work-from-home revolution inspired many people to reevaluate their home network setups. I’ve actually been surviving fine until recently with my Asus RT-AC68U router, but in my Google Meet work calls lately I’ve been experiencing drop-outs (stalling, stuttering) on both the 2.4GHz and 5GHz bands.
We have an “ultra-fast broadband” (as they call it here in New Zealand) connection to an optical fibre network. The pricing plan I’m on has 100Mbps downstream and the upstream throttled to 20Mbps. We are big streaming service users, and the plan suits us just fine. I was using the AC68U on my old copper ADSL connection until the fibre was connected a couple of years ago, and it was reasonably straightforward to cut over to fibre on the same router. Internet Service Providers (ISPs) here like to use VLAN tagging, which took a bit of fiddling around to find in the Asus configuration — it seems to be conflated with IPTV settings and the AC68U needs to have one ethernet port mocked as an IPTV port for to work (I know — go figure). The “ONT” (optical network terminal) that our monopoly line provider, Chorus, installs is by our front door, downstairs in one corner of a two-storey townhouse. My home office is in the opposite corner, upstairs, and the signal attenuation means the wifi gets pretty flakey.
I decided it was about time I joined the mesh wifi resolution.
Mesh
My ISP offers a deal where they will supply a mesh router setup on the more expensive plans, so I had a look at that first. The kit they provide is the TP-Link Deco X20. I read the reviews, and it looks OK, but is missing not only a high-speed wireless backhaul, but also the malware filtering and parental controls that come for free with my Asus router (my eight year-old tech-savvy son makes those a necessity). Right, I thought, let’s get serious and figure out what the mesh landscape looks like. I spent a couple of hours trawling through PC Mag, Tom’s Guide, and Dong Knows reviews — comparing features and learning about the latest in wifi tech.
I ended up with a short-list:
- Google Home: good-looking, cheap, and reasonable performance but no VLAN tagging, so I’d have to piggyback on the nasty router that the ISP provides, which has been sitting in the cupboard for years — yuck
- TP-Link X90: an updated version of the kit that my ISP will provide for “free” (on a two-year contract and an upgraded plan) — but the malware and parental controls require an annual subscription fee and the node towers are ugly
- Asus ZenWiFi AX XT8: according to reviews this is a “Rolls Royce” from a performance perspective and has excellent built-in controls — plus the towers have a brutalist architecture vibe
I was still a bit worried about VLAN tagging support on the latter two options, so I visited my local PB Tech and bailed up a salesperson. He assured me that all of our major ISPs are supported out of the box, so I bought the rather pricey, but allegedly awesome two-unit pack of the Asus XT8.
After I’d unboxed, I was anticipating an afternoon of troubleshooting, so I was almost disappointed when the onboarding configuration did indeed just let me choose my ISP from a list, and after I’d configured my 2GHz and 5GHz SSIDs and password to the same as the existing ones… everything just worked!
The Android app that Asus supply is excellent, and the web console was very familiar to me, as it was mostly the same as for the AC68U. I was surprised that wifi 6 is a thing — a little “6” appeared in superscript on the wifi icon on my Samsung phone. The Amazon Echos worked, the Nest cameras worked, the Philips Hue worked, the phones and tablets worked, the Samsung smart TV and Chromecast worked, the gaming PC upstairs had a new lease of life!
The only slight glitch was that I needed to restart the two Sonos units that I have — a Play:3 in downstairs in the kitchen, and a Sonos One upstairs in the master bedroom. After restart, they worked just fine though… although I should have taken the glitch as a portent.
Sonos grief
The next morning, the primary unit’s status LED was flashing madly and the console kept urging me to upgrade the firmware. I gritted my teeth and let the process run. Everything seemed to be fine, until I opened the Sonos app a few hours later. One of the Sonos speakers had dropped off, and the queuing of music had suddenly become very fragile.
I started Googling around and found a disturbing theme (1, 2, 3) involving Sonos owners who had purchased Asus XT8 units. It seems that many owners had been trucking along just fine until a firmware update in late 2020 or early 2021 had sent their Sonos speakers into a dark place. I followed a series of tips that had maybe worked for someone at some time:
- disabling “Airtime Fairness” on the Asus (some kind of automated QoS — but it was already disabled my default on my firmware version)
- disabling “IGMP snooping” on the Asus (a security control for multicast)
- binding the MACs for my two Sonos speakers to one XT8 node — the satellite node
Unfortunately none of this worked for me. The speakers indicated they had joined the wireless network successfully (a steady white LED) and they appeared in the DHCP clients list in the router’s console, but the app on Android and Mac denied their existence. Sonos has a method for updating network settings when something has changed, but this would fail on every attempt. Despite the advice that a factory reset is “not advised for troubleshooting purposes”, I even obliterated all configuration on my app and speakers and attempted a first-time use onboarding — but no luck.
The only way I could convince a Sonos speaker to co-operate was to plug it directly into a wired ethernet port on one of the Asus nodes. This worked absolutely fine on the primary or satellite node, but as soon as the speaker was unplugged, it refused to be discoverable on the wireless network.
I would have to hope and pray that an Asus engineer was talking to a Sonos engineer somewhere and one day I would receive a firmware upgrade that would help, but in the meantime, I really needed a way to get my all-important kitchen Sonos back.
Cracking out a Pi
“Fine”, I thought — I will find a way to plug my Sonos in. It sits on a shelf high up in the kitchen where a cable can’t reach without drilling some holes, but I will find a way.
Further Googling turned up a common solution for turning non-wifi appliances into wifi ones with a Raspberry Pi. Given how fussy the Sonos seemed to be with the network layer (I suspect layer-2 shenanigans), I didn’t hold out too much hope, but I thought it was worth a crack. This excellent guide included a script to tickle up a Raspberry Pi into a wifi-to-ethernet bridge. I couldn’t find a wifi dongle for my two unused Raspberry Pi 2s, so I acquired a model 3 with built-in wifi and ran the script. Testing with my Mac, it worked beautifully: I attached my Mac with a cable to the Pi (using the ethernet->USB-B -> USB-C dongle madness) and it picked up an IP address on the same subnet as the other devices on the wireless and performed like it was just another wifi client. WOOT!
I plugged in the Sonos, and it didn’t work at all. Sonos is using some multicast, UDP, backchannel voodoo, and I just didn’t have the heart anymore to see if I could find a config for parprouted that would fool it into working.
Plug it in
I happened upon a post from someone who said they did Sonos installations and that you should “never use your own wifi — use the Sonos wifi”. He suggested that at least one Sonos speaker needed to be plugged into the network and then the rest would co-operate. I knew Sonos had some magical back-plane going on to co-ordinate streams (otherwise your upstairs speaker might be lagging behind your downstairs one and that would sound weird). I didn’t understand how it actually worked though. I plugged what is supposed to be my bedroom speaker into the satellite node downstairs and ran the onboarding process. As usual, this worked just fine.
I then left my kitchen speaker unplugged, and ran the onboarding process wirelessly — this also worked — albeit with a step where it says “you will need to restart your speaker to complete the process”.
It seems that if one Sonos speaker is plugged into a physical ethernet connection, it will establish its own “SonosNet” wireless network, and the other speakers will join this, rather than using the mesh. In the Asus router console both speakers appear as if they are on a physical wired connection, rather than one being wireless.
Living in hope
I don’t have a bedroom speaker any more, because it is silent, and hard-wired to the satellite node for my Asus XT8 network (which also lives downstairs). But, I do have a working kitchen speaker. I just hope that somewhere out there, an Asus engineer is talking to a Sonos engineer, and some day soon my firmware will come.