Tried this, unfortunately without success (i.e. I keep getting PIN ‘null’). But these two lines from the log may point to the problem:
19:15:47.158 [TRACE] [inding.ecobee.internal.EcobeeBinding] - Request: AuthorizeRequest[appKey=ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHI,scope=smartWrite]
19:15:48.056 [TRACE] [inding.ecobee.internal.EcobeeBinding] - Response: AuthorizeResponse[error=invalid_client,errorDescription=Authentication error, invalid authentication method, lack of credentials, etc.,errorURI=https://tools.ietf.org/html/rfc6749#section-5.2,ecobeePin=<null>,authToken=<null>,scope=<null>,expiresIn=<null>,interval=<null>]
Apparently the ecobee (portal?) is not happy with the appKey. I’ve also tried 9T4huoUXlT5b5qNpEJvM5sqTMgaNCFoV - same result. Curiously, if I comment out the appkey, the binding still uses ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHI for authentication, so perhaps that’s a default “baked” into the binding. At any rate, I always get PIN ‘null’.
If I understand correctly, these keys are just “stand-ins” for the actual key, which I will get using the “elusive” 4 digit pin. So the error kind of makes sense: I am specifying a bogus appkey just to get the pin.
How did you and others get over this hurdle?
Below are my full configuration and the complete log.
ecobee.cfg:
################################ Ecobee Binding #######################################
#
# the private API key issued be Ecobee to use the API (required, replace with your own)
appkey=ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHI
# appkey=9T4huoUXlT5b5qNpEJvM5sqTMgaNCFoV
# the application scope used when authorizing the binding
# choices are smartWrite,smartRead, or ems, or multiple (required, comma-separated, no spaces)
scope=smartWrite
# Rate at which to check if poll is to run, in ms (as of 1.8, optional, defaults to 5000)
#ecobee:granularity=5000
# Data refresh interval in ms (optional, defaults to 180000)
#refresh=180000
# Time in ms to wait after successful update, command or action before refresh (as of 1.8, optional, defaults to 6000)
#quickpoll=6000
# Time in ms to allow an API request to complete (as of 1.8, optional, defaults to 20000)
#timeout=20000
# the temperature scale to use when sending or receiving temperatures
# optional, defaults to Fahrenheit (F)
tempscale=C
ecobee.items:
// Ecobee binding
Group gEcobee
Number actualTemperature "Temperature [%.1f C]" (gEcobee) { ecobee="<[316558281665#runtime.actualTemperature]" }
DateTime lastModified "last mod [%1$tH:%1$tM:%1$tS]" { ecobee="<[316558281665#lastModified]" }
Number actualHumidity "actual hum [%d %%]" { ecobee="<[316558281665#runtime.actualHumidity]" }
String hvacMode "hvac mode [%s]" { ecobee="=[316558281665#settings.hvacMode]" }
String currentClimateRef "sched comf [%s]" { ecobee="<[316558281665#program.currentClimateRef]" }
String desiredComf "desired comf" { ecobee="<[316558281665#runningEvent.holdClimateRef]", autoupdate="false" }
Number desiredTemp "desired temp [%.1f °F]"
Number desiredHeat "desired heat [%.1f °F]" { ecobee="<[316558281665#runtime.desiredHeat]" }
Number desiredCool "desired cool [%.1f °F]" { ecobee="<[316558281665#runtime.desiredCool]" }
String desiredFan "desired fan mode [%s]" { ecobee="<[316558281665#runtime.desiredFanMode]" }
log:
19:19:56.284 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'ecobee.items'
19:20:07.910 [DEBUG] [org.openhab.binding.ecobee ] - BundleEvent STARTING - org.openhab.binding.ecobee
19:20:07.915 [DEBUG] [ding.ecobee.internal.EcobeeActivator] - Ecobee binding has been started.
19:20:07.916 [DEBUG] [org.openhab.binding.ecobee ] - BundleEvent STARTED - org.openhab.binding.ecobee
19:20:07.948 [DEBUG] [org.openhab.binding.ecobee ] - ServiceEvent REGISTERED - {org.openhab.model.item.binding.BindingConfigReader, org.openhab.binding.ecobee.EcobeeBindingProvider}={component.name=org.openhab.binding.ecobee.genericbindingprovider, component.id=178, service.id=302, service.bundleid=199, service.scope=bundle} - org.openhab.binding.ecobee
19:20:08.088 [DEBUG] [org.openhab.binding.ecobee ] - ServiceEvent REGISTERED - {org.osgi.service.event.EventHandler, org.osgi.service.cm.ManagedService, org.openhab.binding.ecobee.EcobeeActionProvider}={event.topics=openhab/*, service.pid=org.openhab.ecobee, component.name=org.openhab.binding.ecobee.binding, component.id=177, service.id=305, service.bundleid=199, service.scope=bundle} - org.openhab.binding.ecobee
19:20:08.481 [INFO ] [b.core.service.AbstractActiveService] - Ecobee Refresh Service has been started
19:20:08.496 [TRACE] [inding.ecobee.internal.EcobeeBinding] - Querying Ecobee API for instance DEFAULT_USER
19:20:08.510 [INFO ] [inding.ecobee.internal.EcobeeBinding] - No Ecobee in-bindings have been found for selection.
19:20:08.518 [DEBUG] [inding.ecobee.internal.EcobeeBinding] - Nothing to retrieve for 'DEFAULT_USER'; skipping thermostat retrieval.
19:20:13.829 [TRACE] [nternal.EcobeeGenericBindingProvider] - validateItemType called with bindingConfig=<[316558281665#runtime.actualTemperature]
19:20:13.831 [TRACE] [nternal.EcobeeGenericBindingProvider] - validateItemType called with property=runtime.actualTemperature
19:20:13.833 [DEBUG] [nternal.EcobeeGenericBindingProvider] - Processing binding configuration: '<[316558281665#runtime.actualTemperature]'
19:20:13.839 [TRACE] [nternal.EcobeeGenericBindingProvider] - validateItemType called with bindingConfig=<[316558281665#lastModified]
19:20:13.841 [TRACE] [nternal.EcobeeGenericBindingProvider] - validateItemType called with property=lastModified
19:20:13.843 [DEBUG] [nternal.EcobeeGenericBindingProvider] - Processing binding configuration: '<[316558281665#lastModified]'
19:20:13.845 [TRACE] [nternal.EcobeeGenericBindingProvider] - validateItemType called with bindingConfig=<[316558281665#runtime.actualHumidity]
19:20:13.846 [TRACE] [nternal.EcobeeGenericBindingProvider] - validateItemType called with property=runtime.actualHumidity
19:20:13.848 [DEBUG] [nternal.EcobeeGenericBindingProvider] - Processing binding configuration: '<[316558281665#runtime.actualHumidity]'
19:20:13.851 [TRACE] [nternal.EcobeeGenericBindingProvider] - validateItemType called with bindingConfig==[316558281665#settings.hvacMode]
19:20:13.853 [TRACE] [nternal.EcobeeGenericBindingProvider] - validateItemType called with property=settings.hvacMode
19:20:13.854 [DEBUG] [nternal.EcobeeGenericBindingProvider] - Processing binding configuration: '=[316558281665#settings.hvacMode]'
19:20:13.855 [TRACE] [nternal.EcobeeGenericBindingProvider] - validateItemType called with bindingConfig=<[316558281665#program.currentClimateRef]
19:20:13.857 [TRACE] [nternal.EcobeeGenericBindingProvider] - validateItemType called with property=program.currentClimateRef
19:20:13.858 [DEBUG] [nternal.EcobeeGenericBindingProvider] - Processing binding configuration: '<[316558281665#program.currentClimateRef]'
19:20:13.859 [TRACE] [nternal.EcobeeGenericBindingProvider] - validateItemType called with bindingConfig=<[316558281665#runningEvent.holdClimateRef]
19:20:13.861 [TRACE] [nternal.EcobeeGenericBindingProvider] - validateItemType called with property=runningEvent.holdClimateRef
19:20:13.862 [DEBUG] [nternal.EcobeeGenericBindingProvider] - Processing binding configuration: '<[316558281665#runningEvent.holdClimateRef]'
19:20:13.863 [TRACE] [nternal.EcobeeGenericBindingProvider] - validateItemType called with bindingConfig=<[316558281665#runtime.desiredHeat]
19:20:13.864 [TRACE] [nternal.EcobeeGenericBindingProvider] - validateItemType called with property=runtime.desiredHeat
19:20:13.865 [DEBUG] [nternal.EcobeeGenericBindingProvider] - Processing binding configuration: '<[316558281665#runtime.desiredHeat]'
19:20:13.867 [TRACE] [nternal.EcobeeGenericBindingProvider] - validateItemType called with bindingConfig=<[316558281665#runtime.desiredCool]
19:20:13.868 [TRACE] [nternal.EcobeeGenericBindingProvider] - validateItemType called with property=runtime.desiredCool
19:20:13.869 [DEBUG] [nternal.EcobeeGenericBindingProvider] - Processing binding configuration: '<[316558281665#runtime.desiredCool]'
19:20:13.871 [TRACE] [nternal.EcobeeGenericBindingProvider] - validateItemType called with bindingConfig=<[316558281665#runtime.desiredFanMode]
19:20:13.872 [TRACE] [nternal.EcobeeGenericBindingProvider] - validateItemType called with property=runtime.desiredFanMode
19:20:13.873 [DEBUG] [nternal.EcobeeGenericBindingProvider] - Processing binding configuration: '<[316558281665#runtime.desiredFanMode]'
19:23:08.681 [TRACE] [inding.ecobee.internal.EcobeeBinding] - Querying Ecobee API for instance DEFAULT_USER
19:23:08.698 [TRACE] [inding.ecobee.internal.EcobeeBinding] - Authorizing this binding with the Ecobee API.
19:23:09.284 [TRACE] [inding.ecobee.internal.EcobeeBinding] - Request: AuthorizeRequest[appKey=ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHI,scope=smartWrite]
19:23:10.203 [TRACE] [inding.ecobee.internal.EcobeeBinding] - Response: AuthorizeResponse[error=invalid_client,errorDescription=Authentication error, invalid authentication method, lack of credentials, etc.,errorURI=https://tools.ietf.org/html/rfc6749#section-5.2,ecobeePin=<null>,authToken=<null>,scope=<null>,expiresIn=<null>,interval=<null>]
19:23:10.210 [INFO ] [inding.ecobee.internal.EcobeeBinding] - #########################################################################################
19:23:10.212 [INFO ] [inding.ecobee.internal.EcobeeBinding] - # Ecobee-Integration: U S E R I N T E R A C T I O N R E Q U I R E D !!
19:23:10.215 [INFO ] [inding.ecobee.internal.EcobeeBinding] - # 1. Login to www.ecobee.com using your 'DEFAULT_USER' account
19:23:10.216 [INFO ] [inding.ecobee.internal.EcobeeBinding] - # 2. Enter the PIN 'null' in My Apps within the next null minutes.
19:23:10.218 [INFO ] [inding.ecobee.internal.EcobeeBinding] - # NOTE: Any API attempts will fail in the meantime.
19:23:10.218 [INFO ] [inding.ecobee.internal.EcobeeBinding] - #########################################################################################
19:23:10.219 [WARN ] [inding.ecobee.internal.EcobeeBinding] - Periodic poll skipped for 'DEFAULT_USER'.
19:26:10.225 [TRACE] [inding.ecobee.internal.EcobeeBinding] - Querying Ecobee API for instance DEFAULT_USER
19:26:10.229 [TRACE] [inding.ecobee.internal.EcobeeBinding] - Authorizing this binding with the Ecobee API.
19:26:10.237 [TRACE] [inding.ecobee.internal.EcobeeBinding] - Request: AuthorizeRequest[appKey=ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHI,scope=smartWrite]
19:26:10.667 [TRACE] [inding.ecobee.internal.EcobeeBinding] - Response: AuthorizeResponse[error=invalid_client,errorDescription=Authentication error, invalid authentication method, lack of credentials, etc.,errorURI=https://tools.ietf.org/html/rfc6749#section-5.2,ecobeePin=<null>,authToken=<null>,scope=<null>,expiresIn=<null>,interval=<null>]