thehesiod / carrier-infinity-evolution

Carrier Infinity/Evolution System Python API
Apache License 2.0
2 stars 2 forks source link

Key and Secret #1

Open ericreich opened 1 year ago

ericreich commented 1 year ago

I am not familiar with your Hints to find they key and secret. I can login to Carrier's/Bryant's Site... Can you provide more hints?

kskenyon commented 1 year ago

curl https://www.myinfinitytouch.carrier.com/static/js/config.ts |grep consumer

Can't find either key there either.

thehesiod commented 1 year ago

open chrome developer console, login to carrier infinity, in developer section click "Sources" tab, navigate in sources tab to top/www.myinfinitytouch.carrier.com/static/js/config.ts (second) put breakpoint on any line in infinityConfig, click refresh page, it should hit your breakpoint, then in your "Scope" debugger window it should show the variables in infinityConfig

gnuite commented 1 year ago

This is how I found it:

  1. Open chrome developer console and go to the Network tab.
  2. Navigate to https://www.myinfinitytouch.carrier.com/login.
  3. In the Response tab for main.[some-key].chunk.js, search (ctrl-F) for consumerKey. Same for consumerSecret.

You don't even need to log in. Those are the right variables, right?

thehesiod commented 1 year ago

This is how I found it:

  1. Open chrome developer console and go to the Network tab.
  2. Navigate to https://www.myinfinitytouch.carrier.com/login.
  3. In the Response tab for main.[some-key].chunk.js, search (ctrl-F) for consumerKey. Same for consumerSecret.

You don't even need to log in. Those are the right variables, right?

wow really? hah. let me know if you get it to work. it's working for me

kskenyon commented 1 year ago

Got it sorted and it seems to be working, sort of:

{'energy': {'$': {'version': '1.48', 'xmlns:atom': 'http://www.w3.org/2005/Atom'}, 'atom:link': [{'$': {'href': 'https://www.app-api.ing.carrier.com/systems/2514W003792/energy', 'rel': 'self'}}, {'$': {'href': 'https://www.app-api.ing.carrier.com/systems/2514W003792', 'rel': 'http://www.api.ing.carrier.com/rels/system'}}], 'cooling': {'$': {'display': 'on', 'enabled': 'on'}}, 'cost': {'period': [{'$': {'id': 'day1'}, 'cooling': '0.0000', 'eheat': '0.0000', 'fan': '0.0000', 'fangas': '0.0000', 'gas': '1.1400', 'hpheat': '0.0000', 'looppump': '0.0000', 'reheat': '0.0000'}, {'$': {'id': 'day2'}, 'cooling': '0.0000', 'eheat': '0.0000', 'fan': '0.0000', 'fangas': '0.0000', 'gas': '1.4900', 'hpheat': '0.0000', 'looppump': '0.0000', 'reheat': '0.0000'}, {'$': {'id': 'month1'}, 'cooling': '0.0000', 'eheat': '0.0000', 'fan': '0.0000', 'fangas': '0.0000', 'gas': '78.8000', 'hpheat': '0.0000', 'looppump': '0.0000', 'reheat': '0.0000'}, {'$': {'id': 'month2'}, 'cooling': '0.0000', 'eheat': '0.0000', 'fan': '0.0000', 'fangas': '0.0000', 'gas': '95.8000', 'hpheat': '0.0000', 'looppump': '0.0000', 'reheat': '0.0000'}, {'$': {'id': 'year1'}, 'cooling': '0.0000', 'eheat': '0.0000', 'fan': '0.0000', 'fangas': '0.0000', 'gas': '187.0000', 'hpheat': '0.0000', 'looppump': '0.0000', 'reheat': '0.0000'}, {'$': {'id': 'year2'}, 'cooling': '122.0000', 'eheat': '0.0000', 'fan': '10.0000', 'fangas': '0.0000', 'gas': '505.0000', 'hpheat': '0.0000', 'looppump': '0.0000', 'reheat': '0.0000'}]}, 'eheat': {'$': {'display': 'off', 'enabled': 'on'}}, 'fan': {'$': {'display': 'on', 'enabled': 'on'}}, 'fangas': {'$': {'display': 'on', 'enabled': 'on'}}, 'gas': {'$': {'display': 'on', 'enabled': 'on'}}, 'hpheat': {'$': {'display': 'off', 'enabled': 'off'}}, 'hspf': 8.8, 'looppump': {'$': {'display': 'off', 'enabled': 'off'}}, 'reheat': {'$': {'display': 'off', 'enabled': 'on'}}, 'seer': 15, 'timestamp': '2023-03-07T05:06:18.691Z', 'usage': {'period': [{'$': {'id': 'day1'}, 'cooling': '0', 'eheat': '0', 'fan': '0', 'fangas': '0', 'gas': '142', 'hpheat': '0', 'looppump': '0', 'reheat': '0'}, {'$': {'id': 'day2'}, 'cooling': '0', 'eheat': '0', 'fan': '0', 'fangas': '0', 'gas': '187', 'hpheat': '0', 'looppump': '0', 'reheat': '0'}, {'$': {'id': 'month1'}, 'cooling': '0', 'eheat': '0', 'fan': '0', 'fangas': '0', 'gas': '9819', 'hpheat': '0', 'looppump': '0', 'reheat': '0'}, {'$': {'id': 'month2'}, 'cooling': '0', 'eheat': '0', 'fan': '0', 'fangas': '0', 'gas': '11952', 'hpheat': '0', 'looppump': '0', 'reheat': '0'}, {'$': {'id': 'year1'}, 'cooling': '0', 'eheat': '0', 'fan': '0', 'fangas': '0', 'gas': '23237', 'hpheat': '0', 'looppump': '0', 'reheat': '0'}, {'$': {'id': 'year2'}, 'cooling': '939', 'eheat': '0', 'fan': '85', 'fangas': '0', 'gas': '63019', 'hpheat': '0', 'looppump': '0', 'reheat': '0'}]}}} Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp... Adding temp...

