Supa Posted December 2, 2011 Share Posted December 2, 2011 Here is an anonymized, wrapped, and indented dump of a Nest status with an example 2 setpoints a days schedule, but you can have as many as you want. The rules for schedule setpoints is use 15min(*60sec) increments, keep them an hour or more apart from each other (excluding continuations), and in ascending seconds in each day array. You could probably break these rules and the Nest would internally honor your unaligned or shortly spaced times, but the schedule interfaces view/edit code on the web, mobile app, or the nest might behave erratically since they follow these rules for UI spatial reasons. jQuery12345678901234567890_EPOCHTIMSTAMP({"status":200,"headers":{"X-nl-service-timestamp":EPOCHTIMSTAMP},"payload":{"structure":{"00guid00-for0-some-purp-pose12345678":{ "$version":-1234567890,"$timestamp":EPOCHTIMSTAMP, "location":"house name","street_address":"in tree","postal_code":"12345", "name":"The Nest","away":false,"creation_time":1234567890101, "devices":["device.NESTSERIALNUMBER"],"away_setter":0,"user":"user.1234","away_timestamp":EPOCHTIMSTAMP}},}, "link":{"NESTSERIALNUMBER":{"$version":1234567890,"$timestamp":EPOCHTIMSTAMP,"structure":"structure.00guid00-for0-some-purp-pose12345678"}},}, "schedule":{"NESTSERIALNUMBER":{"$version":1234567890,"$timestamp":EPOCHTIMSTAMP,"name":"The Nest Current Schedule", "days":{ "0":{"0":{"type":"HEAT","temp":16.778,"time":0,"entry_type":"continuation"},"1":{"type":"HEAT","temp":16.556,"time":12345,"entry_type":"setpoint"},"2":{"type":"HEAT","temp":16.667,"time":12345,"entry_type":"setpoint"}},}, "1":{"0":{"type":"HEAT","temp":16.778,"time":0,"entry_type":"continuation"},"1":{"type":"HEAT","temp":16.556,"time":12345,"entry_type":"setpoint"},"2":{"type":"HEAT","temp":16.667,"time":12345,"entry_type":"setpoint"}},}, "2":{"0":{"type":"HEAT","temp":16.778,"time":0,"entry_type":"continuation"},"1":{"type":"HEAT","temp":16.556,"time":12345,"entry_type":"setpoint"},"2":{"type":"HEAT","temp":16.667,"time":12345,"entry_type":"setpoint"}},}, "3":{"0":{"type":"HEAT","temp":16.778,"time":0,"entry_type":"continuation"},"1":{"type":"HEAT","temp":16.556,"time":12345,"entry_type":"setpoint"},"2":{"type":"HEAT","temp":16.667,"time":12345,"entry_type":"setpoint"}},}, "4":{"0":{"type":"HEAT","temp":16.778,"time":0,"entry_type":"continuation"},"1":{"type":"HEAT","temp":16.556,"time":12345,"entry_type":"setpoint"},"2":{"type":"HEAT","temp":16.667,"time":12345,"entry_type":"setpoint"}},}, "5":{"0":{"type":"HEAT","temp":16.778,"time":0,"entry_type":"continuation"},"1":{"type":"HEAT","temp":16.556,"time":12345,"entry_type":"setpoint"},"2":{"type":"HEAT","temp":16.667,"time":12345,"entry_type":"setpoint"}},}, "6":{"0":{"type":"HEAT","temp":16.778,"time":0,"entry_type":"continuation"},"1":{"type":"HEAT","temp":16.556,"time":12345,"entry_type":"setpoint"},"2":{"type":"HEAT","temp":16.667,"time":12345,"entry_type":"setpoint"}}}}},}, "user_alert_dialog":{"1234":{"$version":-123456789,"$timestamp":EPOCHTIMSTAMP,"dialog_id":"confirm-pairing","dialog_data":""}},}, "shared":{"NESTSERIALNUMBER":{"$version":1234567890,"$timestamp":EPOCHTIMSTAMP,"hvac_fan_state":false,"target_temperature_low":16.12345,"hvac_ac_state":false,"can_cool":true,"auto_away":0,"compressor_lockout_enabled":false, "name":"The Nest","target_temperature_high":16.12345,"compressor_lockout_timeout":0,"current_temperature":16.5,"target_change_pending":false,"target_temperature":16.12345, "hvac_heater_state":false,"hvac_aux_heater_state":false,"can_heat":true,"target_temperature_type":"heat"}},}, "metadata":{"NESTSERIALNUMBER":{"$version":123456789,"$timestamp":EPOCHTIMSTAMP,"last_ip":"ip.add.res.s","last_connection":EPOCHTIMSTAMP}},}, "track":{"NESTSERIALNUMBER":{"$version":-123456789,"$timestamp":EPOCHTIMSTAMP,"online":true,"last_connection":EPOCHTIMSTAMP,"last_ip":"ip.add.res.s"}},}, "user":{"1234":{"$version":123456789,"$timestamp":EPOCHTIMSTAMP,"name":"account.email.addy@home.nest.com","structures":["structure.00guid00-for0-some-purp-pose12345678"]}},}, "device":{"NESTSERIALNUMBER":{"$version":-123456789,"$timestamp":EPOCHTIMSTAMP,"backplate_mono_version":"#.#.#","creation_time":EPOCHTIMSTAMP,"backplate_mono_info":"TFE (BP_DVT) #.#.# (ehs@ubuntu) 1234-01-01 01:01:01", "switch_preconditioning_control":false,"click_sound":"on","leaf":false,"user_brightness":"auto","away_temperature_high":16.12345,"postal_code":"12345","away_temperature_low":16.12345, "current_version":"1.x.x","temperature_lock":false,"model_version":"Diamond-1.xx","current_humidity":50,"hvac_wires":"Heat,Cool,Fan,Rc","backplate_bsl_info":"BSL","auto_away_enable":true, "backplate_serial_number":"BACKPLATESNUMBER","fan_mode":"auto","time_to_target":0,"range_enable":false,"temperature_scale":"F","learning_time":0,"hvac_pins":"W1,Y1,Rc,G", "backplate_bsl_version":"#.#.#,"range_mode":false,"has_fan":true,"target_time_confidence":0.0,"mac_address":"MACADDRESS","switch_system_off":false,"battery_level":3.866,"learning_mode":false, "serial_number":"NESTSERIALNUMBER","local_ip":"ip.add.res.s","type":"TBD","learning_state":"initial"}}}}) Link to comment Share on other sites More sharing options...
Supa Posted December 3, 2011 Share Posted December 3, 2011 Chris at Chili Technologies in NYC wrote a Nest ruby plugin for the SiriProxy to read current temp and read/set target temp.It's based on sniffing the iPhone app traffic and has some Siri say feedback, but its a great starting point for a C4 plugin.https://github.com/chilitechno/SiriProxy-NestLearningThermostat/blob/master/lib/siriproxy-nestlearningthermostat.rb Link to comment Share on other sites More sharing options...
Supa Posted December 4, 2011 Share Posted December 4, 2011 Ok so here is a port of the Siri Nest code to a stand alone ruby script that uses Mac OSX to speak the results.This is all working for me in Lion 10.7.2. You will need to install json and httparty extensions for ruby firstIn terminalsudo gem install httpartysudo gem install jsoncreate this file with your nest account email and password/usr/local/bin/nest#!/usr/bin/env rubyrequire 'rubygems'require 'httparty'require 'json'#>remove lines inbetween comments for non osx systemsrequire 'osx/cocoa'include OSX#>these are just to enable a native osx text to speech say#do a command line argARGV.each do|ab| num = ab.to_i # change user/pass to your nest account mynest = Nest.new('your.account@nest', 'yourpassword') if num > 49 and num < 86 mynest.set_temp("#{ab}") elsif ab == 'home' mynest.set_away_or_home('home') elsif ab == 'away' mynest.set_away_or_home('away') else mynest.get_status endendclass Nest attr_accessor :nest_email attr_accessor :nest_password attr_accessor :debug def initialize(u, p) @nest_email = u @nest_password = p @debug = false end def say(str) puts str #>remove lines inbetween comments for non osx systems str.gsub!(/"/, '\"') # Put backslash before quotes src = %(say "#{str}") script = NSAppleScript.alloc.initWithSource(src) script.executeAndReturnError(nil) #>these are just to enable a native osx text to speech say end def login_to_nest loginRequest = HTTParty.post('https://home.nest.com/user/login',:body => { :username => nest_email, :password => nest_password }, :headers => { 'User-Agent' => 'Nest/1.1.0.10 CFNetwork/548.0.4' }) authResult = JSON.parse(loginRequest.body) rescue nil if authResult if debug puts authResult end end return authResult end def get_nest_status(access_token, user_id, transport_url) transport_host = transport_url.split('/')[2] statusRequest = HTTParty.get(transport_url + '/v2/mobile/user.' + user_id, :headers => { 'Host' => transport_host, 'User-Agent' => 'Nest/1.1.0.10 CFNetwork/548.0.4','Authorization' => 'Basic ' + access_token, 'X-nl-user-id' => user_id, 'X-nl-protocol-version' => '1', 'Accept-Language' => 'en-us', 'Connection' => 'keep-alive', 'Accept' => '*/*'}) rescue nil statusResult = JSON.parse(statusRequest.body) rescue nil if statusResult if debug puts statusResult end end return statusResult end def get_status #say "Checking the status of the Nest." #Thread.new { authResult = login_to_nest if authResult access_token = authResult["access_token"] user_id = authResult["userid"] transport_url = authResult["urls"]["transport_url"] statusResult = get_nest_status(access_token, user_id, transport_url) if statusResult structure_id = statusResult["user"][user_id]["structures"][0].split('.')[1] if statusResult["structure"][structure_id]["away"] say "The Nest is currently set to away." else device_serial_id = statusResult["structure"][structure_id]["devices"][0].split('.')[1] # devices element could contain multiple serial_numbers if multiple thermostats associated to nest account. # serial number is something like 01AB23CD456789EF current_temp = (statusResult["shared"][device_serial_id]["current_temperature"] * 1.8) + 32 current_temp = current_temp.round target_temp = (statusResult["shared"][device_serial_id]["target_temperature"] * 1.8) + 32 target_temp = target_temp.round thermostat_name = statusResult["shared"][device_serial_id]["name"] thetime = statusResult["shared"][device_serial_id]["$timestamp"] time_to_target = statusResult["device"][device_serial_id]["time_to_target"] if debug puts time_to_target puts thetime end if time_to_target > 0 time_estimate = (time_to_target - (thetime/1000))/60 time_estimate = time_estimate.round say "The current temperature is #{current_temp} degrees, #{thermostat_name} is set to #{target_temp} degrees and will reach it in #{time_estimate} minutes" else say "The #{thermostat_name} is set to #{target_temp} degrees and the current temperature is #{current_temp} degrees." end end else say "Sorry, I couldn't understand the response from Nest.com" end else say "Sorry, I couldn't connect to Nest.com." end #request_completed #always complete your request! Otherwise the phone will "spin" at the user! #} end def set_away_or_home(home_away) # away / home operate on structure IDs - presumably a structure is a collection of devices #say "One moment while I set the Nest to " + home_away + "." # Thread.new { authResult = login_to_nest if authResult access_token = authResult["access_token"] user_id = authResult["userid"] transport_url = authResult["urls"]["transport_url"] transport_host = transport_url.split('/')[2] statusResult = get_nest_status(access_token, user_id, transport_url) if statusResult structure_id = statusResult["user"][user_id]["structures"][0].split('.')[1] time_since_epoch = Time.now.to_i payload = '' if home_away == 'away' payload = '{"away_timestamp":' + "#{time_since_epoch}" + ',"away":true,"away_setter":0}' else payload = '{"away_timestamp":' + "#{time_since_epoch}" + ',"away":false,"away_setter":0}' end begin awayRequest = HTTParty.post(transport_url + '/v2/put/structure.' + structure_id, :body => payload, :headers => { 'Host' => transport_host, 'User-Agent' => 'Nest/1.1.0.10 C.10 CFNetwork/548.0.4', 'Authorization' => 'Basic ' + access_token, 'X-nl-protocol-version' => '1'}) if debug puts awayRequest.body end rescue puts 'error: ' end if awayRequest.code == 200 say "Ok, I set the Nest to " + home_away + "." else say "Sorry, I couldn't set the Nest to " + home_away + "." end else say "Sorry, I couldn't understand the response from Nest.com" end end #request_completed #always complete your request! Otherwise the phone will "spin" at the user! #} end def set_temp(temp) #say "One moment while I set the Nest to #{temp} degrees." #Thread.new { authResult = login_to_nest if authResult access_token = authResult["access_token"] user_id = authResult["userid"] transport_url = authResult["urls"]["transport_url"] transport_host = transport_url.split('/')[2] statusResult = get_nest_status(access_token, user_id, transport_url) if statusResult structure_id = statusResult["user"][user_id]["structures"][0].split('.')[1] device_serial_id = statusResult["structure"][structure_id]["devices"][0].split('.')[1] version_id = statusResult["shared"][device_serial_id]["$version"] current_temp = (statusResult["shared"][device_serial_id]["current_temperature"] * 1.8) + 32 current_temp = current_temp.round thermostat_name = statusResult["shared"][device_serial_id]["name"] target_temp_celsius = (temp.to_f - 32.0) / 1.8 target_temp_celsius = sprintf "%.5f", target_temp_celsius payload = '{"target_change_pending":true,"target_temperature":' + "#{target_temp_celsius}" + '}' if debug puts payload puts device_serial_id puts version_id puts 'POST ' + transport_url + '/v2/put/shared.' + device_serial_id end begin tempRequest = HTTParty.post(transport_url + '/v2/put/shared.' + device_serial_id, :body => payload, :headers => { 'Host' => transport_host, 'User-Agent' => 'Nest/1.1.0.10 C.10 CFNetwork/548.0.4', 'Authorization' => 'Basic ' + access_token, 'X-nl-protocol-version' => '1'}) rescue puts 'error: ' end if debug puts "continuing" puts tempRequest.code puts tempRequest.body end if tempRequest.code == 200 say "Ok, I set the #{thermostat_name} Nest to #{temp} degrees. The current temperature is #{current_temp} degrees." else say "Sorry, I couldn't set the temperature on the Nest." end else say "Sorry, I couldn't understand the response from Nest.com" end else say "Sorry, I couldn't connect to Nest.com." end #request_completed #always complete your request! Otherwise the phone will "spin" at the user! #} end endTo run in terminal do#make nest script executablesudo chmod +x /usr/local/bin/nest#get nest statususer$ nest statusThe current temperature is 66 degrees, The Nest is set to 68 degrees and will reach it in 21 minutes#set nest awayuser$ nest awayOk, I set the Nest to away.#set nest homeuser$ nest homeOk, I set the Nest to home.#set nest tempuser$ nest 69Ok, I set the The Nest to 69 degrees. The current temperature is 67 degrees. Link to comment Share on other sites More sharing options...
c44me Posted December 6, 2011 Share Posted December 6, 2011 uh, Ryan you maybe want to hire this guy ^^^^^ or something?! Link to comment Share on other sites More sharing options...
RyanE Posted December 6, 2011 Share Posted December 6, 2011 Heh. I've seen worse applicants, that's for sure...RyanE Link to comment Share on other sites More sharing options...
c44me Posted December 6, 2011 Share Posted December 6, 2011 looks like BGR picked it up:http://www.bgr.com/2011/12/06/nest-learning-thermostat-hands-on-and-installation/ Link to comment Share on other sites More sharing options...
Kahn Posted December 6, 2011 Share Posted December 6, 2011 Well....understanding there is no relationship between C4 and Nest, looks as if the curious are finding there way! Speaking for myself, I would most eagerly welcome an unsupported (yet working) installation! Link to comment Share on other sites More sharing options...
dgbrown Posted December 6, 2011 Share Posted December 6, 2011 Great post !Ok so here is a port of the Siri Nest code to a stand alone ruby script that uses Mac OSX to speak the results.This is all working for me in Lion 10.7.2. You will need to install json and httparty extensions for ruby firstIn terminalsudo gem install httpartysudo gem install jsoncreate this file with your nest account email and password/usr/local/bin/nest#!/usr/bin/env rubyrequire 'rubygems'require 'httparty'require 'json'#>remove lines inbetween comments for non osx systemsrequire 'osx/cocoa'include OSX#>these are just to enable a native osx text to speech say#do a command line argARGV.each do|ab| num = ab.to_i # change user/pass to your nest account mynest = Nest.new('your.account@nest', 'yourpassword') if num > 49 and num < 86 mynest.set_temp("#{ab}") elsif ab == 'home' mynest.set_away_or_home('home') elsif ab == 'away' mynest.set_away_or_home('away') else mynest.get_status endendclass Nest attr_accessor :nest_email attr_accessor :nest_password attr_accessor :debug def initialize(u, p) @nest_email = u @nest_password = p @debug = false end def say(str) puts str #>remove lines inbetween comments for non osx systems str.gsub!(/"/, '\"') # Put backslash before quotes src = %(say "#{str}") script = NSAppleScript.alloc.initWithSource(src) script.executeAndReturnError(nil) #>these are just to enable a native osx text to speech say end def login_to_nest loginRequest = HTTParty.post('https://home.nest.com/user/login',:body => { :username => nest_email, :password => nest_password }, :headers => { 'User-Agent' => 'Nest/1.1.0.10 CFNetwork/548.0.4' }) authResult = JSON.parse(loginRequest.body) rescue nil if authResult if debug puts authResult end end return authResult end def get_nest_status(access_token, user_id, transport_url) transport_host = transport_url.split('/')[2] statusRequest = HTTParty.get(transport_url + '/v2/mobile/user.' + user_id, :headers => { 'Host' => transport_host, 'User-Agent' => 'Nest/1.1.0.10 CFNetwork/548.0.4','Authorization' => 'Basic ' + access_token, 'X-nl-user-id' => user_id, 'X-nl-protocol-version' => '1', 'Accept-Language' => 'en-us', 'Connection' => 'keep-alive', 'Accept' => '*/*'}) rescue nil statusResult = JSON.parse(statusRequest.body) rescue nil if statusResult if debug puts statusResult end end return statusResult end def get_status #say "Checking the status of the Nest." #Thread.new { authResult = login_to_nest if authResult access_token = authResult["access_token"] user_id = authResult["userid"] transport_url = authResult["urls"]["transport_url"] statusResult = get_nest_status(access_token, user_id, transport_url) if statusResult structure_id = statusResult["user"][user_id]["structures"][0].split('.')[1] if statusResult["structure"][structure_id]["away"] say "The Nest is currently set to away." else device_serial_id = statusResult["structure"][structure_id]["devices"][0].split('.')[1] # devices element could contain multiple serial_numbers if multiple thermostats associated to nest account. # serial number is something like 01AB23CD456789EF current_temp = (statusResult["shared"][device_serial_id]["current_temperature"] * 1.8) + 32 current_temp = current_temp.round target_temp = (statusResult["shared"][device_serial_id]["target_temperature"] * 1.8) + 32 target_temp = target_temp.round thermostat_name = statusResult["shared"][device_serial_id]["name"] thetime = statusResult["shared"][device_serial_id]["$timestamp"] time_to_target = statusResult["device"][device_serial_id]["time_to_target"] if debug puts time_to_target puts thetime end if time_to_target > 0 time_estimate = (time_to_target - (thetime/1000))/60 time_estimate = time_estimate.round say "The current temperature is #{current_temp} degrees, #{thermostat_name} is set to #{target_temp} degrees and will reach it in #{time_estimate} minutes" else say "The #{thermostat_name} is set to #{target_temp} degrees and the current temperature is #{current_temp} degrees." end end else say "Sorry, I couldn't understand the response from Nest.com" end else say "Sorry, I couldn't connect to Nest.com." end #request_completed #always complete your request! Otherwise the phone will "spin" at the user! #} end def set_away_or_home(home_away) # away / home operate on structure IDs - presumably a structure is a collection of devices #say "One moment while I set the Nest to " + home_away + "." # Thread.new { authResult = login_to_nest if authResult access_token = authResult["access_token"] user_id = authResult["userid"] transport_url = authResult["urls"]["transport_url"] transport_host = transport_url.split('/')[2] statusResult = get_nest_status(access_token, user_id, transport_url) if statusResult structure_id = statusResult["user"][user_id]["structures"][0].split('.')[1] time_since_epoch = Time.now.to_i payload = '' if home_away == 'away' payload = '{"away_timestamp":' + "#{time_since_epoch}" + ',"away":true,"away_setter":0}' else payload = '{"away_timestamp":' + "#{time_since_epoch}" + ',"away":false,"away_setter":0}' end begin awayRequest = HTTParty.post(transport_url + '/v2/put/structure.' + structure_id, :body => payload, :headers => { 'Host' => transport_host, 'User-Agent' => 'Nest/1.1.0.10 C.10 CFNetwork/548.0.4', 'Authorization' => 'Basic ' + access_token, 'X-nl-protocol-version' => '1'}) if debug puts awayRequest.body end rescue puts 'error: ' end if awayRequest.code == 200 say "Ok, I set the Nest to " + home_away + "." else say "Sorry, I couldn't set the Nest to " + home_away + "." end else say "Sorry, I couldn't understand the response from Nest.com" end end #request_completed #always complete your request! Otherwise the phone will "spin" at the user! #} end def set_temp(temp) #say "One moment while I set the Nest to #{temp} degrees." #Thread.new { authResult = login_to_nest if authResult access_token = authResult["access_token"] user_id = authResult["userid"] transport_url = authResult["urls"]["transport_url"] transport_host = transport_url.split('/')[2] statusResult = get_nest_status(access_token, user_id, transport_url) if statusResult structure_id = statusResult["user"][user_id]["structures"][0].split('.')[1] device_serial_id = statusResult["structure"][structure_id]["devices"][0].split('.')[1] version_id = statusResult["shared"][device_serial_id]["$version"] current_temp = (statusResult["shared"][device_serial_id]["current_temperature"] * 1.8) + 32 current_temp = current_temp.round thermostat_name = statusResult["shared"][device_serial_id]["name"] target_temp_celsius = (temp.to_f - 32.0) / 1.8 target_temp_celsius = sprintf "%.5f", target_temp_celsius payload = '{"target_change_pending":true,"target_temperature":' + "#{target_temp_celsius}" + '}' if debug puts payload puts device_serial_id puts version_id puts 'POST ' + transport_url + '/v2/put/shared.' + device_serial_id end begin tempRequest = HTTParty.post(transport_url + '/v2/put/shared.' + device_serial_id, :body => payload, :headers => { 'Host' => transport_host, 'User-Agent' => 'Nest/1.1.0.10 C.10 CFNetwork/548.0.4', 'Authorization' => 'Basic ' + access_token, 'X-nl-protocol-version' => '1'}) rescue puts 'error: ' end if debug puts "continuing" puts tempRequest.code puts tempRequest.body end if tempRequest.code == 200 say "Ok, I set the #{thermostat_name} Nest to #{temp} degrees. The current temperature is #{current_temp} degrees." else say "Sorry, I couldn't set the temperature on the Nest." end else say "Sorry, I couldn't understand the response from Nest.com" end else say "Sorry, I couldn't connect to Nest.com." end #request_completed #always complete your request! Otherwise the phone will "spin" at the user! #} end endTo run in terminal do#make nest script executablesudo chmod +x /usr/local/bin/nest#get nest statususer$ nest statusThe current temperature is 66 degrees, The Nest is set to 68 degrees and will reach it in 21 minutes#set nest awayuser$ nest awayOk, I set the Nest to away.#set nest homeuser$ nest homeOk, I set the Nest to home.#set nest tempuser$ nest 69Ok, I set the The Nest to 69 degrees. The current temperature is 67 degrees. Link to comment Share on other sites More sharing options...
Supa Posted December 6, 2011 Share Posted December 6, 2011 Heh. I've seen worse applicants, that's for sure...Sadly I have got too much on my full time plate already this xmas to even consider notions like that. With 5000 users, 4000 mobiles, 1000 desktops, 500 switches, 200 waps, 100 mobile home servers, 50tb sans, 25 web sites, 15 buildings, 10 hs22v blade vmware hosts, 2 sonic e6500 uplinks doves, and iSeries in a pear tree. I do play on the side with what I find interesting new tech and code integrations between them, but I don't have any C4 gear.Anyway back to the nest, the more difficult code to make the nest truly an open platform has yet be written. The schedule editor and finding a way to gather energy statistics from the device for custom visualizations. Link to comment Share on other sites More sharing options...
RyanE Posted December 6, 2011 Share Posted December 6, 2011 I've written a thermostat driver to a thermostat that was HTTP controlled.It could probably be done for the Nest as well.That said, it's more likely a dealer or driver partner will do it, as Control4 probably wouldn't without support from Nest.RyanE Link to comment Share on other sites More sharing options...
c44me Posted December 7, 2011 Share Posted December 7, 2011 what about with support from your customers??? I'd gladly pay for this. I am sure others would as well in a heart beat. Link to comment Share on other sites More sharing options...
well_armed Posted December 7, 2011 Share Posted December 7, 2011 Awesome business model, making your business customers pay for 3rd party integration of devices. Link to comment Share on other sites More sharing options...
RyanE Posted December 7, 2011 Share Posted December 7, 2011 Control4 has provided (and will continue to provide) thousands of drivers for free.You're criticizing because Control4 isn't currently making a driver for a 3rd-party product that was just released, that doesn't have an official API? A 3rd-party that could change the interface method (HTTP) at any time, so the driver could possibly just break for no apparent reason?Wow, you're pretty fast on the trigger finger there, slick.RyanE Link to comment Share on other sites More sharing options...
well_armed Posted December 8, 2011 Share Posted December 8, 2011 Don't get your pants in a bunch...it was more of a dig at the lack of developers who support C4 not C4's own driver development. Link to comment Share on other sites More sharing options...
c44me Posted December 22, 2011 Share Posted December 22, 2011 tear downhttp://techcrunch.com/2011/12/22/nest-arm-zigbee/ Link to comment Share on other sites More sharing options...
shobr22 Posted March 8, 2012 Share Posted March 8, 2012 HouseLogix is currently writing a Control4 driver for the Nest Thermostat. Version 1 is about 75% complete. HouseLogix has developed drivers for a variety of devices and systems such as Lutron RadioRA 2. Link to comment Share on other sites More sharing options...
c44me Posted March 9, 2012 Share Posted March 9, 2012 HouseLogix is currently writing a Control4 driver for the Nest Thermostat. Version 1 is about 75% complete. HouseLogix has developed drivers for a variety of devices and systems such as Lutron RadioRA 2.awesome! please post when its available? have a target date? Link to comment Share on other sites More sharing options...
CFUG Posted March 9, 2012 Share Posted March 9, 2012 I'm going to change my tune about the Control4 stat. I have worked on an algorithm that uses CA relay T sensors to talk back to the thermostat. It's taken a few months of billing to see the savings in gas from the programming but it's there. More importantly, to the family, is better climate control where it is needed. The nice thing about all of this is freedom to place the CA relays anywhere they work best (out of drafty areas, next to seating, etc.). Aside from Nest, I already own C4 stats and the programming tools are already there. No reason to move away from Control4. Link to comment Share on other sites More sharing options...
Loki Posted March 10, 2012 Share Posted March 10, 2012 Controlfouruserguy,Can you please explain the algorithm you used?Thanks,Tony Link to comment Share on other sites More sharing options...
CFUG Posted March 11, 2012 Share Posted March 11, 2012 Not really an algo in the sense of something proprietary or black-box-ish. It depends on how screwed-up the airflow is around the wall stat and cold-air infiltration situation in the living space. T averaging was the worst of it since there is no utility within CHE to do this. Also, many conditions exist that could change or modify the "automatic" operation portion of the routine.I didn't think anyone was interested when I opened a thread about this but I could post something on C4DYI. Link to comment Share on other sites More sharing options...
ILoveC4 Posted March 11, 2012 Share Posted March 11, 2012 I didn't think anyone was interested when I opened a thread about this but I could post something on C4DYI.Shoot me an email and we'll make this happen. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.