Let's talk thermostats and house comfort

I merged the Pull as v1.1.4 and then took it a step further by making temp/perm as a selectable option. v1.1.5

1 Like

I've decided to try the Ecobee 3 lite, even though I'm not comfortable with having the cloud involved.

My thermostat issue is. One of our heating zones (bedroom level) over shoots the temperature in the master bedroom significantly because the physical thermostat is in the hallway. I need to move the thermostat into the bedroom (not a good option) or find a thermostat that can work directly with a remote sensor.

To understand if the ecobee could resolve this overshoot I contacted their support. I learned::

  1. If only one sensor is selected, averaging will be disabled.
  2. There is an algorithm in the thermostat that will "learn" the heating response and shut the heat off early to prevent overshoot.

This information and the current Costco offer for a ecobee 3 lite with 2 sensors drove me to give it a shot.

Regarding my preference to stay away from the cloud. Currently ecobee offers their cloud "service" at no cost. Apparently at the moment new product sales are funding this free service.
ecobee has structured their system to needlessly (in my opinion) RELY on the cloud.

It doesn't take much imagination to consider a paid option down the road. My guess is they will start by offering some "premium" service at some cost.

I don't like relying on the cloud for my Ecobee, either. BUT, it is a darn fine thermostat, and I absolutely need remote sensors, and all (?) of the other remote sensor capable systems need cloud for integration, too - Honeywell, Nest, etc..

Any ideas why this for your TCC driver doesn't actually cause the devices to update every 60 seconds?

runIn(60, poll) // refresh status every 60 seconds

What does the poll command in the app/driver do?

All runIn(60, poll) does is run the "poll" function in the code. What that part of the code does, depends on what they put in there...

It runs a refresh, which works fine run manually and updates status accordingly.

Beats me then. I have written a number of apps and drivers that do periodic refresh, and they do the exactly what is coded? Although I will say I use runevery more than runin.

I don't have a Honeywell thermostat anymore, so can't really help I guess.

It doesn't get called because of a failure within refresh().

You can swap the lines around:
def poll() {
runIn(60, poll) // refresh status every 60 seconds
refresh()
}
if you wish. When I first tested I was getting an error back from Honeywell. Number of queries exceeded. I did something else for a couple hours and then I flipped it around and tried it and refresh() completed.

Hi all,

