Giter Site home page Giter Site logo

udi-ecobee-poly's People

Contributors

einstein42 avatar firstone avatar jimboca avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

udi-ecobee-poly's Issues

https://polyglot.isy.io not upgrading to latest version when starting and stopping

Hi,

I see there is version 2.0.18 in the store on https://polyglot.isy.io. My current dashboard shows 2.0.17 running. If I stop and start the service, the log shows 2.0.18 but the dashboard still says I am running 2.0.17. Am I really on 2.0.18 or do I need to delete the node and reinstall from the store? Following the instructions on the store to just start and stop. I also see the readme of this project under Upgrading, says there is an option to Upgrade from the store, but I do not see that.

This is what I see in the log.
1/5/19 11:18:14:062 [NodeServer][INFO ] :: check_profile: profile_info={'version': '2.0.18'} customData={'tokenData': {'access_token': '(removed for public post)', 'refresh_token': '(removed for public post)', 'expires': '2019-01-05T17:57:29', 'token_type': 'Bearer', 'expires_in': 3599, 'scope': 'smartWrite'}, 'profile_info': {'version': '2.0.18'}, 'climates': {'511896177939': [{'name': 'Away', 'ref': 'away'}, {'name': 'Sleep', 'ref': 'sleep'}, {'name': 'Home', 'ref': 'home'}], '411969173366': [{'name': 'Home', 'ref': 'home'}, {'name': 'Away', 'ref': 'away'}, {'name': 'Sleep', 'ref': 'sleep'}], '411927311944': [{'name': 'Home', 'ref': 'home'}, {'name': 'Away', 'ref': 'away'}, {'name': 'Sleep', 'ref': 'sleep'}]}}

Aux Heat Only causes crash

Ecobee 4- Name comes in automatically as well as all the sensor names but all of them show no values. Figured out from log its AUX Heat Only. Set to regular heat and we are ok

