[OBSOLETE] Universal Ecobee Suite, Version 1.8.01

A few things:

  1. Programs continue to change when the HVAC mode is “off”, so you really shouldn’t need to resumeProgram() after turning it back on.

  2. If there isn’t a current Hold, resumeProgram() will silently fail, logging only in the Live Logs that there wasn’t a pending hold. It doesn’t throw an error to the device because the effect is the same…

  3. Any time you run commands back to back, you need to remember that the Ecobee is cloud-based - commands get sent to the cloud, then get picked up by the thermostat at the next check-in, which could be several seconds. Then the thermostat has to acknowledge the request back to the cloud, and then it gets picked up by the next Ecobee Suite Manager’s poll cycle. So, at a minimum, if your cycle time is 1 minute, figure up to 2 minutes before the change Mode command is recognized by my ES Manager/ES Thermostat code.

So, have a look at the Live Logging for the Thermostat and ES Manager to get a better understanding of what is (and isn’t) getting done…

I suppose I should’ve pasted the entire funky, routine. I think ultimately I need to change my comfort settings to achieve the desired behavior. When the Sleep Mode switch turns on, the thermostat is set to sleep mode with an indefinite hold. Sleep mode temp is 68-70. Home mode temp is 72-75. So, to mitigate the heat kicking on in the morning to immediately get the temp up to 72, I’m turning the whole system off for a few hours to let the hot temps outside warm the house to 72. In the colder months, this makes more sense - I want the house to warm up as soon as I get up. But now that it’s warmer, I think the 72-75 temp range doesn’t make sense. I’m gonna change it to 69-75 and immediately resume program when I wake.

I did have the debug log level set to 2 - I set it to 5 a long time ago and it was too chatty. For now, I set it to 4, so maybe I’ll see more helpful information in the logs.

The original “off, wait 3 hours, resume program” routine was working a couple of weeks ago. This started happening around the time ecobee came out with their eco+ software upgrade, so I wasn’t sure if ES was in need of an update (which I did update it).

Thanks, I’ll keep you posted.

You don’t need a higher log-level - ES Manager and ES Thermostat will log the call results to setMode and resumeProgram even at log level 2. If you’re not seeing ANYTHING in the Live Logs indicating a request to change the Mode and the resumeProgram, then maybe I have a bug…

Ecobee won’t upgrade my Ecobee 3’s with Eco+ for another month or two, they say, so I have no way of figuring out if things work differently. I do advise, however, that you don’t turn on any of their Eco+ stuff unless you need it. The weirdest one is the “Feels Like” mode, where it targets temp+humidity setpoints that “feel like” the setpoints you chose.

You might consider a different usage model. I set my Sleep/Home/Away schedules to be close to my “normal”. Then, if I get up early, I set a “until next scheduled change” hold for “Home.” Same with starting Sleep - it goes on at midnight, but if I enable night mode earlier, it sets a temporary hold “until next scheduled change”. And I created the “Working from Home” helper to switch the default “Away” (all day) back to Home if I’m still home after a certain time. The only time I use a Permanent Hold is for my Vacation Mode…

I’d be wary about the new Eco+ that seeks to change your schedule based on what it learns about your cycles…

(BTW, I would suggest disabling the Hold BEFORE turning off the HVAC Mode…that will likely be more reliable…)

See my webcore logs and ES log screenshot in my original post. It logs the request and receipt for the ‘set mode to auto’ event, but only the request for the ‘resume program’ event. I’ve disabled eco+ as much as I can; everything is disabled except the partner program feature, which I can’t disable without going through my utility provider. That was enabled before eco+ was a thing, so I don’t think it’s causing any conflicts. Maybe I needed to wait 5 secs or so before issuing the resume program command? Thanks for the suggestion to disable the hold before turning off the hvac mode.

I’m sorry, but you’ll have to trust me on this: neither the WebCore log nor the device event log (in your two screen shots) tells us what ES Manager/ES Thermostat report when they make the actual calls to the Ecobee cloud.

You can only see what is going on between the ES Thermostat device, ES Manager and the Ecobee Cloud by looking at Live Logging in the IDE…

NOTICE: As of 5 August 2020, Ecobee Suite now supports Ecobee’s new authentication scheme

See here for more information

# IMPORTANT WARNING ABOUT ECOBEE 2-FACTOR AUTHENTICATION

Over the past couple of weeks, several users have reported that they are unable to authenticate with Ecobee.

Ecobee Support has acknowledged that there is a problem with 2-Factor Authentication that breaks 3rd party application authentication. Apparently, once you turn 2FA, you won’t be able to authenticate any new applications, even if you turn 2FA back off!

Existing applications that are already authenticated seem to continue to operate properly.

Therefore, I recommend to my users:

DO NOT TURN ON ECOBEE 2-FACTOR AUTHENTICATION, UNDER ANY CIRCUMSTANCES!!!

NOTE: You may have to authenticate again due to an Ecobee server outage, so please don’t turn 2FA on even if you have already authenticated.

Ecobee Support says they are working on the problem - I will post an update once I hear that they have fixed their issue.

1 Like

ah, ok. i was confusing the live ide with the device event log. thanks!

It looks like there may be a problem with the ‘resume program’ command? The logs say no current hold when there seemingly was one. The switch behavior is now:

on: set program to ‘sleep’ with indefinite hold (didn’t change)
off: resume program

The resume program alone isn’t working either. There is a curious groovy error in the thermostat logs every 5 minutes, but I don’t think it’s related to this particular issue? Here are the live logs:

ES Manager 8:33:38 AM: trace Sensor data: [ecobee_suite-sensor-rs:100-M4XX:[name:Bedroom, data:[eventsUpdated:2020-05-02 08:33:37]]]
ES Manager 8:33:38 AM: debug updateSensorData() - Sensor Bedroom, sensorDNI == ecobee_suite-sensor-rs:100-M4XX
ES Manager 8:33:38 AM: trace updateSensorData() - Updated these remoteSensors: [ecobee_suite-sensor-rs:100-M4XX:[name:Bedroom, data:[eventsUpdated:2020-05-02 08:33:37]]]
ES Manager 8:33:38 AM: trace updateSensorData() - sensorCollector being updated with sensorData: [eventsUpdated:2020-05-02 08:33:37]
ES Manager 8:33:38 AM: debug updateSensorData() - Sensor Living Room, sensorDNI == ecobee_suite-sensor_tstat-ei:0-Living Room
ES Manager 8:33:38 AM: info 1 update for 1 sensor (Bedroom)
ES Manager 8:33:37 AM: info Living Room -> scheduledClimateId: home, scheduledClimateName: Home, scheduledClimateOwner: system, scheduledClimateType: program, climatesList: [Away, Home, Sleep]
ES Manager 8:33:37 AM: debug Entered updateSensorData() [311014448992:[[capability:[[id:1, type:temperature, value:710], [id:2, type:occupancy, value:true]], code:M4XX, id:rs:100, inUse:true, name:Bedroom, type:ecobee3_remote_sensor], [capability:[[id:1, type:temperature, value:709], [id:2, type:humidity, value:51], [id:3, type:occupancy, value:true]], id:ei:0, inUse:true, name:Living Room, type:thermostat]]]
ES Manager 8:33:37 AM: trace Found a running Event: [coolHoldTemp:700, coolRelativeTemp:0, drRampUpTemp:0, drRampUpTime:3600, dutyCyclePercentage:255, endDate:2035-01-01, endTime:00:00:00, fan:auto, fanMinOnTime:0, heatHoldTemp:680, heatRelativeTemp:0, holdClimateRef:sleep, isCoolOff:false, isHeatOff:false, isOccupied:true, isOptional:true, isTemperatureAbsolute:true, isTemperatureRelative:false, linkRef:, name:auto, occupiedSensorActive:false, running:true, startDate:2020-05-02, startTime:08:31:11, type:hold, unoccupiedSensorActive:false, vent:off, ventilatorMinOnTime:5]
ES Manager 8:33:37 AM: trace updateThermostatData() - Event data updated for thermostat Living Room (311014448992) = [[lastPoll:full @ 2020-05-02 08:33:37 CDT], [ventilatorMinOnTime:5], [currentProgram:Sleep], [currentProgramName:Hold: Sleep, schedule:Hold: Sleep until 2035-01-01 00:00:00], [currentProgramId:sleep], [holdEndDate:2035-01-01 00:00:00, schedText: until 2035-01-01 00:00:00], [thermostatHold:hold], [holdEndsAt:a long time from now], [holdStatus:Hold ends a long time from now], [eventsUpdated:2020-05-02 08:33:37]]
ES Manager 8:33:37 AM: info 11 updates for 1 thermostat (Living Room)
ES Manager 8:33:37 AM: trace updateThermostatData() - updatesLog: [alertsUpdated:false, changedTids:[311014448992], equipUpdated:false, extendRTUpdated:false, forcePoll:false, getWeather:false, runtimeUpdated:false, thermostatUpdated:true, weatherUpdated:false]
ES Manager 8:33:37 AM: trace updateThermostatData(Living Room 311014448992) - currentClimateRef: home, currentClimate: Sleep, currentClimateName: Hold: Sleep, currentClimateId: sleep, currentClimateOwner: system, currentClimateType: program, thermostatHold: hold
ES Manager 8:33:37 AM: info pollEcobeeAPICallback() - Parsing complete
ES Manager 8:33:37 AM: info pollEcobeeAPICallback() - Parsing data for thermostat (311014448992)
ES Manager 8:33:37 AM: trace pollEcobeeAPICallback() - status code 200
ES Manager 8:33:37 AM: info =====> pollEcobeeAPICallback() entered - thermostatIdsString = 311014448992
Thermostat 8:33:38 AM: error groovy.lang.MissingMethodException: No signature of method: script_dth_8c0ca28dc230c994c9dcb13574679d3149c7133a8fce19f7ea469b905cc920ba.generateEvent() is applicable for argument types: (java.util.ArrayList) values: [[[lastPoll:full @ 2020-05-02 08:33:37 CDT], [ventilatorMinOnTime:5], ...]]
Possible solutions: generateEvent(java.util.Map), createEvent(java.util.Map) @line 2149 (doCall)
ES Manager 8:33:37 AM: trace checkThermostatSummary() - pollParams: [uri:https://api.ecobee.com, path:/1/thermostatSummary, headers:[Content-Type:application/json, Authorization:Bearer <redacted>], query:[format:json, body:{"selection":{"selectionType":"thermostats","selectionMatch":"311014448992","includeEquipmentStatus":"true"}}], timeout:30]
ES Manager 8:33:37 AM: info getChildThermostatDeviceIdsString() - !singleStat returning the list for all thermostats
ES Manager 8:33:37 AM: trace checkThermostatSummary() - poll results returned resp.data [revisionList:[311014448992:Living Room:true:200502133141:200501185408:200502132824:200502131000], status:[code:0, message:], statusList:[311014448992:], thermostatCount:1]
ES Manager 8:33:37 AM: trace isDaemonAlive(watchdog) - timeSinceLastScheduledWatchdog=(6.1671333333) Timestamps: (2020-05-02 08:27:27 CDT) (epic: 1588426047105) now-(1588426417135)
ES Manager 8:33:37 AM: trace After watchdog tagging
ES Manager 8:33:37 AM: trace pollScheduled() - Running at 2020-05-02 08:33:37 CDT (epic: 1588426417079)
ES Manager 8:33:37 AM: trace scheduleWatchdog() called with evt (null) & local (true)
ES Manager 8:33:37 AM: info isDaemonAlive() - Time since last poll? 0.0008333333 -- lastScheduledPoll == 1588426417079
ES Manager 8:33:37 AM: trace isDaemonAlive() - now() == 1588426417124 for daemon (poll)
ES Manager 8:33:37 AM: trace =====> pollChildren() - forcePoll(false) atomicState.lastPoll(1588426117616) now(1588426417111) atomicState.lastPollDate(2020-05-02 08:28:37 CDT)
ES Manager 8:33:37 AM: trace pollChildren(, false)
ES Manager 8:33:37 AM: trace Checking for updates...
Thermostat 8:31:40 AM: info resumeProgram() - No current hold
VirtSwitch 8:31:35 AM: debug PUBLISHED off()
VirtSwitch 8:31:35 AM: debug PUBLISHED off()
ES Manager 8:31:11 AM: trace Successful call to ecobee API.
Thermostat 8:31:11 AM: info Updated 1 object (29ms)
ES Manager 8:31:11 AM: debug sendJson() - {"functions":[{"type":"setHold","params":{"holdClimateRef":"sleep","holdType":"indefinite"}}],"selection":{"selectionType":"thermostats","selectionMatch":"311014448992"}}
Thermostat 8:31:11 AM: debug Ecobee Suite Manager: setProgram() for EcobeeTherm: Living Room (311014448992) - climateRef = sleep (trace)
ES Manager 8:31:11 AM: trace sendJson() resp.status 200, resp.data: [status:[code:0, message:]], returnStatus: 0
ES Manager 8:31:11 AM: trace setProgram() for EcobeeTherm: Living Room (311014448992) - climateRef = sleep
Thermostat 8:31:11 AM: debug Ecobee Suite Manager: climate - {[climateRef:sleep, colour:2179683, coolFan:auto, coolTemp:700, heatFan:auto, heatTemp:680, isOccupied:true, isOptimized:false, name:Sleep, owner:system, sensors:[[id:ei:0:1, name:Living Room], [id:rs:100:1, name:Bedroom]], type:program, vent:off, ventilatorMinOnTime:20]} (debug)
ES Manager 8:31:11 AM: debug climate - {[climateRef:sleep, colour:2179683, coolFan:auto, coolTemp:700, heatFan:auto, heatTemp:680, isOccupied:true, isOptimized:false, name:Sleep, owner:system, sensors:[[id:ei:0:1, name:Living Room], [id:rs:100:1, name:Bedroom]], type:program, vent:off, ventilatorMinOnTime:20]}
ES Manager 8:31:10 AM: trace checkThermostatSummary() - 311014448992
Thermostat 8:31:11 AM: info Using holdType indefinite
ES Manager 8:31:11 AM: info setProgram(Sleep) for EcobeeTherm: Living Room (311014448992) - holdType: indefinite
ES Manager 8:31:11 AM: trace No updates
ES Manager 8:31:11 AM: debug climates - {[[climateRef:home, colour:13560055, coolFan:auto, coolTemp:750, heatFan:auto, heatTemp:690, isOccupied:true, isOptimized:false, name:Home, owner:system, sensors:[[id:ei:0:1, name:Living Room], [id:rs:100:1, name:Bedroom]], type:program, vent:off, ventilatorMinOnTime:20], [climateRef:sleep, colour:2179683, coolFan:auto, coolTemp:700, heatFan:auto, heatTemp:680, isOccupied:true, isOptimized:false, name:Sleep, owner:system, sensors:[[id:ei:0:1, name:Living Room], [id:rs:100:1, name:Bedroom]], type:program, vent:off, ventilatorMinOnTime:20], [climateRef:away, colour:9021815, coolFan:auto, coolTemp:780, heatFan:auto, heatTemp:680, isOccupied:false, isOptimized:true, name:Away, owner:system, sensors:[[id:ei:0:1, name:Living Room], [id:rs:100:1, name:Bedroom]], type:program, vent:off, ventilatorMinOnTime:20]]}
ES Manager 8:31:11 AM: info <===== Leaving checkThermostatSummary() result: false, tstats:
ES Manager 8:31:11 AM: trace checkThermostatSummary() - poll results returned resp.data [revisionList:[311014448992:Living Room:true:200502132611:200501185408:200502132824:200502131000], status:[code:0, message:], statusList:[311014448992:], thermostatCount:1]
Thermostat 8:31:11 AM: debug Ecobee Suite Manager: setProgram(Sleep) for EcobeeTherm: Living Room (311014448992) - holdType: indefinite (info)
ES Manager 8:31:10 AM: trace checkThermostatSummary() - pollParams: [uri:https://api.ecobee.com, path:/1/thermostatSummary, headers:[Content-Type:application/json, Authorization:Bearer <redact>], query:[format:json, body:{"selection":{"selectionType":"thermostats","selectionMatch":"311014448992","includeEquipmentStatus":"true"}}], timeout:30]
ES Manager 8:31:10 AM: trace isDaemonAlive() - result is true
ES Manager 8:31:10 AM: trace After watchdog tagging
ES Manager 8:31:10 AM: trace isDaemonAlive() - Checking daemon (poll) in 'poll'
ES Manager 8:31:10 AM: trace isDaemonAlive() - now() == 1588426270834 for daemon (watchdog)
ES Manager 8:31:10 AM: warn scheduleWatchdog() --> pollAlive==true watchdogAlive==true
ES Manager 8:31:10 AM: trace isDaemonAlive(watchdog) - timeSinceLastScheduledWatchdog=(3.7288666667) Timestamps: (2020-05-02 08:27:27 CDT) (epic: 1588426047105) now-(1588426270839)
ES Manager 8:31:10 AM: trace isDaemonAlive() - Checking daemon (watchdog) in 'watchdog'
ES Manager 8:31:10 AM: trace isDaemonAlive() - result is true
ES Manager 8:31:10 AM: info isDaemonAlive() - Time since last poll? 2.5631833333 -- lastScheduledPoll == 1588426117040
ES Manager 8:31:10 AM: info isDaemonAlive() - Time since watchdog activation? 3.7288666667 -- lastScheduledWatchdog == 1588426047105
ES Manager 8:31:10 AM: trace isDaemonAlive() - now() == 1588426270825 for daemon (poll)
ES Manager 8:31:10 AM: trace scheduleWatchdog() called with evt (null) & local (true)
ES Manager 8:31:10 AM: trace pollChildren(311014448992, false)
ES Manager 8:31:10 AM: trace =====> pollChildren(311014448992) - forcePoll(false) atomicState.lastPoll(1588426117616) now(1588426270806) atomicState.lastPollDate(2020-05-02 08:28:37 CDT)
ES Manager 8:31:10 AM: info getChildThermostatDeviceIdsString() - !singleStat returning the list for all thermostats
ES Manager 8:31:10 AM: trace Checking for updates...
Thermostat 8:31:10 AM: info refresh() - calling pollChildren , deviceId = 311014448992
VirtSwitch 8:31:09 AM: debug PUBLISHED on()
 8:30:38 AM: info Waiting on events...
 8:30:38 AM: info For past logs for individual things go to the My Devices section, find the device and click on the Events link on the device information page.
 8:30:38 AM: info This console provides live logging of your SmartThings.

A few things:

  1. If you are going to be using WebCoRE with Ecobee Suite, you’ll need to set your cycle time to 1 minute

  2. When testing (as in real life), you need to wait AT LEAST 2 CYCLES between setProgram() (@ 8:31:11) and resumeProgram() (@ 8:31:40), to give time for the API round trips to complete. In this case, you have tried to resumeProgram() before the setProgram() has made the round trips, so the log (correctly) shows that there is no current hold (yet).

  3. EDIT Fix for the error posted as Ecobee Suite Manager version 1.8.38a

  4. EDIT POSSIBLE fix for the Hold problem posted as Ecobee Suite Manager 1.8.38b

Perhaps try running a test with more time between setting the Hold and then trying to undo it.

Thanks!

I updated ESM, but unfortunately the resume command still doesn’t work. Here are the ESM logs when I turned the switch on - this correctly set the program to sleep with an indefinite hold:

1c9e4fb0 9:36:31 AM: trace Prep complete (313ms)
1c9e4fb0 9:36:31 AM: info Polling 311014448992 completed
1c9e4fb0 9:36:32 AM: trace Updates sent (559 / 3490ms)
1c9e4fb0 9:36:32 AM: trace <===== Leaving pollEcobeeAPICallback() results: true
1c9e4fb0 9:36:31 AM: debug updateSensorData() - Sensor Living Room, sensorDNI == ecobee_suite-sensor_tstat-ei:0-Living Room
1c9e4fb0 9:36:31 AM: trace Sensor data: [ecobee_suite-sensor-rs:100-M4XX:[name:Bedroom, data:[eventsUpdated:2020-05-03 09:36:29]]]
1c9e4fb0 9:36:31 AM: trace updateSensorData() - Updated these remoteSensors: [ecobee_suite-sensor-rs:100-M4XX:[name:Bedroom, data:[eventsUpdated:2020-05-03 09:36:29]]]
1c9e4fb0 9:36:31 AM: trace updateSensorData() - sensorCollector being updated with sensorData: [eventsUpdated:2020-05-03 09:36:29]
1c9e4fb0 9:36:31 AM: trace updateThermostatData() - Event data updated for thermostat Living Room (311014448992) = [[lastPoll:full @ 2020-05-03 09:36:31 CDT], [ventilatorMinOnTime:5], [currentProgram:Sleep], [currentProgramName:Hold: Sleep, schedule:Hold: Sleep until 2035-01-01 00:00:00], [currentProgramId:sleep], [holdEndDate:2035-01-01 00:00:00, schedText: until 2035-01-01 00:00:00], [thermostatHold:hold], [holdEndsAt:a long time from now], [holdStatus:Hold ends a long time from now], [eventsUpdated:2020-05-03 09:36:29]]
1c9e4fb0 9:36:31 AM: info forcePoll
1c9e4fb0 9:36:31 AM: info =====> pollEcobeeAPICallback() entered - thermostatIdsString = 311014448992
1c9e4fb0 9:36:29 AM: info getChildThermostatDeviceIdsString() - !singleStat returning the list for all thermostats
1c9e4fb0 9:36:29 AM: trace pollEcobeeAPI() - jsonRequestBody is: {"selection":{"selectionType":"thermostats","selectionMatch":"311014448992","includeEquipmentStatus":"true","includeSettings":"true","includeProgram":"true","includeEvents":"true","includeAudio":"true"}}
1c9e4fb0 9:36:28 AM: trace checkThermostatSummary() - 311014448992
1c9e4fb0 9:36:28 AM: trace It has only been 0.2464666667 since last scheduleWatchdog was called. Please come back later.
1c9e4fb0 9:36:28 AM: trace scheduleWatchdog() called with evt (null) & local (true)
1c9e4fb0 9:36:29 AM: info <===== Leaving checkThermostatSummary() result: true, tstats: 311014448992
1c9e4fb0 9:36:29 AM: info Polling 311014448992
1c9e4fb0 9:36:28 AM: trace Checking for updates...
1c9e4fb0 9:36:14 AM: warn scheduleWatchdog() --> pollAlive==true watchdogAlive==true
1c9e4fb0 9:36:14 AM: trace After watchdog tagging
1c9e4fb0 9:36:14 AM: trace isDaemonAlive() - result is true
1c9e4fb0 9:36:14 AM: trace isDaemonAlive(watchdog) - timeSinceLastScheduledWatchdog=(0.0007166667) Timestamps: (2020-05-03 09:36:14 CDT) (epic: 1588516574093) now-(1588516574139)
1c9e4fb0 9:36:14 AM: trace isDaemonAlive() - Checking daemon (watchdog) in 'watchdog'
1c9e4fb0 9:36:14 AM: info isDaemonAlive() - Time since watchdog activation? 0.0007166667 -- lastScheduledWatchdog == 1588516574093
1c9e4fb0 9:36:14 AM: trace isDaemonAlive() - now() == 1588516574134 for daemon (watchdog)
1c9e4fb0 9:36:14 AM: trace isDaemonAlive() - result is true
1c9e4fb0 9:36:14 AM: trace isDaemonAlive() - Checking daemon (poll) in 'poll'
1c9e4fb0 9:36:14 AM: info isDaemonAlive() - Time since last poll? 4.7849333333 -- lastScheduledPoll == 1588516287037
1c9e4fb0 9:36:14 AM: trace isDaemonAlive() - now() == 1588516574126 for daemon (poll)
1c9e4fb0 9:36:14 AM: trace scheduleWatchdog() called with evt (null) & local (false)
1c9e4fb0 9:36:14 AM: trace scheduleWatchdog() called with evt (null) & local (false)
1c9e4fb0 9:34:39 AM: info setProgram(sleep) for EcobeeTherm: Living Room (311014448992): [[heatingSetpoint:68], [coolingSetpoint:70], [currentProgram:Sleep], [currentProgramId:sleep], [thermostatHold:hold]]
1c9e4fb0 9:34:39 AM: trace setProgram() for thermostat EcobeeTherm: Living Room: about to sendJson with jsonRequestBody ({"functions":[{"type":"setHold","params":{"holdClimateRef":"sleep","holdType":"indefinite"}}],"selection":{"selectionType":"thermostats","selectionMatch":"311014448992"}}
1c9e4fb0 9:34:38 AM: info getChildThermostatDeviceIdsString() - !singleStat returning the list for all thermostats
1c9e4fb0 9:34:38 AM: trace pollChildren(311014448992, false)
1c9e4fb0 9:34:38 AM: trace =====> pollChildren(311014448992) - forcePoll(false) atomicState.lastPoll(1588516289453) now(1588516478369) atomicState.lastPollDate(2020-05-03 09:31:29 CDT)
1c9e4fb0 9:34:39 AM: info Polling 311014448992 completed
1c9e4fb0 9:34:39 AM: trace Updates sent (141 / 900ms)
1c9e4fb0 9:34:39 AM: trace <===== Leaving pollEcobeeAPICallback() results: true
1c9e4fb0 9:34:39 AM: trace Prep complete (163ms)
1c9e4fb0 9:34:39 AM: trace updateSensorData() - sensorCollector being updated with sensorData: [temperature:70.9]
1c9e4fb0 9:34:39 AM: debug updateSensorData() - Sensor Living Room, sensorDNI == ecobee_suite-sensor_tstat-ei:0-Living Room
1c9e4fb0 9:34:39 AM: trace Sensor data: [ecobee_suite-sensor-rs:100-M4XX:[name:Bedroom, data:[temperature:70.9]]]
1c9e4fb0 9:34:39 AM: debug Entered updateSensorData() [311014448992:[[capability:[[id:1, type:temperature, value:709], [id:2, type:occupancy, value:true]], code:M4XX, id:rs:100, inUse:true, name:Bedroom, type:ecobee3_remote_sensor], [capability:[[id:1, type:temperature, value:713], [id:2, type:humidity, value:50], [id:3, type:occupancy, value:true]], id:ei:0, inUse:true, name:Living Room, type:thermostat]]]
1c9e4fb0 9:34:39 AM: debug updateSensorData() - Sensor Bedroom, sensorDNI == ecobee_suite-sensor-rs:100-M4XX
1c9e4fb0 9:34:39 AM: info 1 update for 1 sensor (Bedroom)
1c9e4fb0 9:34:39 AM: debug updateSensorData() - Sensor Bedroom temp is 709
1c9e4fb0 9:34:39 AM: trace updateThermostatData() - Event data updated for thermostat Living Room (311014448992) = [[lastPoll:full @ 2020-05-03 09:34:38 CDT], [temperature:71], [runtimeUpdated:2020-05-03 09:34:38], [extendRTUpdated:2020-05-03 09:34:38], [sensorsUpdated:2020-05-03 09:34:38]]
1c9e4fb0 9:34:39 AM: info Living Room data: [[lastPoll:full @ 2020-05-03 09:34:38 CDT], [temperature:71], [runtimeUpdated:2020-05-03 09:34:38], [extendRTUpdated:2020-05-03 09:34:38], [sensorsUpdated:2020-05-03 09:34:38], [thermostatTime:2020-05-03 09:34:38]]
1c9e4fb0 9:34:39 AM: info 6 updates for 1 thermostat (Living Room)
1c9e4fb0 9:34:38 AM: trace updateThermostatData(Living Room 311014448992) - currentClimateRef: home, currentClimate: null, currentClimateName: null, currentClimateId: null, currentClimateOwner: null, currentClimateType: null, thermostatHold: null
1c9e4fb0 9:34:38 AM: trace updateThermostatData() - updatesLog: [alertsUpdated:false, changedTids:[311014448992], equipUpdated:false, extendRTUpdated:true, forcePoll:false, getWeather:false, runtimeUpdated:true, thermostatUpdated:false, weatherUpdated:false]
1c9e4fb0 9:34:38 AM: trace pollEcobeeAPICallback() - T: false, R: true A: false, E: false, e: true
1c9e4fb0 9:34:38 AM: info pollEcobeeAPICallback() - Parsing complete
1c9e4fb0 9:34:38 AM: info =====> pollEcobeeAPICallback() entered - thermostatIdsString = 311014448992

And here are the corresponding thermostat logs:

ef9bd33d 9:41:32 AM: error groovy.lang.MissingMethodException: No signature of method: script_dth_8c0ca28dc230c994c9dcb13574679d3149c7133a8fce19f7ea469b905cc920ba.generateEvent() is applicable for argument types: (java.util.ArrayList) values: [[[equipmentStatus:compCool1,fan], [thermostatOperatingState:cooling], ...]]
Possible solutions: generateEvent(java.util.Map), createEvent(java.util.Map) @line 2150 (doCall)
ef9bd33d 9:36:32 AM: error groovy.lang.MissingMethodException: No signature of method: script_dth_8c0ca28dc230c994c9dcb13574679d3149c7133a8fce19f7ea469b905cc920ba.generateEvent() is applicable for argument types: (java.util.ArrayList) values: [[[lastPoll:full @ 2020-05-03 09:36:31 CDT], [ventilatorMinOnTime:5], ...]]
Possible solutions: generateEvent(java.util.Map), createEvent(java.util.Map) @line 2150 (doCall)
ef9bd33d 9:34:39 AM: info Updated 1 object (31ms)
ef9bd33d 9:34:39 AM: info Updated 1 object (35ms)
ef9bd33d 9:34:39 AM: debug Ecobee Suite Manager: sendJson() resp.status 200, resp.data: [status:[code:0, message:]], returnStatus: 0 (trace)
ef9bd33d 9:34:39 AM: debug Ecobee Suite Manager: setProgram(sleep) for EcobeeTherm: Living Room (311014448992): [[heatingSetpoint:68], [coolingSetpoint:70], [currentProgram:Sleep], [currentProgramId:sleep], [thermostatHold:hold]] (info)
ef9bd33d 9:34:39 AM: info Updated 1 object (33ms)
ef9bd33d 9:34:39 AM: info Updated 1 object (33ms)
ef9bd33d 9:34:39 AM: debug Ecobee Suite Manager: setProgram() for thermostat EcobeeTherm: Living Room: about to sendJson with jsonRequestBody ({"functions":[{"type":"setHold","params":{"holdClimateRef":"sleep","holdType":"indefinite"}}],"selection":{"selectionType":"thermostats","selectionMatch":"311014448992"}} (trace)
ef9bd33d 9:34:39 AM: info Updated 1 object (35ms)
ef9bd33d 9:34:39 AM: debug Ecobee Suite Manager: Successful call to ecobee API. (trace)
ef9bd33d 9:34:38 AM: info Using holdType indefinite
ef9bd33d 9:34:39 AM: error groovy.lang.MissingMethodException: No signature of method: script_dth_8c0ca28dc230c994c9dcb13574679d3149c7133a8fce19f7ea469b905cc920ba.generateEvent() is applicable for argument types: (java.util.ArrayList) values: [[[lastPoll:full @ 2020-05-03 09:34:38 CDT], [temperature:71], ...]]
Possible solutions: generateEvent(java.util.Map), createEvent(java.util.Map) @line 2150 (doCall)
ef9bd33d 9:31:30 AM: error groovy.lang.MissingMethodException: No signature of method: script_dth_8c0ca28dc230c994c9dcb13574679d3149c7133a8fce19f7ea469b905cc920ba.generateEvent() is applicable for argument types: (java.util.ArrayList) values: [[[lastPoll:full @ 2020-05-03 09:31:29 CDT], [heatingSetpoint:69], ...]]
Possible solutions: generateEvent(java.util.Map), createEvent(java.util.Map) @line 2150 (doCall)

Then at 10;43, I turned the switch off, which should issue the resume program command. Curiously, there is no ESM log event for the resume program command:

1c9e4fb0 10:46:15 AM: trace It has only been 0.4635166667 since last scheduleWatchdog was called. Please come back later.
1c9e4fb0 10:46:15 AM: trace scheduleWatchdog() called with evt (null) & local (false)
1c9e4fb0 10:45:50 AM: trace Prep complete (283ms)
1c9e4fb0 10:45:49 AM: debug Entered updateSensorData() [311014448992:[[capability:[[id:1, type:temperature, value:705], [id:2, type:occupancy, value:true]], code:M4XX, id:rs:100, inUse:true, name:Bedroom, type:ecobee3_remote_sensor], [capability:[[id:1, type:temperature, value:709], [id:2, type:humidity, value:50], [id:3, type:occupancy, value:true]], id:ei:0, inUse:true, name:Living Room, type:thermostat]]]
1c9e4fb0 10:45:49 AM: info Living Room data: [[lastPoll:full @ 2020-05-03 10:45:49 CDT], [motion:active], [temperature:71], [runtimeUpdated:2020-05-03 10:45:47], [extendRTUpdated:2020-05-03 10:45:47], [sensorsUpdated:2020-05-03 10:45:47], [thermostatTime:2020-05-03 10:45:47]]
1c9e4fb0 10:45:49 AM: info 7 updates for 1 thermostat (Living Room)
1c9e4fb0 10:45:49 AM: trace Found a running Event: [coolHoldTemp:700, coolRelativeTemp:0, drRampUpTemp:0, drRampUpTime:3600, dutyCyclePercentage:255, endDate:2035-01-01, endTime:00:00:00, fan:auto, fanMinOnTime:0, heatHoldTemp:680, heatRelativeTemp:0, holdClimateRef:sleep, isCoolOff:false, isHeatOff:false, isOccupied:true, isOptional:true, isTemperatureAbsolute:true, isTemperatureRelative:false, linkRef:, name:auto, occupiedSensorActive:false, running:true, startDate:2020-05-03, startTime:09:34:39, type:hold, unoccupiedSensorActive:false, vent:off, ventilatorMinOnTime:5]
1c9e4fb0 10:45:49 AM: debug updateSensorData() - Sensor Bedroom, sensorDNI == ecobee_suite-sensor-rs:100-M4XX
1c9e4fb0 10:45:49 AM: info Living Room -> scheduledClimateId: unknown, scheduledClimateName: Unknown, scheduledClimateOwner: null, scheduledClimateType: null, climatesList: []
1c9e4fb0 10:45:49 AM: trace updateThermostatData() - Event data updated for thermostat Living Room (311014448992) = [[lastPoll:full @ 2020-05-03 10:45:49 CDT], [motion:active], [temperature:71], [runtimeUpdated:2020-05-03 10:45:47], [extendRTUpdated:2020-05-03 10:45:47], [sensorsUpdated:2020-05-03 10:45:47]]
1c9e4fb0 10:45:49 AM: info forcePoll
1c9e4fb0 10:45:49 AM: info pollEcobeeAPICallback() - Parsing data for thermostat (311014448992)
1c9e4fb0 10:45:49 AM: info pollEcobeeAPICallback() - Parsing complete
1c9e4fb0 10:45:47 AM: info getChildThermostatDeviceIdsString() - !singleStat returning the list for all thermostats
1c9e4fb0 10:45:47 AM: trace checkThermostatSummary() - pollParams: [uri:https://api.ecobee.com, path:/1/thermostatSummary, headers:[Content-Type:application/json, Authorization:Bearer <redacted>], query:[format:json, body:{"selection":{"selectionType":"thermostats","selectionMatch":"311014448992","includeEquipmentStatus":"true"}}], timeout:30]
1c9e4fb0 10:45:47 AM: info <===== Leaving checkThermostatSummary() result: true, tstats: 311014448992
1c9e4fb0 10:45:47 AM: trace isDaemonAlive(watchdog) - timeSinceLastScheduledWatchdog=(9.5071833333) Timestamps: (2020-05-03 10:36:16 CDT) (epic: 1588520176851) now-(1588520747285)
1c9e4fb0 10:45:47 AM: trace isDaemonAlive() - Checking daemon (watchdog) in 'watchdog'
1c9e4fb0 10:45:47 AM: trace isDaemonAlive() - Checking daemon (poll) in 'poll'
1c9e4fb0 10:45:47 AM: info isDaemonAlive() - Time since last poll? 0.0015166667 -- lastScheduledPoll == 1588520747186
1c9e4fb0 10:45:47 AM: trace isDaemonAlive() - result is true
1c9e4fb0 10:45:47 AM: trace isDaemonAlive() - now() == 1588520747270 for daemon (poll)
1c9e4fb0 10:45:47 AM: trace Checking for updates...
1c9e4fb0 10:45:47 AM: trace pollScheduled() - Running at 2020-05-03 10:45:47 CDT (epic: 1588520747186)
1c9e4fb0 10:40:49 AM: debug updateSensorData() - Sensor Bedroom temp is 700
1c9e4fb0 10:40:49 AM: trace Prep complete (343ms)
1c9e4fb0 10:40:49 AM: trace Sensor data: [ecobee_suite-sensor-rs:100-M4XX:[name:Bedroom, data:[temperature:70.0]]]
1c9e4fb0 10:40:49 AM: trace updateSensorData() - sensorCollector being updated with sensorData: [temperature:70.0]
1c9e4fb0 10:40:49 AM: debug Entered updateSensorData() [311014448992:[[capability:[[id:1, type:temperature, value:700], [id:2, type:occupancy, value:true]], code:M4XX, id:rs:100, inUse:true, name:Bedroom, type:ecobee3_remote_sensor], [capability:[[id:1, type:temperature, value:705], [id:2, type:humidity, value:50], [id:3, type:occupancy, value:false]], id:ei:0, inUse:true, name:Living Room, type:thermostat]]]
1c9e4fb0 10:40:49 AM: trace updateThermostatData() - Event data updated for thermostat Living Room (311014448992) = [[lastPoll:full @ 2020-05-03 10:40:49 CDT], [motion:inactive], [temperature:70], [humidity:50], [weatherTemperature:76, weatherHumidity:70, weatherDewpoint:66, weatherTempLowForecast:67,66.3,68.1,64,62.5], [runtimeUpdated:2020-05-03 10:40:47], [extendRTUpdated:2020-05-03 10:40:47], [weatherUpdated:2020-05-03 10:40:47], [sensorsUpdated:2020-05-03 10:40:47]]
1c9e4fb0 10:40:49 AM: info forcePoll
1c9e4fb0 10:40:49 AM: trace updateThermostatData() - updatesLog: [alertsUpdated:false, changedTids:[311014448992], equipUpdated:false, extendRTUpdated:true, forcePoll:false, getWeather:true, runtimeUpdated:true, thermostatUpdated:false, weatherUpdated:true]
1c9e4fb0 10:40:49 AM: info =====> pollEcobeeAPICallback() entered - thermostatIdsString = 311014448992
1c9e4fb0 10:40:46 AM: trace checkThermostatSummary() - 311014448992
1c9e4fb0 10:40:47 AM: trace pollEcobeeAPI() - jsonRequestBody is: {"selection":{"selectionType":"thermostats","selectionMatch":"311014448992","includeEquipmentStatus":"true","includeRuntime":"true","includeExtendedRuntime":"true","includeSensors":"true","includeWeather":"true"}}
1c9e4fb0 10:40:46 AM: warn scheduleWatchdog() --> pollAlive==true watchdogAlive==true
1c9e4fb0 10:40:46 AM: trace isDaemonAlive() - now() == 1588520446818 for daemon (watchdog)
1c9e4fb0 10:40:46 AM: trace isDaemonAlive() - Checking daemon (poll) in 'poll'

But you can see the command was received (?) by the thermostat:

ef9bd33d 10:45:50 AM: error groovy.lang.MissingMethodException: No signature of method: script_dth_8c0ca28dc230c994c9dcb13574679d3149c7133a8fce19f7ea469b905cc920ba.generateEvent() is applicable for argument types: (java.util.ArrayList) values: [[[lastPoll:full @ 2020-05-03 10:45:49 CDT], [motion:active], ...]]
Possible solutions: generateEvent(java.util.Map), createEvent(java.util.Map) @line 2150 (doCall)
ef9bd33d 10:43:27 AM: info resumeProgram() - No current hold
ef9bd33d 10:40:50 AM: error groovy.lang.MissingMethodException: No signature of method: script_dth_8c0ca28dc230c994c9dcb13574679d3149c7133a8fce19f7ea469b905cc920ba.generateEvent() is applicable for argument types: (java.util.ArrayList) values: [[[lastPoll:full @ 2020-05-03 10:40:49 CDT], [motion:inactive], ...]]
Possible solutions: generateEvent(java.util.Map), createEvent(java.util.Map) @line 2150 (doCall)

OK, I guess I first have to figure out why you get the error, and I don’t.

Can you please verify the version numbers of ES Manager and ES Thermostat that you are running? Read them from the app & device on your Mobile device, so we know that you are getting the running version.

Thanks!

Good question. Somehow my device type handler was old (v1.7.31) had conflicts between local and github; I don’t recall making any changes to it, but forcing an update from github resolved the issue. Resume program is working now and I’m also no longer seeing the groovy error in the thermostat live logging. Thanks for your time!

1 Like

That’s what I was beginning to suspect…glad to know its working now…

1 Like

Jus tinstalled everything through the repo and got it all started. When I went to the smartvent helper and tried to go through it I see a refresh error when entering heat set point and when I go to save the helper I get
4e019-df4d-47d6-80e3-9fcd19ab94ab 2:38:20 PM: error java.lang.NullPointerException: Cannot invoke method toInteger() on null object @line 913 (setTheVents)

5154e019-df4d-47d6-80e3-9fcd19ab94ab 2:38:20 PM: info Vents should be unchanged

5154e019-df4d-47d6-80e3-9fcd19ab94ab 2:38:20 PM: info EcobeeTherm: Bedroom is idle, room temperature is 70.0°, vents–>unchanged

5154e019-df4d-47d6-80e3-9fcd19ab94ab 2:38:20 PM: debug currentStatus: [s:idle, bs:false, bc:false, op:idle, md:cool, t:70.0, h:69, c:78, nh:null, nc:null]

5154e019-df4d-47d6-80e3-9fcd19ab94ab 2:38:20 PM: info Ecobee Suite Smart Vents & Switches Helper, version 1.8.10 on SmartThings Initializing…

5154e019-df4d-47d6-80e3-9fcd19ab94ab 2:38:20 PM: trace Installed with settings: [tempDisable:false, theSensors:[Master Temp Avg], fanOnlyState:unchanged, infoOff:false, closeFanOnly:false, theHCKeenVents:, debugOff:false, theGenericSwitches:[Keen Vent Master1, Keen Vent Master2], theThermostat:EcobeeTherm: Bedroom, adjustAlways:false, useVirtualStat:true, minimize:false, useThermostat:true, enrollClimates:false

It appears that you have your Keen Vents configured as off/on generic switch devices, and that somehow some cruft got stored as your “HubConnect Keen Vents” selection. Is there a reason that you are not using your Keen Vents as native devices instead of as generic switch devices?

Nope let me try it again and see if I can get it right

figured it out…thx

1 Like

Barry,

It doesn’t look like the setpoints helper is working very well.

The actual modes are:

It also is giving a lot of push messages

Which Helper is this - there are several that adjust setpoints…