Is there a way to have Hubitat set the comfort mode on my ecobee?
On my ecobee i have 4 comfort modes:

  1. Home
  2. Away
  3. Sleep
  4. Coming Home (used for my commute home so the heat can get started

I would like to have a rule so that when my Hubitat mode changes, my ecobee comfort settings changes:
Right now i can only do:

  1. If HU mode changes to HOME, set ecobee to resumeProgram(). (using custom commands)
  2. If HU mode changes to AWAY, set ecobee to setAway(). (again using custom commands, HOLDs forever and overrides any schedule on my ecobee.
    I would like to add:
  3. If HU mode changes to Night, set ecobee to my Sleep comfort setting, untill next scheduled change.
  4. If HU mode changes to ......., set ecobee to my .......... comfort setting untill next scheduled change.

It has been requested before....

I am using Day/time.
Early AM - 65 degrees = 4-6 AM
Day = 68 degrees - 6 AM - 10 PM
Night = 62 degrees - 10 PM - 2 AM
Away = 58 degrees
I have thermostat based ambient temp and humidity tiles and a thermostat temp set tile with up and down switches to adjust it one degree at a time on my dashboard

Thanks Matthew appreciate it.

Maybe someone here has a suggestion.

I have a Arduino setup with relays to turn on/off pumps for my hot water heating system. I also have sensors in those heated areas that tell me what the temp is. I have a app that I can set the temp in it and it will do the job. What I am lacking / wanting is a dashboard device / widget that I can use to change the temp. Similar to a dimmer control for a light. That way I wouldn't have to dig into the app settings to change the temp. Is there anything out there that will do this?

How I worked around this is by using an IFTTT WebHook device driver to trigger the IFTTT that would put my ecobee into the right comfort mode.

You can probably find it quickly with a forum search.

Using IFTTT in this situation doesn't but me too much because anything for ecobee control still requires the cloud anyways. But this method does work pretty well.

I then include those virtual buttons in my other rules as needed.

I know i can do that but its not optimal, i would like to lessen the number of hops actions need to take.
Optimaly: HU -> ecobee
Non-optimal: HU -> IFTTT -> ecobee

more points of failure

I know. But until they introduce the integration this is a work around.

I would prefer to have it direct as well.

Are you bypassing Honeywell's TCC by using IFTTT? I haven't worked with IFTTT yet and I'm not really aware of its capabilities.

Also, just fyi, in the driver code that @csteele modified and posted on github, you can change the set points to permanent. There is a default value that is set as temporary.

I'm trying to figure out how I would like to integrate this thermostat with HE, so any input you have would be greatly appreciated.

UPDATE: I just ran across the thread below.

No, IFTTT connects to Honeywell TCC.

Hubitat -> IFTTT -> Honeywell TCC

@csteele Do you have a dedicated thread for your TCC thermostat driver? I couldn't find one, so here I am.

I get sporadic errors - sometimes it works, sometimes it doesn't. Below is a log that shows two instances of the cool setpoint. At time 9:43, it works; st time 9:44, it fails. Is it possible TCC rate-constrains commands?

09:44:52.393 am errorgroovyx.net.http.HttpResponseException: Unauthorized on line 433 (setCoolingSetpoint)
09:44:51.883 am debugparams = [uri:https://www.mytotalconnectcomfort.com/portal/Device/SubmitControlScreenChanges, headers:[Accept:application/json, text/javascript, */*; q=0.01, DNT:1, Accept-Encoding:gzip,deflate,sdch, Cache-Control:max-age=0, Accept-Language:en-US,en,q=0.8, Connection:keep-alive, Host:mytotalconnectcomfort.com, Referer:https://www.mytotalconnectcomfort.com/portal/Device/Control/597062, X-Requested-With:XMLHttpRequest, User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36, Cookie:ASP.NET_SessionId=hmw3fevshfxzfnig1kgga5kp;NSC_NZUDD-443-WT=ffffffff090ecc0545525d5f4f58455e445a4a42378b;], body:[DeviceID:597062, SystemSwitch:null, HeatSetpoint:null, CoolSetpoint:80, HeatNextPeriod:null, CoolNextPeriod:null, StatusHeat:2, StatusCool:2, FanMode:null, ThermostatUnits:F]]
09:44:51.872 am debugsetting cool setpoint to 80
09:44:51.870 am debugsetting heat setpoint to null
09:44:51.868 am debughttps://www.mytotalconnectcomfort.com/portal/Device/SubmitControlScreenChanges
09:44:51.866 am debugExecuting 'setStatus'
09:44:51.865 am debugcookies: ASP.NET_SessionId=hmw3fevshfxzfnig1kgga5kp;NSC_NZUDD-443-WT=ffffffff090ecc0545525d5f4f58455e445a4a42378b;
09:44:51.863 am debugAdding cookie to collection: NSC_NZUDD-443-WT=ffffffff090ecc0545525d5f4f58455e445a4a42378b
09:44:51.861 am debugAdding cookie to collection: ASP.NET_SessionId=hmw3fevshfxzfnig1kgga5kp
09:44:51.857 am debuggroovyx.net.http.HttpResponseDecorator$HeadersDecorator@7fe23bcc
09:44:51.855 am debugRequest was successful, 302
09:44:51.273 am infoExecuting 'login'

09:43:44.895 am infoExecuting 'login'
09:43:23.370 am debugSetStatus is 1 now
09:43:23.363 am debugRequest was successful, 200
09:43:22.454 am debugparams = [uri:https://www.mytotalconnectcomfort.com/portal/Device/SubmitControlScreenChanges, headers:[Accept:application/json, text/javascript, */*; q=0.01, DNT:1, Accept-Encoding:gzip,deflate,sdch, Cache-Control:max-age=0, Accept-Language:en-US,en,q=0.8, Connection:keep-alive, Host:mytotalconnectcomfort.com, Referer:https://www.mytotalconnectcomfort.com/portal/Device/Control/597062, X-Requested-With:XMLHttpRequest, User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36, Cookie:ASP.NET_SessionId=dwpnk03421a5eo2zymmlk2kv;.ASPXAUTH_TRUEHOME=A434BEBB997A901B27952412534CC76191E7F7C3380286CD2DD915D72AD541E91E786C46FBB5615E1D6225B44AD774A7E9D188BA68201EAB6D052073AF00180BE16FD4139B7C10ACF5ADACA9A51F26FF9D52DB34CD9B7BE68C2E14EE1D6EF632853E2B67C8728786914E989DA1786165249628A1E4A25685AF56754FE5B8BBA08DA5CD010B226A92B7D7F3B7D01176387BAF31577F87553077705EC16586F23F3D4AECB56E0CD089F3FF156377D864EEA11AC0719723DA1083146AC3F05FAEC80EB1D65620CB23BF1B2C32A465E1E04337BDD7EADAFB74672EDF7C0EFBCE83B93C803B7EAC68A7DA93503C2F960579791517D87ED735547CFADA3ACA28DC8C3D07E5EB7B8BF3AA00B2B6EDFA01C9FB637468B164889C974A0F20BAD19D7EE9AD98D099D7799E08B7273413E132B1D201547460546D9566C5955194F89190396352609C7F1E758F22669BDAED4CB42D5656974A53;.ASPXAUTH_TRUEHOME_AT=ZpvJ0Pqtdb-fa1zzTc-Lj-lotdRfnZJZ79lGrnSMSGd2JmpLI7zKCXJydTg5sqLPdaRb_vp0D5xVPtI6KBKs6AaS-ouJMDd8TSmq2Ya-ETqMrhALGf0KGRi2Ug-h5cRxBkQ8mKMnN3fplovLrcD8wBAhGoyxAHMgjgtQeCvCzQ_xjvbR0R066IJSpnwP5G30PumWjRaGB9473140baY_IkfTdETV56TR2LEGTAppOssm9J8UnYdFQWnGJMZZ8lukEQEe5Ah1L6rOaADkWiKA5pOT6FqZCPQcH7TYoR1PXioSP5FF1o3JU2xRIvyBaN1fGHbGHotxn3F6haWxs1g-mphFz9H1VdyeBMAKXWVKvp5G7nbi1B4szWzeXLYDtb7RUZ6BwmrYO6JuXHqXKymWIPPf5s0U7rAxMGhdHgxYypi094pX4k8xheDOltGGGE8crBgEvXxrf9mSOOa8qGp7Mw7fHRIfLLwzAvRtF6PcWQ44V3nGxQZ6-oHh3hUdHKUOS8cWv8S-guWWoZlM4G7JESylZhlnaqMhdMXw-iUwVANxzqsrNQvT3CUndWTmADJYEgPlYhLpCLDJci_oief5D7yN8Rb8LznqYBGSdeP4f3b50E1X0Uq-h0-NTGNxjG6ju7DUW0MKOJu42rlBj-Y5OSruynBaMqBLH5LBBg3wCehnaCLG;.ASPXAUTH_TRUEHOME_RT=daCzZQAWmgEfMAD9-Srm-dHIsXqblZDuIYomwdGTNAiXuvaadJwKsLrz7Se1Rl9C9QUQ4xRok8yczTfFCfrxwDS6WIDDERiZO8yOBRGwI-xxkrVIXuKx2oENlamp53TYcKa2lJqGDnlfbn4hBdDYNNKFFEsfXJDqKIUFzCNDD4GhiBqez_kGO1hZrY3T-n4FZE99B74kJWceku6H7aQy3DZyvz4R-mQ0s9PVw1ufcQ8b6__F4wPU18AJoEFTCC9lD4iEl-1Fc1rV-giXHof1m717vxfIg1ZXFcN8Lf1yS393BnLik__IjYpEBmxrjF0PbdDGraZISg8Fiv91YvUbJV18EMmBb9Z1WKSPgmm-G8ChR-Jv7K171gB-jFxJvYB_sT_ZhFE_dlWMZhsYBaAoKwoGHMssZJDoU3CeJHWFkhUFLIsdr1_ddeBlqHoiKwHxDaTtVZrN6MeANIhigl8JaJPiO68-dbPnjvxpumhA7NPi_DJS4lU-YESj5pOvRmmyUKcUH779qLDKB5BC-8w37S_O0QPDwoa2nFBJsxFYqjhupWSR4O9Vp5hybOW_Sa7FOU3sGM9XVCIlaEJe-AHot9Be_bEDDlzkvnEFvlZDwMUhwTLVEdoaV6Rawcp297DrIIRUMOSkkVrR4Bep3P3Ugln5ddvyGlCC-k3nidYGmhaWybx7;thlang=en-US;NSC_NZUDD-443-WT=ffffffff090ecc1d45525d5f4f58455e445a4a42378b;], body:[DeviceID:597062, SystemSwitch:null, HeatSetpoint:null, CoolSetpoint:79, HeatNextPeriod:null, CoolNextPeriod:null, StatusHeat:2, StatusCool:2, FanMode:null, ThermostatUnits:F]]
09:43:22.416 am debugsetting cool setpoint to 79
09:43:22.413 am debugsetting heat setpoint to null
09:43:22.410 am debughttps://www.mytotalconnectcomfort.com/portal/Device/SubmitControlScreenChanges
09:43:22.408 am debugExecuting 'setStatus'
09:43:22.405 am debugcookies: ASP.NET_SessionId=dwpnk03421a5eo2zymmlk2kv;.ASPXAUTH_TRUEHOME=A434BEBB997A901B27952412534CC76191E7F7C3380286CD2DD915D72AD541E91E786C46FBB5615E1D6225B44AD774A7E9D188BA68201EAB6D052073AF00180BE16FD4139B7C10ACF5ADACA9A51F26FF9D52DB34CD9B7BE68C2E14EE1D6EF632853E2B67C8728786914E989DA1786165249628A1E4A25685AF56754FE5B8BBA08DA5CD010B226A92B7D7F3B7D01176387BAF31577F87553077705EC16586F23F3D4AECB56E0CD089F3FF156377D864EEA11AC0719723DA1083146AC3F05FAEC80EB1D65620CB23BF1B2C32A465E1E04337BDD7EADAFB74672EDF7C0EFBCE83B93C803B7EAC68A7DA93503C2F960579791517D87ED735547CFADA3ACA28DC8C3D07E5EB7B8BF3AA00B2B6EDFA01C9FB637468B164889C974A0F20BAD19D7EE9AD98D099D7799E08B7273413E132B1D201547460546D9566C5955194F89190396352609C7F1E758F22669BDAED4CB42D5656974A53;.ASPXAUTH_TRUEHOME_AT=ZpvJ0Pqtdb-fa1zzTc-Lj-lotdRfnZJZ79lGrnSMSGd2JmpLI7zKCXJydTg5sqLPdaRb_vp0D5xVPtI6KBKs6AaS-ouJMDd8TSmq2Ya-ETqMrhALGf0KGRi2Ug-h5cRxBkQ8mKMnN3fplovLrcD8wBAhGoyxAHMgjgtQeCvCzQ_xjvbR0R066IJSpnwP5G30PumWjRaGB9473140baY_IkfTdETV56TR2LEGTAppOssm9J8UnYdFQWnGJMZZ8lukEQEe5Ah1L6rOaADkWiKA5pOT6FqZCPQcH7TYoR1PXioSP5FF1o3JU2xRIvyBaN1fGHbGHotxn3F6haWxs1g-mphFz9H1VdyeBMAKXWVKvp5G7nbi1B4szWzeXLYDtb7RUZ6BwmrYO6JuXHqXKymWIPPf5s0U7rAxMGhdHgxYypi094pX4k8xheDOltGGGE8crBgEvXxrf9mSOOa8qGp7Mw7fHRIfLLwzAvRtF6PcWQ44V3nGxQZ6-oHh3hUdHKUOS8cWv8S-guWWoZlM4G7JESylZhlnaqMhdMXw-iUwVANxzqsrNQvT3CUndWTmADJYEgPlYhLpCLDJci_oief5D7yN8Rb8LznqYBGSdeP4f3b50E1X0Uq-h0-NTGNxjG6ju7DUW0MKOJu42rlBj-Y5OSruynBaMqBLH5LBBg3wCehnaCLG;.ASPXAUTH_TRUEHOME_RT=daCzZQAWmgEfMAD9-Srm-dHIsXqblZDuIYomwdGTNAiXuvaadJwKsLrz7Se1Rl9C9QUQ4xRok8yczTfFCfrxwDS6WIDDERiZO8yOBRGwI-xxkrVIXuKx2oENlamp53TYcKa2lJqGDnlfbn4hBdDYNNKFFEsfXJDqKIUFzCNDD4GhiBqez_kGO1hZrY3T-n4FZE99B74kJWceku6H7aQy3DZyvz4R-mQ0s9PVw1ufcQ8b6__F4wPU18AJoEFTCC9lD4iEl-1Fc1rV-giXHof1m717vxfIg1ZXFcN8Lf1yS393BnLik__IjYpEBmxrjF0PbdDGraZISg8Fiv91YvUbJV18EMmBb9Z1WKSPgmm-G8ChR-Jv7K171gB-jFxJvYB_sT_ZhFE_dlWMZhsYBaAoKwoGHMssZJDoU3CeJHWFkhUFLIsdr1_ddeBlqHoiKwHxDaTtVZrN6MeANIhigl8JaJPiO68-dbPnjvxpumhA7NPi_DJS4lU-YESj5pOvRmmyUKcUH779qLDKB5BC-8w37S_O0QPDwoa2nFBJsxFYqjhupWSR4O9Vp5hybOW_Sa7FOU3sGM9XVCIlaEJe-AHot9Be_bEDDlzkvnEFvlZDwMUhwTLVEdoaV6Rawcp297DrIIRUMOSkkVrR4Bep3P3Ugln5ddvyGlCC-k3nidYGmhaWybx7;thlang=en-US;NSC_NZUDD-443-WT=ffffffff090ecc1d45525d5f4f58455e445a4a42378b;
09:43:22.343 am debugAdding cookie to collection: NSC_NZUDD-443-WT=ffffffff090ecc1d45525d5f4f58455e445a4a42378b
09:43:22.339 am debugAdding cookie to collection: thlang=en-US
09:43:22.337 am debugAdding cookie to collection: .ASPXAUTH_TRUEHOME_RT=daCzZQAWmgEfMAD9-Srm-dHIsXqblZDuIYomwdGTNAiXuvaadJwKsLrz7Se1Rl9C9QUQ4xRok8yczTfFCfrxwDS6WIDDERiZO8yOBRGwI-xxkrVIXuKx2oENlamp53TYcKa2lJqGDnlfbn4hBdDYNNKFFEsfXJDqKIUFzCNDD4GhiBqez_kGO1hZrY3T-n4FZE99B74kJWceku6H7aQy3DZyvz4R-mQ0s9PVw1ufcQ8b6__F4wPU18AJoEFTCC9lD4iEl-1Fc1rV-giXHof1m717vxfIg1ZXFcN8Lf1yS393BnLik__IjYpEBmxrjF0PbdDGraZISg8Fiv91YvUbJV18EMmBb9Z1WKSPgmm-G8ChR-Jv7K171gB-jFxJvYB_sT_ZhFE_dlWMZhsYBaAoKwoGHMssZJDoU3CeJHWFkhUFLIsdr1_ddeBlqHoiKwHxDaTtVZrN6MeANIhigl8JaJPiO68-dbPnjvxpumhA7NPi_DJS4lU-YESj5pOvRmmyUKcUH779qLDKB5BC-8w37S_O0QPDwoa2nFBJsxFYqjhupWSR4O9Vp5hybOW_Sa7FOU3sGM9XVCIlaEJe-AHot9Be_bEDDlzkvnEFvlZDwMUhwTLVEdoaV6Rawcp297DrIIRUMOSkkVrR4Bep3P3Ugln5ddvyGlCC-k3nidYGmhaWybx7
09:43:22.332 am debugAdding cookie to collection: .ASPXAUTH_TRUEHOME_AT=ZpvJ0Pqtdb-fa1zzTc-Lj-lotdRfnZJZ79lGrnSMSGd2JmpLI7zKCXJydTg5sqLPdaRb_vp0D5xVPtI6KBKs6AaS-ouJMDd8TSmq2Ya-ETqMrhALGf0KGRi2Ug-h5cRxBkQ8mKMnN3fplovLrcD8wBAhGoyxAHMgjgtQeCvCzQ_xjvbR0R066IJSpnwP5G30PumWjRaGB9473140baY_IkfTdETV56TR2LEGTAppOssm9J8UnYdFQWnGJMZZ8lukEQEe5Ah1L6rOaADkWiKA5pOT6FqZCPQcH7TYoR1PXioSP5FF1o3JU2xRIvyBaN1fGHbGHotxn3F6haWxs1g-mphFz9H1VdyeBMAKXWVKvp5G7nbi1B4szWzeXLYDtb7RUZ6BwmrYO6JuXHqXKymWIPPf5s0U7rAxMGhdHgxYypi094pX4k8xheDOltGGGE8crBgEvXxrf9mSOOa8qGp7Mw7fHRIfLLwzAvRtF6PcWQ44V3nGxQZ6-oHh3hUdHKUOS8cWv8S-guWWoZlM4G7JESylZhlnaqMhdMXw-iUwVANxzqsrNQvT3CUndWTmADJYEgPlYhLpCLDJci_oief5D7yN8Rb8LznqYBGSdeP4f3b50E1X0Uq-h0-NTGNxjG6ju7DUW0MKOJu42rlBj-Y5OSruynBaMqBLH5LBBg3wCehnaCLG
09:43:22.328 am debugAdding cookie to collection: .ASPXAUTH_TRUEHOME=A434BEBB997A901B27952412534CC76191E7F7C3380286CD2DD915D72AD541E91E786C46FBB5615E1D6225B44AD774A7E9D188BA68201EAB6D052073AF00180BE16FD4139B7C10ACF5ADACA9A51F26FF9D52DB34CD9B7BE68C2E14EE1D6EF632853E2B67C8728786914E989DA1786165249628A1E4A25685AF56754FE5B8BBA08DA5CD010B226A92B7D7F3B7D01176387BAF31577F87553077705EC16586F23F3D4AECB56E0CD089F3FF156377D864EEA11AC0719723DA1083146AC3F05FAEC80EB1D65620CB23BF1B2C32A465E1E04337BDD7EADAFB74672EDF7C0EFBCE83B93C803B7EAC68A7DA93503C2F960579791517D87ED735547CFADA3ACA28DC8C3D07E5EB7B8BF3AA00B2B6EDFA01C9FB637468B164889C974A0F20BAD19D7EE9AD98D099D7799E08B7273413E132B1D201547460546D9566C5955194F89190396352609C7F1E758F22669BDAED4CB42D5656974A53
09:43:22.315 am debugAdding cookie to collection: ASP.NET_SessionId=dwpnk03421a5eo2zymmlk2kv
09:43:22.311 am debuggroovyx.net.http.HttpResponseDecorator$HeadersDecorator@660a6b33
09:43:22.301 am debugRequest was successful, 302
09:43:21.621 am infoExecuting 'login'

Thanks for any help or suggestions!

Yes, that's what my logs looked like too but now I don't poll very often 1) to reduce the errors, and 2) because I simply don't do much with the device. Every 3 months or so, I toggle Heat --> off --> Cool --> off --> Heat. More or less corresponding to Winter --> Spring --> Summer -- > Fall --> Winter

I have debugging off too, but at every hour:

dev:1212019-03-30 07:36:38.831 am infoSet Fan operating State to: On
dev:1212019-03-30 07:36:38.829 am infoSet operating State to: Heating
dev:1212019-03-30 07:36:37.572 am infoExecuting 'login'
dev:1212019-03-30 07:36:37.518 am infoin poll: 120
dev:1212019-03-30 06:36:38.840 am infoSet Fan operating State to: Idle
dev:1212019-03-30 06:36:38.837 am infoSet operating State to: Idle
dev:1212019-03-30 06:36:37.522 am infoExecuting 'login'
dev:1212019-03-30 06:36:37.486 am infoin poll: 120
dev:1212019-03-30 05:36:39.135 am infoSet Fan operating State to: Idle
dev:1212019-03-30 05:36:39.132 am infoSet operating State to: Idle
dev:1212019-03-30 05:36:37.565 am infoExecuting 'login'
dev:1212019-03-30 05:36:37.462 am infoin poll: 120
dev:1212019-03-30 04:36:39.581 am infoSet Fan operating State to: Idle
dev:1212019-03-30 04:36:39.579 am infoSet operating State to: Idle
dev:1212019-03-30 04:36:37.507 am infoExecuting 'login'
dev:1212019-03-30 04:36:37.426 am infoin poll: 120

I'm not seeing the Unauthorized error.

It's been a while since I worked on that driver but I would set the poll time to minimum, in order to test and I'd see Unauthorized a lot. (Editing the code and saving causes an instant poll and often, an instant Unauthorized.)