2020-01-26 17:34:09,397 [Controller] [DEBUG] ECO_CTR:Ecobee Controller:session_get: res={'code': 200, 'data': {'page': {'page': 1, 'totalPages': 1, 'pageSize': 1, 'total': 1}, 'thermostatList': [{'identifier': '311059459667', 'name': 'Upstairs', 'thermostatRev': '200126220713', 'isRegistered': True, 'modelNumber': 'athenaSmart', 'brand': 'ecobee', 'features': 'Home,HomeKit', 'lastModified': '2020-01-26 22:07:13', 'thermostatTime': '2020-01-26 17:34:09', 'utcTime': '2020-01-26 22:34:09', 'alerts': [], 'settings': {'hvacMode': 'auxHeatOnly', 'lastServiceDate': '2019-10-09', 'serviceRemindMe': True, 'monthsBetweenService': 6, 'remindMeDate': '2020-04-09', 'vent': 'off', 'ventilatorMinOnTime': 20, 'serviceRemindTechnician': False, 'eiLocation': '', 'coldTempAlert': 580, 'coldTempAlertEnabled': True, 'hotTempAlert': 850, 'hotTempAlertEnabled': True, 'coolStages': 1, 'heatStages': 1, 'maxSetBack': 100, 'maxSetForward': 80, 'quickSaveSetBack': 40, 'quickSaveSetForward': 40, 'hasHeatPump': True, 'hasForcedAir': True, 'hasBoiler': False, 'hasHumidifier': False, 'hasErv': False, 'hasHrv': False, 'condensationAvoid': False, 'useCelsius': False, 'useTimeFormat12': True, 'locale': 'en', 'humidity': '36', 'humidifierMode': 'off', 'backlightOnIntensity': 10, 'backlightSleepIntensity': 4, 'backlightOffTime': 60, 'soundTickVolume': 0, 'soundAlertVolume': 0, 'compressorProtectionMinTime': 300, 'compressorProtectionMinTemp': -10000, 'stage1HeatingDifferentialTemp': 5, 'stage1CoolingDifferentialTemp': 5, 'stage1HeatingDissipationTime': 31, 'stage1CoolingDissipationTime': 31, 'heatPumpReversalOnCool': True, 'fanControlRequired': False, 'fanMinOnTime': 0, 'heatCoolMinDelta': 50, 'tempCorrection': 0, 'holdAction': 'indefinite', 'heatPumpGroundWater': False, 'hasElectric': False, 'hasDehumidifier': False, 'dehumidifierMode': 'off', 'dehumidifierLevel': 60, 'dehumidifyWithAC': False, 'dehumidifyOvercoolOffset': 0, 'autoHeatCoolFeatureEnabled': True, 'wifiOfflineAlert': False, 'heatMinTemp': 450, 'heatMaxTemp': 1200, 'coolMinTemp': -100, 'coolMaxTemp': 1200, 'heatRangeHigh': 790, 'heatRangeLow': 450, 'coolRangeHigh': 920, 'coolRangeLow': 650, 'userAccessCode': '', 'userAccessSetting': 0, 'auxRuntimeAlert': 21600, 'auxOutdoorTempAlert': 500, 'auxMaxOutdoorTemp': 350, 'auxRuntimeAlertNotify': True, 'auxOutdoorTempAlertNotify': False, 'auxRuntimeAlertNotifyTechnician': False, 'auxOutdoorTempAlertNotifyTechnician': False, 'disablePreHeating': False, 'disablePreCooling': False, 'installerCodeRequired': False, 'drAccept': 'always', 'isRentalProperty': False, 'useZoneController': False, 'randomStartDelayCool': 0, 'randomStartDelayHeat': 0, 'humidityHighAlert': 95, 'humidityLowAlert': 5, 'disableHeatPumpAlerts': False, 'disableAlertsOnIdt': False, 'humidityAlertNotify': True, 'humidityAlertNotifyTechnician': False, 'tempAlertNotify': True, 'tempAlertNotifyTechnician': False, 'monthlyElectricityBillLimit': 0, 'enableElectricityBillAlert': False, 'enableProjectedElectricityBillAlert': False, 'electricityBillingDayOfMonth': 1, 'electricityBillCycleMonths': 1, 'electricityBillStartMonth': 1, 'ventilatorMinOnTimeHome': 20, 'ventilatorMinOnTimeAway': 0, 'backlightOffDuringSleep': False, 'autoAway': False, 'smartCirculation': False, 'followMeComfort': False, 'ventilatorType': 'none', 'isVentilatorTimerOn': False, 'ventilatorOffDateTime': '', 'hasUVFilter': True, 'coolingLockout': False, 'ventilatorFreeCooling': True, 'dehumidifyWhenHeating': False, 'ventilatorDehumidify': True, 'groupRef': '', 'groupName': '', 'groupSetting': 0}, 'runtime': {'runtimeRev': '200126223240', 'connected': True, 'firstConnected': '2017-03-15 17:32:36', 'connectDateTime': '2020-01-26 21:54:47', 'disconnectDateTime': '2020-01-26 09:27:28', 'lastModified': '2020-01-26 22:32:40', 'lastStatusModified': '2020-01-26 22:32:40', 'runtimeDate': '2020-01-26', 'runtimeInterval': 267, 'actualTemperature': 707, 'actualHumidity': 32, 'rawTemperature': 707, 'showIconMode': 0, 'desiredHeat': 680, 'desiredCool': 720, 'desiredHumidity': 36, 'desiredDehumidity': 60, 'desiredFanMode': 'auto', 'desiredHeatRange': [450, 790], 'desiredCoolRange': [650, 920]}, 'extendedRuntime': {'lastReadingTimestamp': '2020-01-26 22:15:00', 'runtimeDate': '2020-01-26', 'runtimeInterval': 267, 'actualTemperature': [714, 711, 709], 'actualHumidity': [33, 33, 33], 'desiredHeat': [680, 680, 680], 'desiredCool': [720, 720, 720], 'desiredHumidity': [0, 0, 0], 'desiredDehumidity': [0, 0, 0], 'dmOffset': [0, 0, 0], 'hvacMode': ['heatOff', 'heatOff', 'heatOff'], 'heatPump1': [0, 0, 0], 'heatPump2': [0, 0, 0], 'auxHeat1': [0, 0, 0], 'auxHeat2': [0, 0, 0], 'auxHeat3': [0, 0, 0], 'cool1': [0, 0, 0], 'cool2': [0, 0, 0], 'fan': [0, 0, 0], 'humidifier': [0, 0, 0], 'dehumidifier': [0, 0, 0], 'economizer': [0, 0, 0], 'ventilator': [0, 0, 0], 'currentElectricityBill': 0, 'projectedElectricityBill': 0}, 'location': {'timeZoneOffsetMinutes': -300, 'timeZone': 'America/New_York', 'isDaylightSaving': True, 'streetAddress': '16806 Heather Knolls Place', 'city': 'Hamilton', 'provinceState': 'VA', 'country': 'US', 'postalCode': '20158', 'phoneNumber': '', 'mapCoordinates': '39.152397,-77.666695'}, 'utility': {}, 'weather': {'timestamp': '2020-01-26 22:33:02', 'weatherStation': 'FI:KJYO', 'forecasts': [{'weatherSymbol': 3, 'dateTime': '2020-01-26 17:33:02', 'condition': 'Overcast', 'temperature': 410, 'pressure': 1012, 'relativeHumidity': 69, 'dewpoint': 317, 'visibility': 10000, 'windSpeed': 6, 'windGust': -5002, 'windDirection': 'W', 'windBearing': 281, 'pop': 0, 'tempHigh': 454, 'tempLow': 332, 'sky': 5}, {'weatherSymbol': 2, 'dateTime': '2020-01-27 00:00:00', 'condition': 'Partly cloudy throughout the day.', 'temperature': 401, 'pressure': 1010, 'relativeHumidity': 71, 'dewpoint': 298, 'visibility': 16000, 'windSpeed': 7, 'windGust': -5002, 'windDirection': 'W', 'windBearing': 278, 'pop': 15, 'tempHigh': 496, 'tempLow': 307, 'sky': 2}, {'weatherSymbol': 0, 'dateTime': '2020-01-28 00:00:00', 'condition': 'Clear throughout the day.', 'temperature': 390, 'pressure': 1014, 'relativeHumidity': 68, 'dewpoint': 273, 'visibility': 16000, 'windSpeed': 9, 'windGust': -5002, 'windDirection': 'NW', 'windBearing': 316, 'pop': 9, 'tempHigh': 464, 'tempLow': 317, 'sky': 2}, {'weatherSymbol': 0, 'dateTime': '2020-01-29 00:00:00', 'condition': 'Clear throughout the day.', 'temperature': 364, 'pressure': 1019, 'relativeHumidity': 66, 'dewpoint': 239, 'visibility': 16000, 'windSpeed': 7, 'windGust': -5002, 'windDirection': 'NNW', 'windBearing': 327, 'pop': 3, 'tempHigh': 444, 'tempLow': 284, 'sky': 2}, {'weatherSymbol': 2, 'dateTime': '2020-01-30 00:00:00', 'condition': 'Partly cloudy throughout the day.', 'temperature': 333, 'pressure': 1024, 'relativeHumidity': 55, 'dewpoint': 157, 'visibility': 16000, 'windSpeed': 3, 'windGust': -5002, 'windDirection': 'NNE', 'windBearing': 31, 'pop': 2, 'tempHigh': 435, 'tempLow': 231, 'sky': 3}, {'weatherSymbol': 1, 'dateTime': '2020-01-26 18:00:00', 'condition': 'Mostly Cloudy', 'temperature': 398, 'pressure': 1012, 'relativeHumidity': 71, 'dewpoint': 311, 'visibility': 10000, 'windSpeed': 6, 'windGust': -5002, 'windDirection': 'W', 'windBearing': 280, 'pop': 4, 'tempHigh': -5002, 'tempLow': -5002, 'sky': 4}, {'weatherSymbol': 0, 'dateTime': '2020-01-27 00:00:00', 'condition': 'Clear', 'temperature': 345, 'pressure': 1012, 'relativeHumidity': 75, 'dewpoint': 274, 'visibility': 16000, 'windSpeed': 5, 'windGust': -5002, 'windDirection': 'SW', 'windBearing': 221, 'pop': 2, 'tempHigh': -5002, 'tempLow': -5002, 'sky': 1}, {'weatherSymbol': 1, 'dateTime': '2020-01-27 06:00:00', 'condition': 'Mostly Cloudy', 'temperature': 324, 'pressure': 1011, 'relativeHumidity': 86, 'dewpoint': 287, 'visibility': 16000, 'windSpeed': 5, 'windGust': -5002, 'windDirection': 'SW', 'windBearing': 222, 'pop': 2, 'tempHigh': -5002, 'tempLow': -5002, 'sky': 3}, {'weatherSymbol': 2, 'dateTime': '2020-01-27 12:00:00', 'condition': 'Partly Cloudy', 'temperature': 460, 'pressure': 1009, 'relativeHumidity': 59, 'dewpoint': 325, 'visibility': 16000, 'windSpeed': 9, 'windGust': -5002, 'windDirection': 'N', 'windBearing': 1, 'pop': 0, 'tempHigh': -5002, 'tempLow': -5002, 'sky': 2}]}, 'events': [], 'program': {'schedule': [['sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'sleep'], ['sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'sleep'], ['sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'sleep'], ['sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'sleep'], ['sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'sleep'], ['sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'sleep'], ['sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'sleep', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'home', 'sleep']], 'climates': [{'name': 'Sleep', 'climateRef': 'sleep', 'isOccupied': True, 'isOptimized': False, 'coolFan': 'auto', 'heatFan': 'auto', 'vent': 'off', 'ventilatorMinOnTime': 20, 'owner': 'system', 'type': 'program', 'colour': 2179683, 'coolTemp': 740, 'heatTemp': 660, 'sensors': [{'id': 'ei:0:1', 'name': 'Upstairs'}, {'id': 'rs:102:1', 'name': 'Ashtons Room'}, {'id': 'rs:103:1', 'name': 'Tuckers Room'}, {'id': 'rs2:100:1', 'name': 'Sitting Room 2'}]}, {'name': 'Away', 'climateRef': 'away', 'isOccupied': False, 'isOptimized': True, 'coolFan': 'auto', 'heatFan': 'auto', 'vent': 'off', 'ventilatorMinOnTime': 20, 'owner': 'system', 'type': 'program', 'colour': 9021815, 'coolTemp': 760, 'heatTemp': 640, 'sensors': [{'id': 'ei:0:1', 'name': 'Upstairs'}, {'id': 'rs:102:1', 'name': 'Ashtons Room'}, {'id': 'rs:103:1', 'name': 'Tuckers Room'}, {'id': 'rs2:100:1', 'name': 'Sitting Room 2'}]}, {'name': 'Home', 'climateRef': 'home', 'isOccupied': True, 'isOptimized': False, 'coolFan': 'auto', 'heatFan': 'auto', 'vent': 'off', 'ventilatorMinOnTime': 20, 'owner': 'system', 'type': 'program', 'colour': 13560055, 'coolTemp': 720, 'heatTemp': 680, 'sensors': [{'id': 'ei:0:1', 'name': 'Upstairs'}, {'id': 'rs:102:1', 'name': 'Ashtons Room'}, {'id': 'rs:103:1', 'name': 'Tuckers Room'}, {'id': 'rs2:100:1', 'name': 'Sitting Room 2'}]}], 'currentClimateRef': 'home'}, 'equipmentStatus': '', 'version': {'thermostatFirmwareVersion': '4.5.13.45'}, 'remoteSensors': [{'id': 'rs:100', 'name': 'Sitting Room', 'type': 'ecobee3_remote_sensor', 'code': 'QCBF', 'inUse': False, 'capability': [{'id': '1', 'type': 'temperature', 'value': '721'}, {'id': '2', 'type': 'occupancy', 'value': 'true'}]}, {'id': 'rs:101', 'name': 'Guest Room', 'type': 'ecobee3_remote_sensor', 'code': 'V7NR', 'inUse': False, 'capability': [{'id': '1', 'type': 'temperature', 'value': '687'}, {'id': '2', 'type': 'occupancy', 'value': 'false'}]}, {'id': 'rs:102', 'name': 'Ashtons Room', 'type': 'ecobee3_remote_sensor', 'code': 'V32S', 'inUse': True, 'capability': [{'id': '1', 'type': 'temperature', 'value': '690'}, {'id': '2', 'type': 'occupancy', 'value': 'true'}]}, {'id': 'rs:103', 'name': 'Tuckers Room', 'type': 'ecobee3_remote_sensor', 'code': 'RJC6', 'inUse': True, 'capability': [{'id': '1', 'type': 'temperature', 'value': '701'}, {'id': '2', 'type': 'occupancy', 'value': 'true'}]}, {'id': 'ei:0', 'name': 'Upstairs', 'type': 'thermostat', 'inUse': True, 'capability': [{'id': '1', 'type': 'temperature', 'value': '714'}, {'id': '2', 'type': 'humidity', 'value': '32'}, {'id': '3', 'type': 'occupancy', 'value': 'true'}]}, {'id': 'rs2:100', 'name': 'Sitting Room 2', 'type': 'ecobee3_remote_sensor', 'code': 'KYRM', 'inUse': True, 'capability': [{'id': '1', 'type': 'temperature', 'value': '723'}, {'id': '2', 'type': 'occupancy', 'value': 'true'}]}]}], 'status': {'code': 0, 'message': ''}}}
2020-01-26 17:34:09,398 [Controller] [DEBUG] ECO_CTR:Ecobee Controller:getThermostatSelection: done
2020-01-26 17:34:09,401 [Controller] [DEBUG] EcobeeF_311059459667:t311059459667:Ecobee - Upstairs:update: 
2020-01-26 17:34:09,403 [Controller] [DEBUG] EcobeeF_311059459667:t311059459667:Ecobee - Upstairs:_update::  runtime={
  "actualHumidity": 32,
  "actualTemperature": 707,
  "connectDateTime": "2020-01-26 21:54:47",
  "connected": true,
  "desiredCool": 720,
  "desiredCoolRange": [
    650,
    920
  ],
  "desiredDehumidity": 60,
  "desiredFanMode": "auto",
  "desiredHeat": 680,
  "desiredHeatRange": [
    450,
    790
  ],
  "desiredHumidity": 36,
  "disconnectDateTime": "2020-01-26 09:27:28",
  "firstConnected": "2017-03-15 17:32:36",
  "lastModified": "2020-01-26 22:32:40",
  "lastStatusModified": "2020-01-26 22:32:40",
  "rawTemperature": 707,
  "runtimeDate": "2020-01-26",
  "runtimeInterval": 267,
  "runtimeRev": "200126223240",
  "showIconMode": 0
}
2020-01-26 17:34:09,404 [Controller] [DEBUG] EcobeeF_311059459667:t311059459667:Ecobee - Upstairs:_update: events=[]
2020-01-26 17:34:09,404 [Controller] [DEBUG] EcobeeF_311059459667:t311059459667:Ecobee - Upstairs:_update: climateType=home
2020-01-26 17:34:09,405 [Controller] [DEBUG] EcobeeF_311059459667:t311059459667:Ecobee - Upstairs:_update: clifrs=0 (equipmentStatus=[''] or clihcs=0, fanControlRequired=False
2020-01-26 17:34:09,406 [Controller] [DEBUG] EcobeeF_311059459667:t311059459667:Ecobee - Upstairs:_update: backlightOnIntensity=10 backlightSleepIntensisty=4
2020-01-26 17:34:09,415 [Controller] [ERROR] Exception in thread Controller:
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/threading.py", line 926, in _bootstrap_inner
    self.run()
  File "/usr/local/lib/python3.7/threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "/var/polyglot/.local/lib/python3.7/site-packages/polyinterface/polyinterface.py", line 858, in _parseInput
    self.longPoll()
  File "./ecobee-poly.py", line 204, in longPoll
    self.updateThermostats()
  File "./ecobee-poly.py", line 228, in updateThermostats
    self.nodes[address].update(thermostat, fullData)
  File "/var/polyglot/nodeservers/Ecobee/node_types.py", line 284, in update
    self._update()
  File "/var/polyglot/nodeservers/Ecobee/node_types.py", line 364, in _update
    'CLIMD': modeMap[self.settings['hvacMode']],
KeyError: 'auxHeatOnly'

Trap: ConnectionResetError: [Errno 104] Connection reset by peer

This caused the thread to die? Need to trap exception. Main process was still running but log showed nothing.

2019-02-19 05:25:43,782 [Controller] [DEBUG] heartbeat hb=0
2019-02-19 05:25:43,784 [Controller] [DEBUG] controller:updateThermostats:
2019-02-19 05:25:43,786 [Controller] [DEBUG] Tokens valid until: 2019-02-19T06:22:45
2019-02-19 05:25:51,980 [Controller] [ERROR] Exception in thread Controller:
Traceback (most recent call last):
  File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.5/threading.py", line 862, in run
    self._target(*self._args, **self._kwargs)
  File "/home/pi/.local/lib/python3.5/site-packages/polyinterface/polyinterface.py", line 771, in _parseInput
    self.longPoll()
  File "./ecobee-poly.py", line 240, in longPoll
    self.updateThermostats()
  File "./ecobee-poly.py", line 253, in updateThermostats
    thermostats = self.getThermostats()
  File "./ecobee-poly.py", line 470, in getThermostats
    res = auth_conn.getresponse()
  File "/usr/lib/python3.5/http/client.py", line 1198, in getresponse
    response.begin()
  File "/usr/lib/python3.5/http/client.py", line 297, in begin
    version, status, reason = self._read_status()
  File "/usr/lib/python3.5/http/client.py", line 258, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
  File "/usr/lib/python3.5/socket.py", line 576, in readinto
    return self._sock.recv_into(b)
  File "/usr/lib/python3.5/ssl.py", line 937, in recv_into
    return self.read(nbytes, buffer)
  File "/usr/lib/python3.5/ssl.py", line 799, in read
    return self._sslobj.read(len, buffer)
  File "/usr/lib/python3.5/ssl.py", line 583, in read
    v = self._sslobj.read(len, buffer)
ConnectionResetError: [Errno 104] Connection reset by peer

Crash due to bad json returned from Ecobee

2019-04-09 14:14:49,829 [Controller] [ERROR] Ecobee Controller:reponse:get: Failed to convert to json : Expecting value: line 1 column 1 (char 0)
Traceback (most recent call last):
  File "/home/pi/development/udi-ecobee-poly/pgSession.py", line 66, in response
    json_data = json.loads(response.text)
  File "/usr/lib/python3.5/json/__init__.py", line 319, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.5/json/decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.5/json/decoder.py", line 357, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
2019-04-09 14:14:49,866 [Controller] [DEBUG] controller:set_ecobee_st: True=1
2019-04-09 14:14:49,907 [Controller] [ERROR] Exception in thread Controller:
Traceback (most recent call last):
  File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.5/threading.py", line 862, in run
    self._target(*self._args, **self._kwargs)
  File "/home/pi/.local/lib/python3.5/site-packages/polyinterface/polyinterface.py", line 771, in _parseInput
    self.longPoll()
  File "./ecobee-poly.py", line 202, in longPoll
    self.updateThermostats()
  File "./ecobee-poly.py", line 215, in updateThermostats
    thermostats = self.getThermostats()
  File "./ecobee-poly.py", line 446, in getThermostats
    if 'revisionList' in res_data:
TypeError: argument of type 'bool' is not iterable

Add "Hold Action" param in ISY

The thermostat settings allow user to set a Hold Action of
2 hours
4 hours
Until the next scheduled activity
Until I change it

We could add that param in the ISY as well.

image

Check if "Climate Type" is current schedule.

If user selects the Climate Type that is the current based on the schedule, should it still go into hold mode? For example, current schedule says we are in Home. User changes to Away which puts it in Away with hold of nextTransition. Now if they set to "Home", should that cancel the hold, or go into Home with hold nextTransition?

Turn off weather crash

If Nodeserver is added, the weather monitoring is turned off, it crashes:

2019-11-10 19:15:12,229 [Controller] [ERROR] _parseInput: failed t511889241737.runCmd(GV9) int() argument must be a string, a bytes-like object or a number, not 'NoneType'
Traceback (most recent call last):
  File "/home/pi/.local/lib/python3.6/site-packages/polyinterface/polyinterface.py", line 788, in _parseInput
    self.nodes[input[key]['address']].runCmd(input[key])
  File "/home/pi/.local/lib/python3.6/site-packages/polyinterface/polyinterface.py", line 691, in runCmd
    fun(self, command)
  File "/home/pi/development/udi-ecobee-poly/node_types.py", line 734, in cmdSetDoWeather
    if int(self.getDriver(cmd['cmd'])) == value:
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

Workaround is to restart so the driver is initialized, then it can be turned off.

Track Vacation along with Smart Home/Away

https://forum.universal-devices.com/topic/25324-polyglot-v2-ecobee-nodeserver/?do=findComment&comment=254665

Ah - ok.  I remember reading that now.  For me, I do most of my control directly from the Ecobee, so would have little/no interest in setting vacation mode from the ISY.  However, being able to detect that the Ecobee is in vacation mode would be valuable.  One for logging/reporting the current state of the Ecobee.  And more importantly, initiating programs in ISY based on vacation mode.

It seems a true/false status for vacation mode would be adequate.  One thing that Home Assistant's Ecobee component does that works really well in automations...  All override modes are enumerated in a hold_mode attribute.  This can have one of a number of values:  null, hold, home, away, vacation, etc.  If I make any changes to Ecobee via its interface, such as setting a Vacation, Quick Home Hold, Quick Away Hold, or any of the smart functions based on remote sensors detecting/not detecting motion (Smart Home, Smart Away), it is conveyed in Home Assistant via the hold_mode attribute.

 -Sam

Add support for dryContact sensors

2019-01-06 12:21:13,174 [Controller] [ERROR] t198772770918:getSensorAddress: Unable to determine sensor address for: {'name': '', 'type': 'monitor_sensor', 'inUse': False, 'id': 'ei:0:1', 'capability': [{'type': 'dryContact', 'value': '0', 'id': ''}]}
2019-01-06 12:21:13,175 [Controller] [ERROR] t198772770918:getSensorAddress: Unable to determine sensor address for: {'name': '', 'type': 'monitor_sensor', 'inUse': False, 'id': 'ei:0:2', 'capability': [{'type': 'dryContact', 'value': '0', 'id': ''}]}

invalid_grant should re-request the auth

12/21/18 07:18:29:679 [Controller][ERROR] :: invalid_grant :: The authorization grant, token or credentials are invalid, expired, revoked, do not match the redirection URI used in the authorization request, or was issued to another client.

Not properly recognizing expired token response?

019-04-03 08:52:08,163 [Controller] [DEBUG] Ecobee Controller:get: Sending: url=https://api.ecobee.com/1/thermostat payload={'json': '{"sel
ection": {"selectionType": "thermostats", "includeVersion": true, "includeProgram": true, "includeWeather": true, "includeUtility": true, "i
ncludeRuntime": true, "includeAlerts": true, "includeEquipmentStatus": true, "includeSensors": true, "includeSettings": true, "includeLocati
on": true, "includeEvents": true, "includeExtendedRuntime": true, "selectionMatch": "411956665463"}}'}
2019-04-03 08:52:10,451 [Controller] [WARNING] /usr/lib/python3.5/socket.py:647: ResourceWarning: unclosed <socket.socket fd=7, family=Addre
ssFamily.AF_INET, type=2049, proto=6, laddr=('192.168.86.92', 59608), raddr=('216.220.61.235', 443)>
2019-04-03 08:52:10,453 [Controller] [DEBUG] Ecobee Controller:get:  Got: code=500
2019-04-03 08:52:10,454 [Controller] [ERROR] Ecobee Controller:get: Unknown response 500: https://api.ecobee.com/1/thermostat {
  "status": {
    "code": 14,
    "message": "Authentication token has expired. Refresh your tokens. "
  }
}
2019-04-03 08:52:10,456 [Controller] [DEBUG] ECO_CTR:Ecobee Controller:getThermostatSelection: done
2019-04-03 08:52:10,457 [Controller] [ERROR] Failed to get updated data for thermostat: Development(411956665463)
2019-04-03 08:55:02,969 [Controller] [DEBUG] controller:longPoll
2019-04-03 08:55:02,970 [Controller] [DEBUG] heartbeat hb=1
2019-04-03 08:55:02,972 [Controller] [DEBUG] controller:updateThermostats:
2019-04-03 08:55:02,975 [Controller] [INFO ] Tokens have expired. Refreshing...

NodeServer is hanging

It seems to hang here, no clue what it's doing. Process is still alive but using no cpu time...

2019-02-15 19:11:00,610 [Controller] [DEBUG] controller:longPoll
2019-02-15 19:11:00,611 [Controller] [DEBUG] heartbeat hb=1
2019-02-15 19:11:00,613 [Controller] [DEBUG] controller:updateThermostats:
2019-02-15 19:11:00,615 [Controller] [DEBUG] Tokens valid until: 2019-02-15T19:11:02

Schedule Mode crash ValueError: invalid literal for int() with base 10:

2018-12-11 22:11:49,775 [Controller] [ERROR] _parseInput: failed 311013547759.runCmd(CLISMD) invalid literal for int() with base 10: '19.0'
Traceback (most recent call last):
  File "/root/.local/lib/python3.5/site-packages/polyinterface/polyinterface.py", line 759, in _parseInput
    self.nodes[input[key]['address']].runCmd(input[key])
  File "/root/.local/lib/python3.5/site-packages/polyinterface/polyinterface.py", line 663, in runCmd
    fun(self, command)
  File "/root/.polyglot/nodeservers/Ecobee/node_types.py", line 297, in cmdSetScheduleMode
    heatHoldTemp = int(self.getDriver('CLISPH'))
ValueError: invalid literal for int() with base 10: '19.0'

Schedule Mode 'Running'

I am trying to automate setting away/home.

To set away:
Set the 'Climate Type' to 'Away' with a 'Permanent' hold

To set home:
Set the 'Schedule Mode' to 'Running'

The log file outputs the following:
cmdSetScheduleMode: CLISMD=0 already set to 0

I have tried first setting the 'Schedule Mode' to 'Hold Next' with no success.

forecastNum IndexError: list index out of range

---------- Forwarded message ---------
From: Michel Kohanim [email protected]
Date: Wed, Feb 5, 2020 at 2:38 PM
Subject: ecobee exceptions
To: Jim Searle [email protected]

Hi Jim,  

Any ideas

2020-02-05 22:32:57,436 [Controller] [INFO ] Updating Driver rs_mxsf - ST: 78.1 uom: 17    "isCoolOff": false,
2020-02-05 22:32:57,438 [Controller] [ERROR] Exception in thread Controller:
  File "/usr/local/lib/python3.7/threading.py", line 917, in _bootstrap_inner
  File "/usr/local/lib/python3.7/threading.py", line 865, in run
    self.run()
  File "/usr/local/lib/python3.7/site-packages/pgc_interface/pgc_interface.py", line 791, in _parseInput
  File "/usr/local/lib/python3.7/site-packages/pgc_interface/pgc_interface.py", line 823, in _handleResult
    self.nodes[result['address']].start()
    self._target(*self._args, **self._kwargs)
    "isHeatOff": false,
Traceback (most recent call last):
    self.update(self.revData, self.fullData)
    self._update()
  File "/app/nodeserver/node_types.py", line 221, in start
  File "/app/nodeserver/node_types.py", line 285, in update
    self._handleResult(input[key])
    self.check_weather()
    self.weather.update(self.tstat['weather'])
  File "/app/nodeserver/node_types.py", line 395, in _update
  File "/app/nodeserver/node_types.py", line 248, in check_weather
    currentWeather = weather['forecasts'][self.forecastNum]
  File "/app/nodeserver/node_types.py", line 884, in update
IndexError: list index out of range

With kind regards, 
****************************** 
Michel Kohanim  CEO   (p) 818.631.0333  http://www.universal-devices.com ****************************** 

Crash on timeout error with 522 code

Log shows this:

2020-03-16 17:00:26,578 [Controller] [DEBUG] Ecobee Controller:post: Sending: url=https://api.ecobee.com/token payload={}
2020-03-16 17:00:56,996 [Controller] [DEBUG] Ecobee Controller:reponse:post:  Got: code=522
2020-03-16 17:00:56,997 [Controller] [ERROR] Ecobee Controller:reponse:post: Unknown response 522: https://api.ecobee.com/token?grant_type=refresh_token&client_id=19j5o2QheoDIYeuwPGOCWV80hI07lbDC&refresh_token=ltTQtoNHJcG0TrHya53H8hwJz0SpkeGu <!DOCTYPE html>
<

Which results in:

: Expecting value: line 1 column 1 (char 0)
Traceback (most recent call last):
  File "/var/polyglot/nodeservers/Ecobee/pgSession.py", line 71, in response
    json_data = json.loads(response.text)
  File "/usr/local/lib/python3.7/json/__init__.py", line 348, in loads
    return _default_decoder.decode(s)
  File "/usr/local/lib/python3.7/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/local/lib/python3.7/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
2020-03-16 17:00:57,001 [Controller] [DEBUG] controller:set_ecobee_st: True=1
2020-03-16 17:00:57,008 [Controller] [ERROR] Exception in thread Controller:
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/threading.py", line 926, in _bootstrap_inner
    self.run()
  File "/usr/local/lib/python3.7/threading.py", line 870, in run
    self._target(*self._args, **self._kwargs)
  File "/var/polyglot/.local/lib/python3.7/site-packages/polyinterface/polyinterface.py", line 858, in _parseInput
    self.longPoll()
  File "./ecobee-poly.py", line 204, in longPoll
    self.updateThermostats()
  File "./ecobee-poly.py", line 217, in updateThermostats
    thermostats = self.getThermostats()
  File "./ecobee-poly.py", line 453, in getThermostats
    'includesEquipmentStatus': True
  File "./ecobee-poly.py", line 439, in session_get
    if self._getRefresh() is True:
  File "./ecobee-poly.py", line 123, in _getRefresh
    if 'error' in res_data:
TypeError: argument of type 'bool' is not iterable

Sensor regression

Haven't checked my Polyglot in a while but noticed switches that act as sensor no longer appear, this is due to switches not having a code. Looks like #12 may have broke it.

Data its trying to parse:
{'name': 'Bathroom', 'type': 'switch_plus', 'id': 'ls1w:255', 'capability': [{'type': 'temperature', 'id': '1', 'value': '699'}, {'type': 'occupancy', 'id': '2', 'value': 'true'}], 'inUse': False}

ClimateType of 'wakeup' not found, halts further processing

Not sure if this is a recent change from Ecobee
From the log:
2019-08-29 11:30:38,817 [Controller] [DEBUG] EcobeeF_########:t######:Ecobee - Upstairs:_update: climateType=wakeup

Resulting error:
2019-08-29 11:30:38,819 [Controller] [ERROR] Unknown climateType='wakeup'
2019-08-29 11:30:38,822 [Controller] [ERROR] Exception in thread Controller:
Traceback (most recent call last):
File "/usr/local/lib/python3.7/threading.py", line 917, in _bootstrap_inner
self.run()
File "/usr/local/lib/python3.7/threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "/usr/local/lib/python3.7/site-packages/pgc_interface/pgc_interface.py", line 797, in _parseInput
self.longPoll()
File "./ecobee-poly.py", line 204, in longPoll
self.updateThermostats()
File "./ecobee-poly.py", line 228, in updateThermostats
self.nodes[address].update(thermostat, fullData)
File "/app/nodeserver/node_types.py", line 284, in update
self._update()
File "/app/nodeserver/node_types.py", line 372, in _update
'GV3': self.getClimateIndex(climateType),
File "/app/nodeserver/node_types.py", line 401, in getClimateIndex
climateIndex = climateMap['unknown']
KeyError: 'unknown'

Just a guess at line 401 in node_types.py when name is not in climateMap it attempts to map 'unknown', which does not exist in node_funcs.py's climateList.

def getClimateIndex(self,name):
if name in climateMap:
climateIndex = climateMap[name]
else:
LOGGER.error("Unknown climateType='{}'".format(name))
climateIndex = climateMap['unknown']
return climateIndex

Support Low Battery Warning

The Thermostat gets low battery for a sensor:

2019-11-12 11:55:42,072 [Controller] [DEBUG] ECO_CTR:Ecobee Controller:session_get: res={'code': 200, 'data': {'page': {'page': 1, 'totalPages': 1, 'pageSize': 1, 'total': 1}, 'thermostatList': [{'identifier': '511889241737', 'name': 'Lake Living Room', 'thermostatRev': '191104225234', 'isRegistered': True, 'modelNumber': 'apolloSmart', 'brand': 'ecobee', 'features': 'Home,HomeKit', 'lastModified': '2019-11-04 22:52:34', 'thermostatTime': '2019-11-12 12:55:41', 'utcTime': '2019-11-12 19:55:41', 'alerts': [{'acknowledgeRef': '1c:5dbfd0eb:511889241737', 'date': '2019-11-04', 'time': '07:19:07', 'severity': 'low', 'text': 'Time To Have Your Heating/AC System Serviced, it was last inspected on Apr 1, 2019', 'alertNumber': 3140, 'alertType': 'alert', 'isOperatorAlert': False, 'reminder': '2019-11-04', 'showIdt': True, 'showWeb': True, 'sendEmail': True, 'acknowledgement': 'unacknowledged', 'remindMeLater': False, 'thermostatIdentifier': '511889241737', 'notificationType': 'hvac'}, {'acknowledgeRef': '21:5dc252e3:511889241737', 'date': '2019-11-06', 'time': '04:58:11', 'severity': 'low', 'text': 'Your Kitchen sensor is running low on battery. Replace the battery when you get a chance.', 'alertNumber': 1026, 'alertType': 'alert', 'isOperatorAlert': False, 'reminder': '2019-11-06', 'showIdt': True, 'showWeb': True, 'sendEmail': True, 'acknowledgement': 'unacknowledged', 'remindMeLater': False, 'thermostatIdentifier': '511889241737', 'notificationType': 'alert'}, {'acknowledgeRef': '26:5dc258b2:511889241737', 'date': '2019-11-06', 'time': '05:22:58', 'severity': 'medium', 'text': 'Thermostat has lost your Kitchen sensor! Try moving the sensor closer.', 'alertNumber': 1028, 'alertType': 'alert', 'isOperatorAlert': False, 'reminder': '2019-11-06', 'showIdt': True, 'showWeb': True, 'sendEmail': True, 'acknowledgement': 'unacknowledged', 'remindMeLater': False, 'thermostatIdentifier': '511889241737', 'notificationType': 'sensor'}],

Need to translate that back to a sensor? Or Just have an "alert" on the Thermostat?

Ecobee server issues caused nodeserver to hang

Log shows timeouts and fails, but eventually just hung:

2019-01-07 06:22:11,066 [Controller] [DEBUG] Update detected in thermostat Thermostat(t198772770918) doing full update.
2019-01-07 06:22:11,067 [Controller] [DEBUG] Tokens valid until: 2019-01-07T06:34:03
2019-01-07 06:22:11,068 [Controller] [INFO ] Getting Full Thermostat Data for 198772770918
2019-01-07 06:23:45,431 [Controller] [ERROR] Ecobee API Connection error: [Errno 104] Connection reset by peer
2019-01-07 06:23:45,432 [Controller] [ERROR] Failed to get updated data for thermostat: Thermostat(198772770918)
2019-01-07 06:25:04,107 [Controller] [DEBUG] controller:longPoll
2019-01-07 06:25:04,108 [Controller] [DEBUG] controller:updateThermostats:
2019-01-07 06:25:04,109 [Controller] [DEBUG] Tokens valid until: 2019-01-07T06:34:03
2019-01-07 06:25:38,087 [Controller] [ERROR] Ecobee API Connection error: [Errno 104] Connection reset by peer
2019-01-07 06:25:38,088 [Controller] [ERROR] Thermostats instance wasn't dictionary. Skipping...
2019-01-07 06:28:04,108 [Controller] [DEBUG] controller:longPoll
2019-01-07 06:28:04,109 [Controller] [DEBUG] controller:updateThermostats:
2019-01-07 06:28:04,110 [Controller] [DEBUG] Tokens valid until: 2019-01-07T06:34:03
2019-01-07 06:28:15,119 [Controller] [DEBUG] Update detected in thermostat Thermostat(t198772770918) doing full update.
2019-01-07 06:28:15,120 [Controller] [DEBUG] Tokens valid until: 2019-01-07T06:34:03
2019-01-07 06:28:15,121 [Controller] [INFO ] Getting Full Thermostat Data for 198772770918
2019-01-07 06:30:24,660 [Controller] [ERROR] Ecobee API Connection error: [Errno 110] Connection timed out
2019-01-07 06:30:24,661 [Controller] [ERROR] Failed to get updated data for thermostat: Thermostat(198772770918)
2019-01-07 06:31:04,109 [Controller] [DEBUG] controller:longPoll
2019-01-07 06:31:04,110 [Controller] [DEBUG] controller:updateThermostats:
2019-01-07 06:31:04,111 [Controller] [DEBUG] Tokens valid until: 2019-01-07T06:34:03
2019-01-07 06:31:10,675 [Controller] [DEBUG] Update detected in thermostat Thermostat(t198772770918) doing full update.
2019-01-07 06:31:10,683 [Controller] [DEBUG] Tokens valid until: 2019-01-07T06:34:03
2019-01-07 06:31:10,683 [Controller] [INFO ] Getting Full Thermostat Data for 198772770918

Add support for custom named climate type's.

I get the following error when I run the Ecobee Node Server for about 24 hours:

2018-10-16 07:01:53,638 DEBUG Update detected in thermostat Main Floor(511866920242) doing full update.
2018-10-16 07:01:53,640 DEBUG Tokens valid until: 2018-10-16T07:37:52
2018-10-16 07:01:53,641 INFO Getting Full Thermostat Data for 511866920242
2018-10-16 07:01:54,049 ERROR Exception in thread Thread-2:
Traceback (most recent call last):
File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
self.run()
File "/usr/lib/python3.5/threading.py", line 862, in run
self._target(*self._args, **self._kwargs)
File "/home/pi/.local/lib/python3.5/site-packages/polyinterface/polyinterface.py", line 738, in _parseInput
self.longPoll()
File "./ecobee-poly.py", line 176, in longPoll
self.updateThermostats()
File "./ecobee-poly.py", line 189, in updateThermostats
self.nodes[thermostatId].update(thermostat, fullData)
File "/home/pi/.polyglot/nodeservers/Ecobee/node_types.py", line 207, in update
'GV3': climateMap[self.program['currentClimateRef']],
KeyError: 'wakeup'

API issues?

https://forum.universal-devices.com/index.php?/topic/24876-Ecobee-Nodeserver-problem-v2.0.5#entry251115

Tried reinstalling this node server into a brand new slot. Same problem persist:
-changing setpoint does not work when thermostat on hold mode
-changing setpoint when program running changes the actual "comfort setting" - so this is saved permanently moving forward
-changing climate type to other modes doesn't seem to work
Overall, it looks to me like the ecobee API has changed and this nodeserver isn't working correctly.
Sincerely,
Ben

More API issues

https://forum.universal-devices.com/index.php?/topic/24876-Ecobee-Nodeserver-problem-v2.0.5#entry251957

It seem something has changed recently has the changing the mode from Home to Away is not longer working for me. Also changing the transition mode has no effect anymore. It seem I have also similar problem as @beninsteon
 Here a trace stack, when I tried to change mode :

2018-11-28 22:45:17,332 ERROR _parseInput: failed 311013547759.runCmd(CLISMD) int() argument must be a string, a bytes-like object or a number, not 'NoneType'
Traceback (most recent call last):
File "/root/.local/lib/python3.5/site-packages/polyinterface/polyinterface.py", line 726, in _parseInput
self.nodes[input[key]['address']].runCmd(input[key])
File "/root/.local/lib/python3.5/site-packages/polyinterface/polyinterface.py", line 631, in runCmd
fun(self, command)
File "/root/.polyglot/nodeservers/Ecobee/node_types.py", line 263, in cmdSetScheduleMode
heatHoldTemp = int(self.getDriver('CLISPH'))
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

Sensor ID's are not unique when you have multiple thermostats

I have two thermostats for my house and each one has multiple sensors. The problem is when the node server attempts to add the thermostats it uses: sensor['id'] which is not unique across both thermostats. As a result I end up missing sensor nodes inside of my ISY. Whichever one gets added first is the only one to get added.

The following is a summary of my setup and what the sensor['id'] values look like.
Thermostat 1
ei:0 - Thermostat Sensor
rs:100 - Sensor

Thermostat 2
ei:0 - Thermostat Sensor
rs:100 - Sensor
rs:101 - Sensor
rs:102 - Sensor

It could probably be easily fixed by adding the sensor['code'] value to the sensorAddress. But I saw this line: # sensorAddress = 's{}'.format(sensor['code'].lower()) and wasn't sure if there was some reason we couldn't use code.

AttributeError: 'Controller' object has no attribute 'revData'

2019-01-23 17:11:37,438 [Controller] [ERROR] Exception in thread Controller:
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/threading.py", line 917, in _bootstrap_inner
    self.run()
  File "/usr/local/lib/python3.7/threading.py", line 865, in run
    self._target(*self._args, **self._kwargs)
  File "/app/template/pgc_interface/pgc_interface.py", line 713, in _parseInput
    self.longPoll()
  File "./ecobee-poly.py", line 230, in longPoll
    self.updateThermostats()
  File "./ecobee-poly.py", line 248, in updateThermostats
    if self.checkRev(thermostat):
  File "./ecobee-poly.py", line 263, in checkRev
    if tstat['thermostatId'] in self.revData:
AttributeError: 'Controller' object has no attribute 'revData'

Detect Smart-Away

When thermostat went into Smart-Away mode, what does it show in the API?

Issue with custom climate names

The below shows that smart2 is not in the list, so that messes up the ordering. Need to order them by the 'smart>n>' names.

@jimboca  I need to correct my previous statement that custom climates names are fixed for me. To test I manually set a custom climate from the admin console and the correct name came up and I thought it was fixed, I didn't notice that the settings for that name were wrong and next time a custom climate was set from the regular schedule I noticed the name was wrong again. I'm running cloud 2.0.26 and have pasted the discover climates line from the log below. Note that there is no smart2 defined. I'm not sure why, maybe it's a custom climate that I deleted in the past. I tried adding a new test custom and it added as smart5. The custom names and smart(n) names are correct below, however any custom climate setting >2 displays with an offset of +1 in the ISY, i.e., I'm running office PM now and the ISY shows as test.

discover: climates={'311054229478': [{'name': 'Away', 'ref': 'away'}, {'name': 'Home', 'ref': 'home'}, {'name': 'Sleep', 'ref': 'sleep'}, {'name': 'Office AM', 'ref': 'smart1'}, {'name': 'Karen dress', 'ref': 'smart3'}, {'name': 'Office PM', 'ref': 'smart4'}, {'name': 'test', 'ref': 'smart5'}]

Take a look when you get a chance, it's not critical and not sure if anyone else is seeing the problem, but wanted to give you more details.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.