Don't see a default db_path but it's not required. Can't find anything it has been writing.

It doesn't seem to be getting the idu_status. Am I missing something? Carrier Home app seems to be working correctly.

This can be a very useful if I can monitor temps and operating status.

Node-Red to Influxdb to Grafana is my workflow for all my other IOT devices. I was using Infinitude but that's not on an official API. This is. I just lose the ModBus connection.

Thanks for putting this together.

gnuite commented 1 year ago

By default, the code just fetches the "energy" data, but you can fetch any of the fields in the CarrierSystemItem class listed at the top of the carrier.py file. Just tweak the lines in main().

If only I could modify the set point.... (Carrier's app doesn't offer enough time-of-day customizability for my tastes....) (EDIT: I just noticed that /systems/{serialNumber}/config has PUT capability. Would modifying zones[x].activities[y].htsp work?)

kskenyon commented 1 year ago

Just ran into this db error...

File "/home/pi/carrier-infinity-evolution/carrier_infinity_evolution/db.py", line 167, in write_odu_status data['exvposvi']['$']['unit'], TypeError: 'NoneType' object is not subscriptable

gnuite commented 1 year ago

Just ran into this db error...

Yeah, some of the fields can be empty/null, resulting in some null refs. You can comment out the write_odu_status call, or if you actually want the data in a db, then you might need to modify the schema. This patch seemed to work for me (but might break something else, I dunno):

diff --git a/carrier_infinity_evolution/db.py b/carrier_infinity_evolution/db.py
index 300c153..c6fcb95 100644
--- a/carrier_infinity_evolution/db.py
+++ b/carrier_infinity_evolution/db.py
@@ -60,7 +60,7 @@ def ensure_database(path: Path):
             opmode text not null,
             iducfm integer not null,
             lat integer not null,
-            oat integer not null,
+            oat integer,
             oducoiltmp integer not null,
             blwrpm integer not null,
             linevolt integer not null,
