>> This is the most important piece of advice. You need to have a space that is for work and for work only. When you enter that space, it puts you in a work mindset.
I will parrot this a 2nd time.
When I was at University, I worked for a very small company that allowed me to set whatever hours I wanted as long as the work was completed. There were stretches where I didn't show my face in the office for 3 weeks at a time, because the building's physical location was a 45 minutes one-way drive. I worked from the computer lab, coffee shops, empty classrooms, the park, the cafeteria - basically everywhere on campus.
Then my son was born.
For the first month or two, I only went into the office when there were meetings. I didn't set up a place at home to be my office. "Who needs a home office; I have this sweet-ass gaming rig with 50 monitors! I'm gonna be the most productive guy in the world." As you can guess, that productivity lasted all of one day.
HN, Reddit, Facebook, Skype, sites like CodeEval, the StackExchange network - I had never been so distracted. I don't even regularly use Facebook, but because I had no one to answer to, it became a distraction. I started doing these short work sprints that last an hour. As retribution, I'd spend 2 hours screwing around. I'd fudge numbers on progress reports. I'd write code and do a rollback citing that a different method would be better suited to extend the application further down the road.
I used the Podomoro technique to reign myself in. 20-25 minute work stretches with 5 minutes of do whatever. That got me through roughly 10 days before the train was off the rails. I settled on working from a clean Linux partition in my wife's studio space. The need to have a true workspace when working remotely simply _cannot_ be understated.