X10 is a very cheap way to go, but it's not a very good system. The $20 switches you get are pretty low quality. More importantly though, the X10 protocol is pretty bad. It was designed in the 70's, and is very low bandwidth (I can't find a bps rating, but it takes about 3/4 of a second to send one command). If you don't use scene-capable switches (like Smarthome makes) you will notice a delay when activating different scenes.
I have a large Smarthome X10 installation at my parent's cottage/future home. The hardware is nice, but it suffers from reliability problems (eg, Sometimes when you hit a button, not all the lights activate; sometimes noise caused by power spikes/outages causes all lights to turn on, even though I have whole-house surge protection). I wired the place specifically to support X10, and have signal boosting/bridging in place (which helps), but honestly, I wouldn't do X10 ever again.
Programming the X10 devices is a pain: you have to send arcane commands to set up scenes.
At my house, I have a couple Smarthome Insteon switches in my basement for my home theatre. Again, I really like the hardware, and in fact it's even nicer than the Smarthome X10 stuff.
With insteon, they tried to simplify programming. What they ended up doing is making the very basic options (linking a single light to a button) a bit easier -- you just have to hold one for a few seconds till it blinks, then hold the other, and they're linked -- while at the same time making anything mildly more complex incredibly difficult. There are dumb limitations, like it's not possible to have a scene where one light goes to 0% and others turn on/dim to 10% (think "movie time" scene).
I purchased a computer interface for it, which is really the only way to do anything beyond the simple button-press-linking, and the best software I found to program it was Insteon Explorer. I wasn't willing to spend $150 for the Smarthome software to program 3 devices, so I can't say if it's better or not. Every time one device controls another, there are two links - one on each side. This means if you ever replace a device, not only do you have to reprogram the new device, but you also have to reprogram everything it controlled or was controlled by. This would be a HUGE pain with a keypad (8 buttons + integrated dimmer).
One thing that was relatively easy is integrating to PC. I was not able to actually activate "scenes" (this again, was easy with X10, but is now apparently not possible with Insteon), so I have to go device-by-device. Since I only have two main lighting circuits, it's not a huge deal. I use a Smarthome PLM and plmtools, and then small shell scripts that invoke plmtools for my various scenes. I can invoke the shell scripts in several ways:
- Using LIRC, from my Harmony remote. While watching Tv/movies, I have buttons that say "Bright", "Movie", etc.
- Using the XML interface on my Aastra IP phone. I have buttons programmed with scene names
- Using a small web site (running on a local server) I wrote using jQtouch, as well as a bookmark on my iPod touch, I can change scenes using my iPod. (also works on all smartphones/tablets).
I haven't tried the actual hardware yet, but the Simply Automated UBP stuff looks very appealing. They have the concept of a "base" switch, plus a faceplate - and there are face plates with various combinations of rockers/buttons.
The software looks amazing. You can basically set the entire system up completely offline, and then dump the programming to all devices. If I remember properly, switching a device was as easy as changing the address in the setup, then dumping programming again.
The individual options for what you could program was amazing: you could set up different physical buttons to be toggle, push buttons, rockers, single-button dimmers (hold to go up/down), one, two, or three-click buttons (different commands for each). You could then set commands to turn off, on, dim, activate a scene, etc. I think there were even timer buttons ("press the button, then 5 seconds later, turn off scene B").
I am considering a remodel of my kitchen, which would include some new lighting. I'm almost certain right now that I'll be using these switches to control the different lights (main, under cabinet, etc) from different entrances.
For lighting, I would go with one of the existing protocols/companies as mentioned above (there are many others as well, such as Zwave). You get a switch that is the dimmer circuitry, network interface, and human interface. You just won't be able to make something that quality yourself.
Using one of the existing home automation controllers is also not bad - it's like using a domain specific programming language. The common things to do in an automation system are timers, schedules, responding to events (motion sensor activated = turn on lights for x minutes, if it's currently dark outside but not past 12am). The commercial controllers let you set this up pretty easily. If you're doing it all yourself, you are more prone to bugs simply because you have to do more of the mundane stuff yourself, and you have more code.
I think there is a place for things like an Arduino though, for very specific, localized tasks, and have it integrate into the rest of your system if needed.
I'm of the mind I'd like to develop the UI for this myself (the existing systems are very expensive, and/or are not flexible enough so for example, I couldn't do the integration onto my Aastra phone with any off-the-shelf automation system), which means I need a way to control everything from a PC basically using the command-line (or some API). From there, I'd mix and match. Eg:
- SimplyAutomated stuff for all my lighting control,
- a standalone DSC alarm system that has a couple I/O interconnects to tell my computer its status, and let me arm/disarm
- An ardino programmed to run my pool filter and lights based on a motion sensor to detect how much the pool has been used.
I can then have a web UI that I can access on a PC, wall-mount touch screen, or iPod/Pad/blackberry that interfaces to all this stuff.
I know my first inclination as a programmer is to have one master controller that runs everything, but from an industrial control perspective, this is actually opposite of what you want. Decentralized, specialized systems are more reliable, and you're less likely that a single failure is going to be catastrophic (eg, my ardino pool controller could blow up, and my lighting and security will continue to be just fine). The centralized bit brings the systems together and provides oversight/interaction.
What you're looking for is home automation. X10 is probably the most popular technology system for this, but that Wikipedia page lists a number of alternatives.
To address your specific areas of interest:
LED lighting
There may be pre-built solutions out there, but as you're already writing custom software, you may want to look into using something like the Arduino platform to control your lights. Done correctly, you should be able to get the effects you're after. I found a tutorial about how to do a simple LED system that may be useful.
Speaker Control
There are actually a number of systems out there for home media distribution, such as Linux MCE (it took awhile to load that page when I wrote this, but it did load without timing out). You may be able to use one of these, or work some of the code in from one to duplicate the functionality (MCE is open source). The most simple solution is to use small appliance computers that run a very lightweight Linux solution (like MCE) that stream from the base computer. There are actual streaming devices out there, but I'm not sure how well they would integrate into your automation/control software. If you literally just want to run speakers, you'll need multiple sound cards in the base computer to differentiate between the feeds.
Automagical Applicances
This is where the home automation tech comes in. Using something like X10, you have the ability to flip switches, monitor their status, etc. There are appliances out there that will talk some of these languages, allowing you to control them remotely. A quick search turns up an Engadget article pointing out LG Thinq devices that are accessible via WiFi and ZigBee. If you program your software to speak ZigBee, you should be able to integrate these appliances. Given the number of different protocols out there, you'll probably want to find your devices, try to settle on devices that use one protocol, and then write your code to speak that protocol, but you can also work with multiple protocols if you don't mind developing for each. I believe Linux MCE supports a few of those languages, and since it's open source, you can expand it to support whatever you'd like.
Best Answer
There is an option that may work for you that you didn't list. If you're not using your home's phone lines, you can disconnect them from the utility and use them to carry the signal from a player (computer, mp3 player, etc) to each stereo. Then you can use apps like "Retune" or "Remote" to control the audio from your computer. I've done it in my house and I've never been happier.
If you can make the cables yourself, great. If not, you can purchase them at my Kickstarter site below.
http://www.kickstarter.com/projects/301091594/stereophone-a-multi-room-sound-system
Good Luck!