einstein42 / udi-ecobee-poly Goto Github PK
View Code? Open in Web Editor NEWEcobee Poly
License: MIT License
Ecobee Poly
License: MIT License
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'}]}}
Currently there is a sleep 3 in the controller after adding the Thermostat to give time for the node to be created, instead this should be done in the Thermostat after start is done.
i get errors when i try to install
https://drive.google.com/open?id=1eZFWNGAOOCHKhoh1fC8C6YN_Igr3wjQd
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'
Please see attached video
https://drive.google.com/open?id=1mHi7XeO41nunt0wKQiVOTuYS52GDg2mb
Am I doing something wrong?
I have 2 ecobees in my house with 4 sensors
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
Should it be a driver so it can be set in the Admin Console or a Polyglot Param? Probably a driver since users would want to set differently for each thermostat.
Can this be changed to simply hold the settings as they are indefinitely?
It's supposed to make the hold take affect based on the current settings, but sounds like it's not doing that for you, I will check.
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
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?
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.
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
https://www.ecobee.com/home/developer/api/documentation/v1/objects/Settings.shtml
fanControlRequired | Boolean | no | no | Whether fan control by the Thermostat is required in auxiliary heating (gas/electric/boiler), otherwise controlled by furnace. |
---|
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': ''}]}
For PR #46 a quick fix was implemented by adding wakeup to all, but should only be included when it is actually available
https://www.ecobee.com/home/developer/api/documentation/v1/objects/Climate.shtml
Should get this list from the thermostat
https://www.ecobee.com/home/developer/api/documentation/v1/objects/Program.shtml
And add unknown since some code relies on that name existing.
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.
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...
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
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'
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.
---------- 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 ******************************
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
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}
https://forum.universal-devices.com/index.php?/topic/25324-Polyglot-V2-Ecobee-Nodeserver#entry255734
Should add a responding driver and set to false when that is seen?
Changing setpoint when program running changes the actual "comfort setting" - so this is saved permanently moving forward
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
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?
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
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'
What do they report when not communicating, like when batter dies.
Do they report when battery is low?
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
What am I doing wrong?
2018-12-11 21:21:21,635 [Controller] [INFO ] Posting Update Data for Thermostat 411956665463
2018-12-11 21:21:21,636 [Controller] [DEBUG] Post Data : {
"functions": [
{
"params": {
"holdClimateRef": "home",
"holdType": "indefinite"
},
"type": "setHold"
}
]
}
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'
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.
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'
When thermostat went into Smart-Away mode, what does it show in the API?
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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.