# Setting up a Squeezebox Duet Without a Controller

A few years ago my sister bought a Squeezebox Duet to play her music. It’s a superb solution. It consists of a small black box known as a Receiver. This connects to your wireless or LAN network and streams music from any device on it running the Squeezecenter Server software and plays it through your own speaker setup. It’s all managed using a separate Controller that wirelessly connects to the headless receiver and enables you to browse your music collection and decide what gets played.

Unfortunately, one day the controller just stopped working. Without the controller it became impossible to configure the Receiver. A new controller cost anything up to 300 euro and just wasn’t worth the expense. Luckily, after some investigating, I found a pretty good solution - someone had written an application called Net:UDAP that could connect to a Squeezebox Receiver and enable you to setup and configure the receiver’s wireless settings so it can connect to your network.

The application comes in the form of a Perl script which when run, connects to the receiver over a direct ethernet connection and enables you to manually set the receiver’s settings just like you would have done with a working controller. Once configured you can then use the free Squeezebox app available from the Android market or Apple Store on your phone or tablet to control the Receiver just like you would with the original controller.

### Summary of the Steps

The following is a short summary of the steps. More detailed instructions are found further down.

1.. Start by performing a factory reset the Squeezebox Receiver. Do this by holding down the button for five seconds or more until it starts flashing red.

2.. Connect the Receiver directly to your PC or laptop using an ethernet cable.

3.. Determine the IP address of the Receiver. Use ipconfig /all in Windows or ifconfig -a in Unix.

4.. Install Perl on your operating system.

6.. Run the Net::UDAP application’s udap_shell.pl script as follows to connect to the Squeezebox Receiver:

udap_shell.pl --local-address [Squeezebox Receiver IP address]

7.. Run the scripts commands in its CLI to configure the receiver’s wireless network settings and the address of the Squeezebox server running on your network.

1.. Before starting, the Squeezebox Receiver must be in init mode indicated by its front button flashing slowly red. Do this by performing a factory reset on the receiver by pressing and holding the button for five seconds or more until the light starts flashing red.

2.. Once in init mode, connect the Squeezebox Receiver to your laptop using an ethernet cable.

3.. Turn off your laptop’s wireless so it’s only looking at the LAN network.

4.. Open a command window and get the IP address of the Squeezebox Receiver using the following DOS command:

    ipconfig /all

You should get some output like the following:

    C:\Users\Dermot> ipconfig /all

Windows IP Configuration

Host Name . . . . . . . . . . . . : MyLaptop
Primary Dns Suffix  . . . . . . . :
Node Type . . . . . . . . . . . . : Hybrid
IP Routing Enabled. . . . . . . . : No
WINS Proxy Enabled. . . . . . . . : No
DNS Suffix Search List. . . . . . :

Wireless LAN adapter Wireless Network Connection:

Media State . . . . . . . . . . . : Media disconnected
Connection-specific DNS Suffix  . :
Description . . . . . . . . . . . : Intel(R) Centrino(R) Ultimate-N 6300 AGN
Physical Address. . . . . . . . . : 24-77-03-26-B3-D4
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes

