I wake up every day to my home server greeting me, telling me the outside temperature, reading out my unread emails and Twitter mentions, and playing my playlist. When I leave for work, I stream my playlist from my home server to my phone/tablet and listen to it on my car stereo. While at work, I see and speak to my family using a webcam robot that I can move around sitting remotely. Back home in the evening, I watch the videos downloaded (while I was at work) on my TV. I dump free eBooks on my server and my wife reads them on her Kindle.
This is not a proprietary home entertainment solution; instead I have put it together using free and/or open source software. And doing this was not easy (therefore, interesting) because it had to work across my heterogeneous set of gadgets - Android and Windows phones, Apple iPod, Microsoft Xbox, Google TV, Amazon Kindle and an Android tablet. I have laptops running Linux, Windows and MacOS. Therefore, sharing content (videos, music, photos and eBooks) across all these devices makes the setup challenging and exciting.
The home entertainment network includes a desktop PC powered by Intel Core i3 processor, 16 GB of RAM and 1 TB hard disk and runs Fedora Linux 16. This black-colored tower, which I call my home server, has its pride of place in my living room, next to a red couch (imagine the kind of convincing I had to go through with my wife for this!).
Media Servers
The content resides on this server in sub directories namely Music, Videos, Photos and Books on a partition called /data. The content from here is streamed or synced with my various devices and gadgets via media servers. Each media server runs inside a KVM+QEMU virtual machine, thanks to 16GB of RAM. I create and manage virtual machines using virt-manager on my laptop. All the virtual machines barring the Windows virtual machine (see “How I sync my Windows Phone 7”) run Fedora 16.
The content in /data (as mentioned above) directory is shared across these servers via NFS. This has an inherent advantage. The photos uploaded via Menalto Gallery or the music uploaded via Subsonic is instantly available to the MiniDLNA server which is configured to watch /data for content.
When I'm not at home
When I'm not at home, the content is still accessible on my phone, tablet and laptop via VPN. I have a D-Link DIR-615 Wireless N Router which I flashed with a DD-WRT http://www.dd-wrt.com/ firmware. This gives me a simple PPTP VPN to login to my home network from outside. The router is connected to a Airtel broadband DSL modem.
Additionally, I have set up Dynamic DNS on my router. With Dynamic DNS, I'm able to VPN into my home using a name without worrying about Airtel's dynamic IP. Therefore, when I'm not at home, I'm still able to:
Stream music to my tablet and phone using Android's built in VPN over EDGE/3G and play it on my car stereo using the audio AUX cable.
Play my playlist on my laptop through the Subsonic web interface.
Slide through photos on my gallery on the tablet using ReGalAndroid app (see above) or through web browser.
Move around my Webcam robot (see “A Webcam Robot”)
Note that DLNA does not work over VPN. Also watching videos over VPN is not an option for me because of limited upload bandwidth.
How I sync my Windows Phone 7
While both my Android devices (phone and tablet) and iPod support VPN, DLNA and/or have apps to connect to my media servers, my Dell Venue Pro lacks VPN and DLNA support. To circumvent this limitation, I set up a virtual machine running Windows 7 and Zune software for the PC. I exposed my /data partition to Windows using SAMBA and set it up as a mapped drive.
In Zune, I set up Music and Photos to point to the respective directories on the mapped drive. Zune has WiFi sync support for Windows Phone 7. So my music and photos started syncing with Windows Phone 7 over WiFi.
The way this works is -- suppose I upload a new photo in Menalto Gallery or add a new song in Subsonic, it will sync the new photo or song when I plug-in my phone for charging. I further customized the setup to sync only a specific album and only my Subsonic playlist. Since Menalto Gallery creates a new directory for each album, syncing only selective albums is easy. But syncing only the playlist songs requires a bit of shell scripting.
Those who are not WiFied
My house is not wired. Hence I either rely on all devices being WiFi or a solution as follows. The first solution I tried was client bridging support in DD-WRT firmware (www.dd-wrt.com). I bought a second D-Link router (same model as mentioned above) and set up this router as a client bridge http://www.dd-wrt.com/wiki/index.php/Client_Bridged. The client bridge allows a WiFi router to connect to the primary router (the gateway) via WiFi. This allows me to bring wired connection to devices not sitting near my main router.
But this setup was short lived and I moved onto a more exciting solution — network over electricity. Called HomeplugAV Poweline. This allows data to move over the electricity lines by using HomeplugAV adapters. I ordered a pair of ZyXEL PLA401v3 HomePlug AV adapters from Amazon. These adapters look like plugs with a RJ45 port. I have plugged in one adapter in the switchboard near the router and the other adapter in the room where I keep my Xbox (without WiFi adapter) and Tata Sky box (for VoD). And voila, they are connected!
A Webcam Robot
Rovio
http://www.wowwee.com/en/products/tech/telepresence/rovio is a WiFi enabled webcam Robot which can be moved around the house using a web browser or mobile apps (available for Android, iOS and Windows Phone 7). It has built-in microphone and speakers. I use it more as a toy than for surveillance. But at times I have moved the Rovio around my house to check if I have closed the water tap, locked the door and switched off the geyser. Using ActiveX or VLC plugin in IE or Firefox, I can see, hear and speak to my family when I'm not at home. I can set predefined paths for Rovio to roam around my house and take it back to it's docking station when its battery is low. What's more, it looks good in my living room and attracts lots of attention from visiting friends.
Version 2012
The setup explained above works, but is not perfect. I boasted in the beginning that my home server announces the weather, tweets and e-mails to me. I achieved this using Festival text-to-speech and some PHP code that I wrote. While that works, the voice (despite trying different voices and configuration) sounds robotic. Improving it, is the agenda for this year.