201507.26

Squeezebox setup without the remote/controller

My dad recently gave me a Squeezebox for a present after he’d upgraded his home audio system. I was grateful but ultimately stumped on how to set it up. I read a bunch online about setting it up with the remote it comes with. Oh wait. Mine doesn’t have a remote.

Let the fun begin.

Connecting to the Squeezebox

This is harder than it sounds. Initially, I tried wiring it into my router and seeing if it could see it. It could not. This was a WRT54G with Tomato firmware. Maybe the setups just weren’t compatible or something ridiculous like that.

So I tried another way I found after poking around a lot: the Squeezebox has a build in wireless SSID that you can connect to in ad-hoc mode (after holding the only button for > 6 seconds and it enters reset/config mode).

However, doing this is finicky and had me tearing my hair out. Ultimately, I got my Windows machine connected to it. When it connects, it gives your machine an IP in the 192.168.1.100-254 range. If it gives you a 169.xxx.xxx.xxx address, it’s game over. Try restarting your machine. Try resetting the Squeezebox. Try a rain dance while wearing a tribal loincloth. You just might get that IP.

I recently bought a new router (Buffalo, w/ DD-WRT) and plugged the reset-mode Squeezebox into it (via LAN) and was able to connect to it instantly, so try that first and only go the ad-hoc wireless route if you absolutely have to.

Talking to the Squeezebox

The Net-UDAP software is amazing and wonderful. I don’t know what it does under the hood, but it lets you talk to your Squeezebox should you finally get connected to it in some capacity.

Unless you’re on Windows. Yes, I know, it supposedly works on Windows but just didn’t find the Squeezebox with running discover.

My only solution was to spin up a linux VM with a bridged network adapter and run Net-UDAP there instead. Worked flawlessly. Hopefully you have a linux box laying around, or maybe it will just work for you in Windows. Try the Windows perl binary instead of cygwin’s perl.

Anyway, once you’ve got everything connected, you run the Net-UDAP like so:

cd /path/to/net-udap
./scripts/udap_shell.pl -a 192.168.0.106

Note that the 192.168.0.106 is the address for the machine you’re running the shell on, not the Squeezebox itself.

You should get a prompt:

UDAP> 

Now run the discover command:

UDAP> discover
info: *** Broadcasting adv_discovery message to MAC address 00:00:00:00:00:00 on 255.255.255.255
info:   adv_discovery response received from 69:69:69:69:69:69
info: *** Broadcasting get_ip message to MAC address 69:69:69:69:69:69 on 255.255.255.255
info:   get_ip response received from 69:69:69:69:69:69
info: *** Broadcasting get_data message to MAC address 69:69:69:69:69:69 on 255.255.255.255
info:   get_data response received from 69:69:69:69:69:69

Hopefully you get output like that. If you get empty output, see “Connecting to the Squeezebox” =[.

Setup

Once that finicky little bastard is discovered, run list:

UDAP> list  
 #    MAC Address    Type       Status
== ================= ========== ===============
 1 69:69:69:69:69:69 squeezebox init

You can see it has an ID of 1 so we do:

UDAP> conf 1

Your prompt will now change, and you’re in config mode:

UDAP [1] (squeezebox 696969)>

Now you can connect it to your network via wireless by setting values into its config. This will differ network to network, but here are the commands I run to get things working on a network with WPA2-PSK TKIP+AES:

set hostname=jammy interface=0 lan_gateway=192.168.0.1 lan_ip_mode=1 primary_dns=192.168.0.1
set wireless_SSID='my network SSID' wireless_wpa_mode=2 wireless_wpa_cipher=3 wireless_keylen=0 wireless_mode=0 wireless_region_id=4 wireless_wpa_on=1 wireless_wpa_psk='WPA passwordddd' wireless_channel=9
set server_address=192.168.0.113

For a list of the fields and what they mean, type fields:

UDAP [1] (squeezebox 696969)> fields
             bridging: Use device as a wireless bridge (not sure about this)
             hostname: Device hostname (is this set automatically?)
            interface: 0 - wireless, 1 - wired (is set to 128 after factory reset)
          lan_gateway: IP address of default network gateway, (e.g. 192.168.1.1)
          lan_ip_mode: 0 - Use static IP details, 1 - use DHCP to discover IP details
  lan_network_address: IP address of device, (e.g. 192.168.1.10)
      lan_subnet_mask: Subnet mask of local network, (e.g. 255.255.255.0)
          primary_dns: IP address of primary DNS server
        secondary_dns: IP address of secondary DNS server
       server_address: IP address of currently active server (either Squeezenetwork or local server
squeezecenter_address: IP address of local Squeezecenter server
   squeezecenter_name: Name of local Squeezecenter server (???)
        wireless_SSID: Wireless network name
     wireless_channel: Wireless channel (used by AdHoc mode???)
      wireless_keylen: Length of wireless key, (0 - 64-bit, 1 - 128-bit)
        wireless_mode: 0 - Infrastructure, 1 - Ad Hoc
   wireless_region_id: 4 - US, 6 - CA, 7 - AU, 13 - FR, 14 - EU, 16 - JP, 21 - TW, 23 - CH
   wireless_wep_key_0: WEP Key 0 - enter in hex
   wireless_wep_key_1: WEP Key 1 - enter in hex
   wireless_wep_key_2: WEP Key 2 - enter in hex
   wireless_wep_key_3: WEP Key 3 - enter in hex
      wireless_wep_on: 0 - WEP Off, 1 - WEP On
  wireless_wpa_cipher: 1 - TKIP, 2 - AES, 3 - TKIP & AES
    wireless_wpa_mode: 1 - WPA, 2 - WPA2
      wireless_wpa_on: 0 - WPA Off, 1 - WPA On
     wireless_wpa_psk: WPA Public Shared Key

To see the values already set, run list when in config mode.

Great, so you’ve set up all your network values and are confident that you’ve done it all right the first time. Good for you. Now you can run save_data:

UDAP [1] (squeezebox 696969)> save_data
info: *** Broadcasting set_data message to MAC address 69:69:69:69:69:69 on 255.255.255.255
ucp_method set_data callback not implemented yet at /path/to/udap/../src/Net-UDAP/lib/Net/UDAP.pm line 292.
Raw msg:
          00 01 02 03 04 05 06 07 - 08 09 0A 0B 0C 0D 0E 0F  0123456789ABCDEF

00000000  00 02 00 00 00 00 00 00 - 00 01 00 04 20 16 5A 05  ............ .Z.
00000010  00 01 C0 01 00 00 01 00 - 01 00 06 00 1A           .............
info:   set_data response received from 69:69:69:69:69:69

Make sure save_data returns a response similar to this. If it doesn’t, run it again. In fact, run it again anyway. Run it again…and again…and again.

Great, now run reset to finalize everything:

UDAP [1] (squeezebox 696969)> reset
info: *** Broadcasting reset message to MAC address 69:69:69:69:69:69 on 255.255.255.255
ucp_method reset callback not implemented yet at /path/to/udap/../src/Net-UDAP/lib/Net/UDAP.pm line 292.
Raw msg:
          00 01 02 03 04 05 06 07 - 08 09 0A 0B 0C 0D 0E 0F  0123456789ABCDEF

00000000  00 02 00 00 00 00 00 00 - 00 01 00 04 20 16 5A 05  ............ .Z.
00000010  00 01 C0 01 00 00 01 00 - 01 00 04                 ...........
info:   reset response received from 69:69:69:69:69:69

All done. Now don’t ever change your network setup ever again or you’ll have to deal with this shit again. Or just get a fucking remote…