Nest Thermostat Review, Update #5

Update #6, Update #5, Update #4, Update #3, Update #2, Update #1, Install

I got my replacement Nest thermostat today via FedEx.

I was surprised to open the box and find a complete sealed package. Honestly, I expected they’d ship just the display and the base (as the support engineer hadn’t set any expectations, I apparently just made up my own!). But, I suppose at this point in the company, they just aren’t setup to ship just the two pieces. It has the unfortunate side effect of producing extra waste (as I can’t imagine that extra wall plates are going to come in handy anywhere). The little screw driver could be given away but the rest likely will end up in a landfill. I’ll ship them all of the unused parts back as I don’t want them – hopefully they don’t just trash them.

There’ve been some really awesome commenters in the past few days and I wanted to take a moment to highlight a few key comments.

From Curt:

I finally called Nest and spoke to a pleasant fellow. First off, it turns out the Nest does NOT anticipate a temperature set point. It will not turn on the furnace ahead of time. If you train it to go from the night setting of 60 to the daytime setting of 68 by turning it to 68 when you get up, it will always be 60 when you get up.

Wow, that’s a super disappointment. Honestly, I really thought it could do that.

Another from Curt:

It does not keep as steady a temperature as the primitive Honeywell round thermostat it replaced.

From Mark:

I’ve had my Nest for about 10 days. I would recommend waiting before buying one.

Kevin:

I’ve been considering replacing my Honeywell programmable t’stat with a Nest…but now I’m not so sure

David shares my disappointment regarding Nest Labs:

I would love to hear what NEST has to say about the variances…I would think they are monitoring these blogs…..If they are not…shame on them.

They seem to be way too quiet. They don’t seem to “get” social media.

And Matt provided a link to a very complete tear-down of the device:

Here is a good site that did a tear-down,lots of comments and people look like they really know what there talking about!

http://www.sparkfun.com/tutorials/334

GregN is still enthused about his Nest thermostat:

You guys are right in all the above posts. But to be honest, I’m happy with setting a schedule that warms the house before I get up in the morning, and saves energy overnight. Yes, I had that functionality at a lower price point before the Nest. But I didn’t have remote adjustments or the great looking hockey puck on my wall before.

Thanks again for all the comments! Keep them coming!image

I won’t replace the poorly functioning Nest thermostat for a few days with the new unit (as it’s a nuisance to adjust all of the schedules, move the units around, etc.).

Today, the system had again auto activated the “away” mode apparently, and then did not activate the normal evening schedule. So, our house was cold when we returned from work, even though it should have been warming for about a half hour. I just don’t understand this feature. I don’t understand why “away” isn’t triggered at night.

I could turn off learning, auto-away … leaving me with remote scheduling.

Update: January 11, 2012 => Something triggered the “auto-away” feature two days in a row now. I don’t understand why it happens. The part that’s annoying is that the schedule doesn’t run when this happens apparently, so we came home to a cold house (and tonight I thought to check before leaving from work to see if it had happened again).

A post not related to Nest thermostat hardware….

I typed in https://www.nest.com this evening and instead of the nice looking Nest.com web site, I got this:

SNAGHTML69c9dbf8

What?! I hadn’t actually noticed that I’d typed https at first, so I was a bit baffled for a moment. After closer investigation, Nest doesn’t have HTTPS apparently for their marketing/support web site setup on their Amazon CloudFront account (which is what cloudfront.net is).

They really should fix that. Smile

I was having some serious performance issues with their remote access web site earlier. It was barely usable.

That inspired me to dig a little to see what JavaScript libraries they might be using, the chatter on the network, etc. Here’s what I dug up.

JavaScript libraries:

  1. Jquery 1.7
  2. Raphael (for doing vector graphics using SVG or VML)
  3. Jquery UI
  4. eve.js (a “javascript events library”)
  5. jquery.ui.spinner
  6. iphone style checkboxes (or maybe a variation on this…it’s very similar)
  7. backbone.js
  8. underscore.js
  9. modernizer (1.6)
  10. jquery-animate-css-rotate
  11. jquery double tap plugin
  12. jquery form plugin
  13. jquery right click plugin
  14. jquery mouse wheel support

An interesting DIV and solution to a problem with web fonts (found on their main page):

<div id="digits">
  <!--  Some browsers suffer unfortunate lag the first time they
        draw text in fonts loaded over the network. We pre-render
        these digits to avoid this lag, and this gets removed at
        the same time the loading message is removed. -->
  1234567890
</div>

And a method for activating DEBUG mode:

N.DEBUG = ('False' == 'True') || (document.location.search.indexOf('debug') > -1) || (C.USERNAME.indexOf('@nestlabs.') > -1);

Thus, to activate DEBUG mode on your nest, simply navigate to here:

https://home.nest.com/home?debug

Brings up a slightly scary option for debugging. Be careful with this – I didn’t try ANY of the options, so it’s at your own risk.

image

Also, interestingly it adds a WEATHER tab:

image

Nest Thermostat Review, Update #4

Update #6, Update #5, Update #4, Update #3, Update #2, Update #1, Install

A bit more about my Nest thermostat experiences.

On the weekend, I spoke with a support engineer from Nest regarding the issue I was having with one of the Nest units failing to properly read the room temperature. I swapped one of the thermostats with a thermostat from a different floor in our house and then monitored the results over the weekend. I noticed the same problem in the new location: the thermostat would regularly read a temperature that was 3 to 4 degrees warmer than the actual room temperature. As it doesn’t consistently exhibit the problem, it makes heating a room to a comfortable temperature somewhat challenging (and now that it’s 19F outside, I’d like it if it was a bit more on the mark).