@@ -89,10 +89,10 @@ def ensure_database(path: Path):
             dcbusvoltage real,
             dischargepressure real,
             dischargesuperheat real,
-            exvposvi_unit text not null,
-            exvposvi_value integer not null,
+            exvposvi_unit text,
+            exvposvi_value integer,
             ipmtemperature real,
-            lowambientcooling text not null,
+            lowambientcooling text,
             pfcmtemperature real,
             outdoorfanrpm real
         )''')
@@ -164,8 +164,8 @@ def write_odu_status(path: Path, data: Dict):
         data['dcbusvoltage'],
         data['dischargepressure'],
         data['dischargesuperheat'],
-        data['exvposvi']['$']['unit'],
-        data['exvposvi']['_'],
+        data['exvposvi']['$']['unit'] if data['exvposvi'] else None,
+        data['exvposvi']['_'] if data['exvposvi'] else None,
         data['ipmtemperature'],
         data['lowambientcooling'],
         data['pfcmtemperature'],
kskenyon commented 1 year ago

Thanks, it does look like a lot of changes are needed to make this fully functional. Good start though.

Infinitude does write htsp and clsp so it is possible to do it with a put to the config json for the desired zone. See the instructions for using the API.

I'm sure from a quick look at the API that it is possible to modify the set points. That should give gnuite what he/she wants.

I'm just a code tweaker. Writing a lot of new code is usually beyond my pay grade. (I learned coding when BASIC was a radical new idea and FORTRAN IV was taught in engineering school).

thehesiod commented 1 year ago

ya this is a very rough lib, you're not really supposed to use main, that's just showing you an example of how to use it.

thehesiod commented 1 year ago

that being said I welcome PRs! :)

thehesiod commented 1 year ago

btw what I really want to do is be able to communicate directly with the thermostat, the data from the website is infrequent and quite delayed

kskenyon commented 1 year ago

Sample output from config and status on my system. I only have one active zone. It just went into night setback mode. It says to get the json, modify it, then put it to avoid errors. idu and odu data is not being updated, just status and config on my Series A Tstat.

Unfortunately, beyond my skill level.

{'config': {'$': {'version': '1.48', 'xmlns:atom': 'http://www.w3.org/2005/Atom'}, 'atom:link': [{'$': {'href': 'https://www.app-api.ing.carrier.com/systems/2514W003792/config', 'rel': 'self'}}, {'$': {'href': 'https://www.app-api.ing.carrier.com/systems/2514W003792', 'rel': 'http://www.api.ing.carrier.com/rels/system'}}], 'blight': 80, 'blowerSpeed': 0, 'calcMinCFM': 0, 'cfgauto': 'on', 'cfgchgovr': 30, 'cfgdead': 2, 'cfgem': 'F', 'cfgfan': 'on', 'cfghumid': 'off', 'cfgpgm': 'on', 'cfgrecovery': 'on', 'cfgtype': 'heatcool', 'cfguv': 'off', 'cfgvent': 'off', 'cfgzoning': 'on', 'ducthour': 13, 'erate': 0.13, 'filterinterval': 3, 'filtertype': 'air filter', 'filtrrmd': 'off', 'fueltype': 'gas', 'gasunit': 'therm', 'grate': 0.8, 'heatsource': 'system', 'humidityAway': {'humid': 'off', 'humidifier': 'off', 'rclg': 15, 'rclgovercool': 'off', 'rhtg': 1, 'ventclg': 'off', 'venthtg': 'off', 'ventspdclg': 'high', 'ventspdhtg': 'high'}, 'humidityHome': {'humid': 'manual', 'humidifier': 'on', 'rclg': 4, 'rclgovercool': 'on', 'rhtg': 4, 'ventclg': 'auto', 'venthtg': 'auto', 'ventspdclg': 'high', 'ventspdhtg': 'high'}, 'humidityVacation': {'humidifier': 'off', 'rclg': 15, 'rclgovercool': 'off', 'rhtg': 1, 'ventclg': 'off', 'venthtg': 'off', 'ventspdclg': 'high', 'ventspdhtg': 'high'}, 'humidityfan': 'off', 'huminterval': 12, 'humoff': 0, 'humrmd': 'off', 'isMqtt': False, 'mode': 'auto', 'occParameters': 'T1=60,T2=300,MCT1=5,MCT2=10', 'occSustainTime': 120, 'odtmpoff': 0, 'previousMode': 'auto', 'screensaver': 'off', 'sound': 'on', 'staticPressure': 0, 'statpressmon': 'on', 'systemCFM': 0, 'timeAndDate': None, 'timestamp': '2023-04-19T02:17:30.491Z', 'torqueControl': 'off', 'utilityEvent': {'demandClAbs': 82, 'demandHtAbs': 60, 'demandOffset': 4, 'demandResp': 'offset', 'enabled': 'false', 'maxLimit': 90, 'minLimit': 50, 'priceClAbs': 82, 'priceHtAbs': 60, 'priceLimit': '10', 'priceOffset': 4, 'priceResp': 'offset', 'restoreDefaults': 'off'}, 'uvinterval': 12, 'uvrmd': 'off', 'vacat': 'off', 'vacfan': 'off', 'vacmaxt': '80.0', 'vacmint': '55.0', 'ventinterval': 90, 'ventrmd': 'off', 'weatherPostalCode': '46064', 'wholeHouse': {'activities': {'activity': [{'$': {'id': 'sleep'}, 'blight': 80}, {'$': {'id': 'away'}, 'blight': 80}, {'$': {'id': 'wake'}, 'blight': 80}, {'$': {'id': 'manual'}, 'blight': 80}, {'$': {'id': 'home'}, 'blight': 80}]}, 'hold': 'off', 'holdActivity': 'none'}, 'windowprotect': {'enabled': 'on', 'rhtg': 9, 'ventprotect': 'on'}, 'zones': {'zone': [{'$': {'id': '1'}, 'activities': {'activity': [{'$': {'id': 'away'}, 'clsp': '78.0', 'fan': 'off', 'htsp': '58.0', 'previousFan': None}, {'$': {'id': 'home'}, 'clsp': '75.0', 'fan': 'off', 'htsp': '71.0', 'previousFan': None}, {'$': {'id': 'manual'}, 'clsp': '75.0', 'fan': 'off', 'htsp': '72.0', 'previousFan': None}, {'$': {'id': 'sleep'}, 'clsp': '78.0', 'fan': 'off', 'htsp': '58.0', 'previousFan': None}, {'$': {'id': 'wake'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}]}, 'airflowlimit': 'high', 'cfmlimit': '3375', 'enabled': 'on', 'hold': 'off', 'name': 'tv room', 'otmr': None, 'program': {'day': [{'$': {'id': 'Sunday'}, 'period': [{'$': {'id': '1'}, 'activity': 'wake', 'enabled': 'on', 'time': '07:30'}, {'$': {'id': '2'}, 'activity': 'home', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'off', 'time': '00:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Monday'}, 'period': [{'$': {'id': '1'}, 'activity': 'wake', 'enabled': 'on', 'time': '07:30'}, {'$': {'id': '2'}, 'activity': 'home', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'off', 'time': '00:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Tuesday'}, 'period': [{'$': {'id': '1'}, 'activity': 'wake', 'enabled': 'on', 'time': '07:30'}, {'$': {'id': '2'}, 'activity': 'home', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'off', 'time': '00:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Wednesday'}, 'period': [{'$': {'id': '1'}, 'activity': 'wake', 'enabled': 'on', 'time': '07:30'}, {'$': {'id': '2'}, 'activity': 'home', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'off', 'time': '00:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Thursday'}, 'period': [{'$': {'id': '1'}, 'activity': 'wake', 'enabled': 'on', 'time': '07:30'}, {'$': {'id': '2'}, 'activity': 'home', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'off', 'time': '00:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Friday'}, 'period': [{'$': {'id': '1'}, 'activity': 'wake', 'enabled': 'on', 'time': '07:30'}, {'$': {'id': '2'}, 'activity': 'home', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'off', 'time': '00:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Saturday'}, 'period': [{'$': {'id': '1'}, 'activity': 'wake', 'enabled': 'on', 'time': '07:30'}, {'$': {'id': '2'}, 'activity': 'home', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'off', 'time': '00:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}]}, 'setback': 'on', 'tempoffset': '0'}, {'$': {'id': '2'}, 'activities': {'activity': [{'$': {'id': 'away'}, 'clsp': '80.0', 'fan': 'off', 'htsp': '60.0', 'previousFan': None}, {'$': {'id': 'home'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}, {'$': {'id': 'manual'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}, {'$': {'id': 'sleep'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}, {'$': {'id': 'wake'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}]}, 'airflowlimit': 'high', 'cfmlimit': '0', 'enabled': 'off', 'hold': 'off', 'name': 'Zone 2', 'otmr': None, 'program': {'day': [{'$': {'id': 'Sunday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Monday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Tuesday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Wednesday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Thursday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Friday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Saturday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}]}, 'setback': 'on', 'tempoffset': '0'}, {'$': {'id': '3'}, 'activities': {'activity': [{'$': {'id': 'away'}, 'clsp': '80.0', 'fan': 'off', 'htsp': '60.0', 'previousFan': None}, {'$': {'id': 'home'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}, {'$': {'id': 'manual'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}, {'$': {'id': 'sleep'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}, {'$': {'id': 'wake'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}]}, 'airflowlimit': 'high', 'cfmlimit': '0', 'enabled': 'off', 'hold': 'off', 'name': 'Zone 3', 'otmr': None, 'program': {'day': [{'$': {'id': 'Sunday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Monday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Tuesday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Wednesday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Thursday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Friday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Saturday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}]}, 'setback': 'on', 'tempoffset': '0'}, {'$': {'id': '4'}, 'activities': {'activity': [{'$': {'id': 'away'}, 'clsp': '80.0', 'fan': 'off', 'htsp': '60.0', 'previousFan': None}, {'$': {'id': 'home'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}, {'$': {'id': 'manual'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}, {'$': {'id': 'sleep'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}, {'$': {'id': 'wake'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}]}, 'airflowlimit': 'high', 'cfmlimit': '0', 'enabled': 'off', 'hold': 'off', 'name': 'Zone 4', 'otmr': None, 'program': {'day': [{'$': {'id': 'Sunday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Monday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Tuesday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Wednesday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Thursday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Friday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Saturday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}]}, 'setback': 'on', 'tempoffset': '0'}, {'$': {'id': '5'}, 'activities': {'activity': [{'$': {'id': 'away'}, 'clsp': '80.0', 'fan': 'off', 'htsp': '60.0', 'previousFan': None}, {'$': {'id': 'home'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}, {'$': {'id': 'manual'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}, {'$': {'id': 'sleep'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}, {'$': {'id': 'wake'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}]}, 'airflowlimit': 'high', 'cfmlimit': '0', 'enabled': 'off', 'hold': 'off', 'name': 'Zone 5', 'otmr': None, 'program': {'day': [{'$': {'id': 'Sunday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Monday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Tuesday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Wednesday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Thursday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Friday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Saturday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}]}, 'setback': 'on', 'tempoffset': '0'}, {'$': {'id': '6'}, 'activities': {'activity': [{'$': {'id': 'away'}, 'clsp': '80.0', 'fan': 'off', 'htsp': '60.0', 'previousFan': None}, {'$': {'id': 'home'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}, {'$': {'id': 'manual'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}, {'$': {'id': 'sleep'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}, {'$': {'id': 'wake'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}]}, 'airflowlimit': 'high', 'cfmlimit': '0', 'enabled': 'off', 'hold': 'off', 'name': 'Zone 6', 'otmr': None, 'program': {'day': [{'$': {'id': 'Sunday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Monday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Tuesday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Wednesday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Thursday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Friday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Saturday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}]}, 'setback': 'on', 'tempoffset': '0'}, {'$': {'id': '7'}, 'activities': {'activity': [{'$': {'id': 'away'}, 'clsp': '80.0', 'fan': 'off', 'htsp': '60.0', 'previousFan': None}, {'$': {'id': 'home'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}, {'$': {'id': 'manual'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}, {'$': {'id': 'sleep'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}, {'$': {'id': 'wake'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}]}, 'airflowlimit': 'high', 'cfmlimit': '0', 'enabled': 'off', 'hold': 'off', 'name': 'Zone 7', 'otmr': None, 'program': {'day': [{'$': {'id': 'Sunday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Monday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Tuesday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Wednesday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Thursday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Friday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Saturday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}]}, 'setback': 'on', 'tempoffset': '0'}, {'$': {'id': '8'}, 'activities': {'activity': [{'$': {'id': 'away'}, 'clsp': '80.0', 'fan': 'off', 'htsp': '60.0', 'previousFan': None}, {'$': {'id': 'home'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}, {'$': {'id': 'manual'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}, {'$': {'id': 'sleep'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}, {'$': {'id': 'wake'}, 'clsp': '76.0', 'fan': 'off', 'htsp': '68.0', 'previousFan': None}]}, 'airflowlimit': 'high', 'cfmlimit': '0', 'enabled': 'off', 'hold': 'off', 'name': 'Zone 8', 'otmr': None, 'program': {'day': [{'$': {'id': 'Sunday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Monday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Tuesday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Wednesday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Thursday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Friday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}, {'$': {'id': 'Saturday'}, 'period': [{'$': {'id': '1'}, 'activity': 'home', 'enabled': 'on', 'time': '06:00'}, {'$': {'id': '2'}, 'activity': 'away', 'enabled': 'on', 'time': '08:00'}, {'$': {'id': '3'}, 'activity': 'home', 'enabled': 'on', 'time': '17:00'}, {'$': {'id': '4'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}, {'$': {'id': '5'}, 'activity': 'sleep', 'enabled': 'on', 'time': '22:00'}]}]}, 'setback': 'on', 'tempoffset': '0'}]}}} {'status': {'$': {'version': '1.48', 'xmlns:atom': 'http://www.w3.org/2005/Atom'}, 'atom:link': [{'$': {'href': 'https://www.app-api.ing.carrier.com/systems/2514W003792/status', 'rel': 'self'}}, {'$': {'href': 'https://www.app-api.ing.carrier.com/systems/2514W003792', 'rel': 'http://www.api.ing.carrier.com/rels/system'}}], 'cfgem': 'F', 'cfgtype': 'heatcool', 'configHasChanges': False, 'dealerHasChanges': False, 'dealerLogoHasChanges': 'false', 'equipEventsPingRate': 79200, 'filtrlvl': '0', 'historyPingRate': 75600, 'humid': 'off', 'humlvl': '100', 'idu': {'cfm': None, 'opstat': None, 'type': None}, 'iduConfigHasChanges': False, 'iduFaultsPingRate': 86400, 'iduStatusPingRate': 93600, 'isDisconnected': False, 'localTime': '2023-04-18T22:39:42.022', 'mode': 'off', 'name': 'Downstairs', 'oat': '47', 'odu': {'opmode': None, 'opstat': None, 'type': None}, 'oduConfigHasChanges': False, 'oduFaultsPingRate': 82800, 'oduStatusPingRate': 90000, 'oprstsmsg': 'idle', 'pingRate': 15, 'rootCausePingRate': 72000, 'sensorConfigHasChanges': 'false', 'sensorDiagnosticHasChanges': 'false', 'sensorProfileHasChanges': 'false', 'serverHasChanges': False, 'timestamp': '2023-04-19T02:39:42.022Z', 'utilityEventsHasChanges': 'false', 'uvlvl': '100', 'vacatrunning': 'off', 'ventlvl': '100', 'zones': {'zone': [{'$': {'id': '1'}, 'clsp': '78.0', 'currentActivity': 'sleep', 'damperposition': '15', 'enabled': 'on', 'fan': 'off', 'hold': 'off', 'htsp': '58.0', 'name': 'tv room', 'otmr': None, 'rh': '38', 'rt': 69, 'zoneconditioning': 'idle'}, {'$': {'id': '2'}, 'clsp': '76.0', 'currentActivity': 'sleep', 'damperposition': '15', 'enabled': 'off', 'fan': 'off', 'hold': 'off', 'htsp': '68.0', 'name': 'Zone 2', 'otmr': None, 'rh': '38', 'rt': None, 'zoneconditioning': 'idle'}, {'$': {'id': '3'}, 'clsp': '76.0', 'currentActivity': 'sleep', 'damperposition': '15', 'enabled': 'off', 'fan': 'off', 'hold': 'off', 'htsp': '68.0', 'name': 'Zone 3', 'otmr': None, 'rh': '38', 'rt': None, 'zoneconditioning': 'idle'}, {'$': {'id': '4'}, 'clsp': '76.0', 'currentActivity': 'sleep', 'damperposition': '15', 'enabled': 'off', 'fan': 'off', 'hold': 'off', 'htsp': '68.0', 'name': 'Zone 4', 'otmr': None, 'rh': '38', 'rt': None, 'zoneconditioning': 'idle'}, {'$': {'id': '5'}, 'clsp': '76.0', 'currentActivity': 'sleep', 'damperposition': '15', 'enabled': 'off', 'fan': 'off', 'hold': 'off', 'htsp': '68.0', 'name': 'Zone 5', 'otmr': None, 'rh': '38', 'rt': None, 'zoneconditioning': 'idle'}, {'$': {'id': '6'}, 'clsp': '76.0', 'currentActivity': 'sleep', 'damperposition': '15', 'enabled': 'off', 'fan': 'off', 'hold': 'off', 'htsp': '68.0', 'name': 'Zone 6', 'otmr': None, 'rh': '38', 'rt': None, 'zoneconditioning': 'idle'}, {'$': {'id': '7'}, 'clsp': '76.0', 'currentActivity': 'sleep', 'damperposition': '15', 'enabled': 'off', 'fan': 'off', 'hold': 'off', 'htsp': '68.0', 'name': 'Zone 7', 'otmr': None, 'rh': '38', 'rt': None, 'zoneconditioning': 'idle'}, {'$': {'id': '8'}, 'clsp': '76.0', 'currentActivity': 'sleep', 'damperposition': '15', 'enabled': 'off', 'fan': 'off', 'hold': 'off', 'htsp': '68.0', 'name': 'Zone 8', 'otmr': None, 'rh': '38', 'rt': None, 'zoneconditioning': 'idle'}]}}}

kskenyon commented 1 year ago

FYI, Infinitude is still working and it can get data directly from the tstat in real time. No guarantee it will work much longer.

No need to use the cloud.

I think this will be a better solution in the long run. Updates on Carrier Home on iOS seem to be very quick. You might have other bottlenecks.

thehesiod commented 1 year ago

infinitude doesn't work on latest firmware from what i saw. issue in particular was energy usage and voltage.

kskenyon commented 1 year ago

btw what I really want to do is be able to communicate directly with the thermostat, the data from the website is infrequent and quite delayed

You are correct. I mapped my actual updates to the cloud server. The average is about 10 minutes but it varies a bit under that from time to time. 10 minutes is not a bad frequency for environmental data and energy use is usually close to the same when something is running. Depends on your equipment. My furnace and compressor both have multiple speeds. The blower is variable speed. I agree that the energy data is not accurate. It's not integrated with much precision from what I can tell. Setpoint changes should go right through to the furnace but it might not be reflected in the cloud data until there is an update. Better to put a CT on your furnace and A/C circuits in the service panel and use that. I also have that.