I had the Honeywell TH8000-series thermostat for about 10 years, and I really loved it - except it wasn't web-connected.
Over the summer, I replaced it with a Honeywell RTH9580WF, which is Wi-Fi connected, and has just about all the same features as the one it replaced (the interface is different, and it handles holds a bit differently, but I'm okay with those things).
Honeywell's web portal is okay, and it is much faster to change the weekly scheduling there than it is on the unit itself. The mobile app lets you do almost everything you can at the unit, too.
The one thing I felt I was missing, though, was the ability to schedule a "one-off" change to take place at some point in the future. I can make a change *now*, and have it stay until a specified time, but I can't tell it "keep running normally until 4 PM, and then set the A/C higher."
After poking around on the web a bit, I found someone who had written a Python script to do something similar to what I wanted. His script was making changes to the thermostat (sending commands by logging into the website and spoofing the web form that gets submitted), triggered by a button on his bedside. I used his code as a base to write an equivalent script in PHP, which can sent commands to make changes on the thermostat.
The next step was scheduling. I wanted to be able to use my Google Calendar to schedule a change, and have the thermostat change at the specified time. That was actually inspired by something I'd seen years ago to schedule X10 commands using the Google Calendar. At first, I tried writing a script that would parse my calendar every X minutes, and run the commands, but that wasn't working the way I wanted it to.
What I finally came up with was much simpler. My Google Calendar can be set to send an e-mail notification before (or at the start of) an event. I created a sub-calendar just for my thermostat, and I set up notifications to occur as the event was starting. The description of the event contained the commands for the thermostat (heat setting, A/C setting, fan, stop time, etc). I then created a rule in my Gmail to forward those calendar notifications from the Thermostat calendar to an address at my hosted domain, which is then piped to my script. The script parses the e-mail, finds the commands (does an error check to make sure that it is really a thermostat command e-mail, and not spam), and then sends the commands to the thermostat (still by spoofing a login to the Honeywell portal).
I can now set a "hold for the day" for days I'm not at work - without having to remember to do it that morning (or the night before). I can set the "wife is coming home from work early" settings, and my biggest reason - "pre-cool the house, and then turn off the A/C during the utility company's "peak savings" events.