Connection-specific DNS Suffix  . :
Description . . . . . . . . . . . : Intel(R) 82579LM Gigabit Network Connection
Physical Address. . . . . . . . . : 00-21-CC-72-45-01
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
Autoconfiguration IPv4 Address. . : 192.168.1.4(Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.0.0
Default Gateway . . . . . . . . . :
DHCPv6 IAID . . . . . . . . . . . : 285221324
DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-16-B2-73-D0-00-21-CC-72-45-01
DNS Servers . . . . . . . . . . . : fec0:0:0:ffff::1%1
fec0:0:0:ffff::2%1
fec0:0:0:ffff::3%1
NetBIOS over Tcpip. . . . . . . . : Enabled

5.. Examine the output and look for the Ethernet adapter details. Here you should find a section Autoconfiguration IPv4 Address which will list the IP address assigned to the device connected on the ethernet port. See the highlighted line above for an example - you can see how the IP address of the Receiver is 192.168.1.4.

### Install Perl

To run the Net:UDAP application you’ll need to have Perl installed on your environment. Perl is typically installed by default on Ubuntu. A good way to run Perl scripts in Windows is using the ActivePerl distribution.

Download the installer file for its free community edition from here and run it to install Perl on your Windows environment. Once installed run the command perl -version within a command window to test that it works:

Microsoft Windows [Version 6.1.7601]

C:\Users\Dermot>perl -version

This is perl 5, version 14, subversion 2 (v5.14.2) built for MSWin32-x64-multi-thread
(with 1 registered patch, see perl -V for more detail)

Binary build 1402 [295342] provided by ActiveState http://www.ActiveState.com
Built Oct  7 2011 15:19:36

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the

C:\Users\Dermot>

### Run the Application to Connect to the Squeezebox Receiver

1.. Download the Net::UDAP application ZIP and extract the archive to any location.

2.. To get the Net::UDAP application to connect to the Squeezebox Receiver you need to run its udap_shell.pl script and specify the IP address of the Receiver you determined in the previous section. Here’s an example of the command where the IP address of the Receiver is 169.254.163.42:

C:\branches\1.0.x\scripts>udap_shell.pl --local-address 169.254.163.42

If the script successfully connects to the network address and you should see a command line interface as follows:

    C:\branches\1.0.x\scripts>UDAP>
If the connection fails then it's typically because the IP address is incorrect. See the Troubleshooting section for some help.

3.. Use the help command to see what commands are available in the CLI:

UDAP> help
Type 'help command' for more detailed help on a command.
Commands:
configure - configure a device
discover  - Discover UDAP devices and get their current configuration
exit      - Exit configure mode (if configuring a device), otherwise exit application
fields    - Display a list of valid device fields
help      - prints this screen, or help on 'command'
list      - List discovered devices, or a specific information about a device
quit      - Exit configure mode (if configuring a device), otherwise exit application
reset     - Reset a device
save_data - Save data parameters to device(s)
save_ip   - Save ip parameters to device(s)
set       - Set device parameter(s)

4.. The next step is to use the CLI to discover the Receiver and start its configuration.

### Discover and Configure the Receiver

Once you’ve launched the script and connected to the Receiver you can begin to configure it.

1.. The first step is to tell the application which Squeezebox Receiver you wish to configure. Do this using the discover command to scan the IP address for Squeezebox Receivers running on the connection. You should get the following type of output:

     UDAP>
discover
info:   get_ip response received from 00:04:20:16:05:8f
info:   get_data response received from 00:04:20:16:05:8f

2.. When the scan has completed as above, use the list command to display the available Squeezebox Receivers. There should only be one in this case:

     UDAP> list

== ================= ========== ===============
1 00:04:20:16:05:8f squeezebox init

3.. Use the configure command to select the Squeezebox Receiver to configure based on its number (it will always be 1):

     UDAP> configure 1

UDAP [1] (squeezebox 16058f)>

Notice the prompt has changed to show the device number [1] and name

4.. You are now ready to change the Receiver’s configuration details. Use the list command to display the current settings. You’ll see a list of all the configuration fields and their default values:

     UDAP [1] (squeezebox 16058f)> list

bridging: 0
hostname:
interface: 0
lan_gateway: 0.0.0.0
lan_ip_mode: 1
primary_dns: 0.0.0.0
secondary_dns: 0.0.0.0
squeezecenter_name:
wireless_SSID:
wireless_channel: 0
wireless_keylen: 0
wireless_mode: 0
wireless_region_id: 0
wireless_wep_key_0:
wireless_wep_key_1:
wireless_wep_key_2:
wireless_wep_key_3:
wireless_wep_on: 0
wireless_wpa_cipher: 1
wireless_wpa_on: 0
wireless_wpa_mode: 1
wireless_wpa_psk:

To see a list of all the available fields and their descriptions use the fields command:

     UDAP> fields
hostname: Device hostname (is this set automatically?)
interface: 0 - wireless, 1 - wired
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
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_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
wireless_wep_key_1: WEP Key 1
wireless_wep_key_2: WEP Key 2
wireless_wep_key_3: WEP Key 3
wireless_wep_on: 0 - WEP Off, 1 - WEP On
wireless_wpa_cipher: 1 - CCMP, 2 - TKIP
wireless_wpa_on: 0 - WPA Off, 1 - WPA On
wireless_wpa_mode: 1 - WPA, 2 - WPA2
wireless_wpa_psk: WPA Public Shared Key

NOTE THAT THESE ARE CASE SENSITIVE SO BE CAREFUL! Here’s an example where the wireless network was WPA enabled and therefore just required a passphrase.

    set server_address=192.168.1.3 squeezecenter_address=192.168.1.3 squeezecenter_name=Squeezecenter wireless_SSID=shed wireless_wpa_psk=rathcloughduallacashel wireless_wpa_on=1 wireless_wpa_mode=2 wireless_wpa_cipher=2 interface=0 hostname=squeezebox-duet

5.. Type list to see the values have changed:

     UDAP [1] (squeezebox 16058f)> list
bridging: 0
hostname: squeezebox-duet
interface: 0
lan_gateway: 0.0.0.0
lan_ip_mode: 1
primary_dns: 0.0.0.0
secondary_dns: 0.0.0.0
squeezecenter_name:
wireless_SSID: shed
wireless_channel: 0
wireless_keylen: 0
wireless_mode: 0
wireless_region_id: 0
wireless_wep_key_0:
wireless_wep_key_1:
wireless_wep_key_2:
wireless_wep_key_3:
wireless_wep_on: 0
wireless_wpa_cipher: 2
wireless_wpa_on: 1
wireless_wpa_mode: 2
wireless_wpa_psk: rathcloughduallacashel

6.. Use the save_data command to save the settings to the device:

     UDAP [1] (squeezebox 16058f)> save_data
ucp_method set_data callback not implemented yet at /home/robin/projects/Net-UDAP/trunk/scripts/../src/Net-UDAP/lib/Net/UDAP.pm line 281
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 05 8F  ............ ...
00000010  00 01 C0 01 00 00 01 00 - 01 00 06 00 1A           .............
info:   set_data response received from 00:04:20:16:05:8f

7.. Finally, use the reset command to reset the Squeezebox Receiver in order to apply the changes:

     UDAP [1] (squeezebox 16058f)> reset
ucp_method reset callback not implemented yet at /home/robin/projects/Net-UDAP/trunk/scripts/../src/Net-UDAP/lib/Net/UDAP.pm line 281
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 05 8F  ............ ...
00000010  00 01 C0 01 00 00 01 00 - 01 00 04                 ...........
info:   reset response received from 00:04:20:16:05:8f

Ignore any warnings.

8.. The Squeezebox Receiver should reset and when it restarts it should begin connecting to your wireless network using the new settings. The Receiver will indicate a successful connection when a dark white light appears.

9.. Install the Squeezebox App on your phone or tablet to connect to the Squeezebox server and play your music.