nest api заданная температура для обоих режимов термостата

Можно ли получить целевую температуру для обоих режимов термостата (охлаждение, нагрев) за один вызов? На данный момент у меня есть ощущение, что я могу получить целевую температуру для текущего режима термостата, а затем изменить режим термостата на второй и получить целевую температуру для второго режима термостата.

Также тот же вопрос об изменении целевого темпа. Можно ли одновременно изменить целевую температуру для режима нагрева и охлаждения?


person user1442611    schedule 07.10.2014    source источник


Ответы (2)


Предполагая, что ваша система может охлаждать и нагревать, термостат имеет 3 режима: нагрев, охлаждение, тепло-охлаждение.

Если вы находитесь в режиме нагрева или охлаждения, вы можете установить целевую_температуру. Если вы находитесь в режиме тепло-охлаждение, вы можете установить target_tempera_low_c и target_temperature_high_c.

Вы можете получить все заданные температуры за один вызов термостата:

https://developer-api.nest.com/devices/thermostats/$THERMOSTAT_ID?auth=$AUTH

Вы можете установить температуру тепло-охлаждение за один вызов, но вам нужно будет работать в режиме тепло-охлаждение:

{"target_temperature_low_c": 19, "target_temperature_high_c": 21}

Вы можете установить или холодную температуру за один вызов, но вам нужно будет перейти в режим тепла или охлаждения:

{"target_temperature_c": 20}

Вам нужно будет сделать 2 вызова, чтобы установить режим и установить температуру (и), если вы еще не находитесь в соответствующем режиме.

person thesimm    schedule 07.10.2014
comment
Все ясно, кроме получения всех целевых значений температуры. Я думаю, что я не могу получить за один вызов целевую температуру для режимов охлаждения и нагрева, верно? За один вызов я могу получить целевую температуру для текущего режима термостата плюс target_tempera_low_c и target_temperature_high_c, которые описывают режим нагрева - охлаждения. Вы согласны? - person user1442611; 08.10.2014
comment
Вы можете получить целевую температуру для режимов охлаждения и нагрева за один вызов, потому что это одно и то же: target_tempera_c. Неважно, в каком вы режиме. - person thesimm; 08.10.2014
comment
Я так не думаю. Target_tempera_c - это та же целевая температура, что и target_temperature_f, только в градусах Цельсия. - person user1442611; 08.10.2014
comment
Да это верно. Это целевая температура как для режима нагрева, так и режима охлаждения. - person thesimm; 08.10.2014

Можно получить все данные термостата даже для нескольких термостатов за один вызов API. Я только что опубликовал приложение с открытым исходным кодом, написанное на Python, которое делает это на BitBucket по адресу:

https://bitbucket.org/dwalton64_/window-watcher

Приложение просматривает метеорологические данные из метеорологических данных под землей, данные о качестве воздуха из airnow и данные из Nest, чтобы определить, должен ли пользователь открывать или закрывать окна. Я вызываю API-интерфейс Nest, получая все данные за один вызов, а затем анализирую данные в структуре. Затем приложение использует режим термостата hvac и заданную температуру, чтобы узнать, следует ли пользователю открывать окна.

Вот код Python, который я извлек из своего приложения:

nestUserUrl = "https://developer-api.nest.com/?auth=" + auth_token
nest_user_file = urllib2.urlopen(self.nestUserUrl)
nest_user_json = json.loads(nest_user_file.read())

# copy thermostat data out of the json from Nest
thermostat_data = []
for tstat_id in nest_user_json['devices']['thermostats']:
     thermostat_data.append(nest_user_json['devices']['thermostats'][tstat_id])

# create thermostat objects containing the thermostat data we want to access
thermostats = []
for tstat in thermostat_data:
    thermostats.append(
          NestThermostat(tstat['ambient_temperature_f'], tstat['device_id'],
                         tstat['hvac_mode'],
                         tstat['is_online'], tstat['last_connection'],
                         tstat['name'],
                         tstat['software_version'], tstat['structure_id'], 
                         tstat['target_temperature_f'],
                         tstat['target_temperature_high_f'],                       
                         tstat['target_temperature_low_f']))

class NestThermostat():
    def __init__(self, ambient_temperature_f, device_id, hvac_mode, is_online,
                 last_connection, name, software_version, structure_id,
                 target_temperature_f, target_temperature_high_f, target_temperature_low_f):
        self.ambient_temperature_f = ambient_temperature_f
        self.device_id = device_id
        self.hvac_mode = hvac_mode
        self.is_online = is_online
        self.last_connection = last_connection
        self.name = name
        self.software_version = software_version
        self.structure_id = structure_id
        self.target_temperature_f = target_temperature_f
        self.target_temperature_high_f = target_temperature_high_f
        self.target_temperature_low_f = target_temperature_low_f

    def print_current_temp_f(self):
        print("Thermostat " + self.name + " measures a current temperature of " + str(
            self.ambient_temperature_f) + " degrees F")

    def print_target_temp_f(self):
        print("Thermostat " + self.name + " is set to " + str(self.target_temperature_f) + " degrees F")

Когда у меня есть данные в объектах термостата, я могу использовать как режим отопления, вентиляции и кондиционирования воздуха, так и целевые температуры:

email = ""
for thermostat in thermostats:
    email += "For the thermostat " + thermostat.name + ":\n"
     if thermostat.hvac_mode == 'cool':
         if myWeather.temp_f < thermostat.target_temperature_f:
             open_windows = True
             email += " - It is cool outside (" + str(myWeather.temp_f) + " Deg F). \n"
         else:
             email += " - It is too hot outside to have the windows open. \n"
         email += " - Thermostat is set at " + str(thermostat.target_temperature_f) + \
                  " Deg F\n"

     if thermostat.hvac_mode == 'heat-cool':
         if thermostat.target_temperature_high_f > myWeather.temp_f > thermostat.target_temperature_low_f:
             open_windows = True
             email += " - Thermostat is set to heat-cool and it's comfortable out (" + \
                              str(myWeather.temp_f) + " Deg F). \n"
         elif myWeather.temp_f >= thermostat.target_temperature_high_f:
             email += " - The thermostat is set to heat-cool and it is hot outside (" + \
                      str(myWeather.temp_f) + " Deg F). \n"
         else:
             email += " - The thermostat is set to heat-cool & it is cold outside (" + \
                      str(myWeather.temp_f) + " Deg F). \n"
         email += " - The thermostat is set to cool at " + \
                  str(thermostat.target_temperature_high_f) + " Deg F\n"
         email += " - The thermostat is set to heat at " + \
                  str(thermostat.target_temperature_low_f) + " Deg F\n"

     if thermostat.hvac_mode == 'heat':
         if myWeather.temp_f > thermostat.target_temperature_f:
             open_windows = True
             email += " - The thermostat is set to heat and it is warm outside (" + \
                      str(myWeather.temp_f) + " Deg F). \n"
         else:
             email += " - The thermostat is set to heat and it is cool outside (" + \
                      str(myWeather.temp_f) + " Deg F). \n"
         email += " - Thermostat is set at " + str(thermostat.target_temperature_f) + \
                  " Deg F\n"

     email += "\n"

Обратите внимание, что целевая температура для режимов нагрева и охлаждения имеет одно и то же значение: target_tempera_f.

person dwalton64    schedule 28.10.2014