I spoke again with the same support engineer from Nest today (Mark). He called back as promised at the telephone number I left with him. He agreed that it was the thermostat that had a problem and decided to ship me a new one immediately (overnight). As today was an “observed” holiday for most shipping companies in the USA, the new thermostat won’t ship till tomorrow.

Interesting tidbit is that the base of the device apparently has a serial number that is tied to the display and that they both must be returned at the same time when shipping a defective unit back to Nest.

20111218-IMG_0136

When I arrived home this evening, my wife and I did our normal patterns. Go here, drop stuff off, etc. One of the places my wife walks nearly every evening takes her right by the Nest thermostat in a hallway on our first floor.

As we were sitting down for dinner about 30 minutes later I noted that the temperature seemed a bit cooler than normal in the kitchen so I walked over to the thermostat. “Auto away” had been activated. Arrgh. What’s odd (and annoying) is that the temperature should have been going to 69F starting at 5pm. At some point, it had decided that we were “away” and had never arrived home (I checked all of the schedules and everything seemed normal). I thought that there was some way to review the timings and choices it makes for that setting, but the “Energy” option on the thermostat reported “No data” for any of the recent days (I would have expected at least one day as I had moved the thermostat two days earlier).

UPDATE: Jan, 4, 2012: Ok the above happened AGAIN. I don’t know why I’d want AUTO AWAY to also DEACTIVATE the schedule? Seriously? Turn off learning. Turn off Auto-away. What’s left Nest?

So, I don’t know what to make of this new “feature.” Clearly, we were in the house and the auto away should have been deactivated by our presence (I thought?). We did not activate “away” mode manually either.

image

I definitely can’t give high marks to this product and wouldn’t recommend it right now. I know others are apparently having decent success, but until the kinks are worked out or they do a lot more explaining, I’d recommend anyone thinking about buying one to wait (maybe for v2 or a significant software upgrade).

If anyone from Nest is listening, please speak up!

(And anyone else with comments, questions, etc., feel free to leave them! I enjoy your comments and feedback and I know others are finding your comments very useful!)

I’ve created a new home for discussions about digital thermostats. Here’s a bit more information and here’s the site (digtstat.com). (And thanks for your help in getting it started!)

EzData for Ember.js

Previous post: Entity reference

I’ve been extending my original post (above) in an effort to create a simple entity system using Ember.js (SproutCore 2.0). While it’s grown in sophistication, it is far from complete. Smile

The project is now located on GitHub.

This is the introduction, from the readme on GitHub.

EmberJS – EZData

EZData is a library intended to a simple way of accessing data from a relational database when using Ember.js. It will never try to be everything to everyone. :) Instead, it’s intended to be small, efficient, and easy to learn and use javascript library.

The basic functionality is that it’s designed to manipulate individual entities (or Records), not a complex object structure that is often stored as JavaScript objects. This mirrors what’s found in many web systems today in the data model.

Right now, the project is brand new and quite in flux.

Essentials

Create types by calling Entity.define (instead of the typical Ember.Object.extend).

DemoApp.Person = Entity.define(Entity, "Person", {
    firstName:String,
    lastName:String,
    DOB:Date,

    fullName:function () {
        return this.get('lastName') + ", " + this.get('firstName');
    }.property('firstName', 'lastName')
});

This will create a new Class internally by using Ember.extend but it also does some other magic (e.g., creating a data store for all entities of a given type). First and foremost, by calling define, it’s expected that you’re mirroring a relational data structure of some sort which may have foreign key relationships to other tables.

In the example above, the Person entity is expected to have the following columns in a database table:

  • id => Number (from the basic Entity type)
  • firstName => String
  • lastName => String
  • DOB => DOB

Each property is assigned the basic data type that it will contain. The data type is used for linking and serialization.

Linking

The second example is a Gift:

DemoApp.Gift = Entity.define(Entity, "Gift", {
    from:DemoApp.Person
});

The Gift class is more interesting as one of the properties links to another type/Class (Person). As a direct connection to a Person as an object instance isn’t possible in traditional relational tables, some automatic linking occurs by declaring this linkage.

The from property is mapped to a second, hidden property that is only used for the foreign key relationship. By default, the hidden property will be calledfromPersonId. This can be overridden by creating a custom naming function, replacing the default stored atEntity.Settings.FOREIGN_KEY_GENERATOR_FUNCTION.

By making the linkage between the two types in the way demonstrated above, the standard Ember.js handlebar templating engine (and automatic value updating) features just work (see from.fullName below).

{{#each gifts}}
<tr>
    <td>
        {{ name }}
    </td>
    <td>
        {{ excitement }}
    </td>
    <td>
        {{ from.fullName }}
    </td>
</tr>

The fullName property of Person is a computed property, and continues to work as expected.

Getting the Data

If you want to retrieve a list from one of the data stores (or data tables), it’s a simple as calling the live function for one of the stores.

In the example below, there are two live collections. The first returns all of the gifts, and the second only returns gifts that have a lowercase letter o in the name.

// create some "live" connections to the data store
DemoApp.mainController.set('gifts', Entity.Stores.get(DemoApp.Gift).live());
// create a live connection with a filter (returns true if it contains the letter 'o')
DemoApp.mainController.set('giftsFiltered', Entity.Stores.get(DemoApp.Gift).live(
    function () {
        return this.get('name').indexOf('o') > -1;
    }));

To get access to one of the automatically created data stores, call Entity.Stores.get({Class}) where {Class} is the type that was created using thedefine method.

Notes / Cautions

Right now, all entities are required to have a property called id and be of type Number.