Turn switches on/off (lights, wall sockets, general relays, etc)
Read the status of on/off switches
Read analog samples (for example, temperature sensors)
"Program" switches based on analog samples/existing switches; for example program a relay to come on at 30C and go off at 25C thereby controlling the temperature
Similarly, program switches to go on/off at certain times
Record the samples of analog or digital inputs for a given time
I'd like to do the above using smartphone+bluetooth (for when I'm in the vicinity of the room), or smartdevice+WiFi (for when I'm in the house, somewhere), or even in a pinch, using HTTP to access a server at home from 600km away (which is what I'm willing to do). I'm definitely not willing to stream all my requests/data/responses through a third-party so third party cloud subscription solutions, even if free, are out of the question.
Finally (because I know the Slashdot crowd likes a challenge
Admittedly not at all sufficient, but it really should be a default.
"More software projects have gone awry for lack of calendar time than for all other causes combined." -- Fred Brooks, Jr., _The Mythical Man Month_