I think your worst enemy when you work at home is distraction, and you should do everything you can to avoid confrontation with it. Here are some tips :
1) Have some space where the only thing you can do is work. Choose a room for that for example, with a specific computer, a specific environment, without anything which can make you think you can do something instead of working. Tidy it up perfectly. Don't ever try to do anything else inside.
2) Avoid to work at any time in the day, choose instead regular hours (like in an office), and try to respect them. Then, you will be more efficient, because you will have a limited time to work, which will reduce your temptation to procrastinate, and because you will be able to stop/relax/reload your batteries during the other amount of time. This is maybe the best advice I can give you. More generally, to be able to work efficiently at home is dependent of your hability to create good habits of working, and good habits of switching off.
3) Make the bad things to do more difficult to perform that the right ones. For example, going to the internet instead of working is bad. So, you may install Leechblock and block your prefered websites during day time, create a second OS partition on your computer and install on it only the software you need to work without any internet navigator, check your mails only at 6pm and let your clients know that etc. In the other side, if your to do list and, say Word or your developement IDE, appear automatically when your OS has been loaded, it will be easier for you to start than to do something else. This advice imply a lot of things you can do to improve your efficiency.
4) If it's sometimes difficult for you to know what to do next, you should use organisation tools like Things for Mac OS X, and read the famous book about GTD (getting things done), which gives you a few advices.
5) I have read a book
about entropy and "flow" recently, from Mihaly Csikszentmihalyi.