EcoBee 4 "the given configKey 'ecobee' is unknown" error

  • Platform information:
    • Hardware: Vmware 4x Processors 2x core ea./4GB Ram/180GB HDD
    • OS: CentOS7
    • Java Runtime Environment: Latest JDK
    • openHAB version: OpenHab 2 Repository Installed
    • Issue of the topic: Error occuring while attempting to get get OH2 to talk to the EcoBee4

Good evening all,
I have searched the forum and am not finding a resolution to this issue. I believe I have all of the required steps completed but am still not having luck getting this to cooperate. Any assistance would be greatly appreciated.

I’ve removed the api key and my ecobee ID where noted but I do have the correct values set in the actual config files below.

The Offending Error:

2018-11-13 19:42:58.314 [ERROR] [org.apache.felix.configadmin        ] - [org.osgi.service.event.EventHandler, org.osgi.service.cm.ManagedService, org.openhab.binding.ecobee.EcobeeActionProvider, id=316, bundle=201/mvn:org.openhab.binding/org.openhab.binding.ecobee/1.12.0]: Updating property ecobee of configuration org.openhab.ecobee caused a problem: the given configKey 'ecobee' is unknown
org.osgi.service.cm.ConfigurationException: ecobee : the given configKey 'ecobee' is unknown
        at org.openhab.binding.ecobee.internal.EcobeeBinding.updated(EcobeeBinding.java:810) [201:org.openhab.binding.ecobee:1.12.0]

My ecobee.cfg (located at /etc/openhab2/services):

################################ Ecobee Binding #######################################
#
# the private API key issued be Ecobee to use the API (required, replace with your own)
appkey=xxxxxxxxxxxxxxxxxxxxxxxxxxxx  

# 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 (optional, defaults to 5000)
#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 (optional, defaults to 6000)
#quickpoll=6000

# Time in ms to allow an API request to complete (optional, defaults to 20000)
#timeout=20000

# the temperature scale to use when sending or receiving temperatures
# optional, defaults to Fahrenheit (F)
#tempscale=F

My ecobee.sitemap (located at etc/openhab2/sitemaps):

sitemap ecobee label="Ecobee"
{
  Frame label="Thermostat" {
    Text item=lastModified
    Text item=actualTemperature
    Text item=actualHumidity
    Switch item=hvacMode label="HVAC Mode" mappings=[heat=Heat,cool=Cool,auto=Auto,off=Off]
    Text item=currentClimateRef
    Switch item=desiredComf mappings=[sleep=Sleep,wakeup=Wake,home=Home,away=Away,smart6=Gym,resume=Resume]
    Setpoint item=desiredTemp label="Temp [%.1f °F]" minValue=50 maxValue=80 step=1 visibility=[hvacMode==heat,hvacMode==cool]
    Setpoint item=desiredHeat label="Heat [%.1f °F]" minValue=50 maxValue=80 step=1 visibility=[hvacMode==auto]
    Setpoint item=desiredCool label="Cool [%.1f °F]" minValue=50 maxValue=80 step=1 visibility=[hvacMode==auto]
    Switch item=desiredFan mappings=[on=On,auto=Auto] // for rule supported in 1.9
  }

  Frame label="Hall Sensors" {
    Text item=hallTemperature
    Text item=hallHumidity
    Text item=hallOccupancy
  }

  Frame label="Living Room Sensors" {
   Text item=livingRoomTemperature
   Text item=livingRoomOccupancy
  }
}

My ecobee.items (located at etc/openhab2/items/):

DateTime lastModified "last mod [%1$tH:%1$tM:%1$tS]" { ecobee="<[**Obfuscated**#lastModified]" }
Number actualTemperature "actual temp [%.1f °F]" { ecobee="<[**Obfuscated**#runtime.actualTemperature]" }
Number actualHumidity "actual hum [%d %%]" { ecobee="<[**Obfuscated**#runtime.actualHumidity]" }
String hvacMode "hvac mode [%s]"            { ecobee="=[**Obfuscated**#settings.hvacMode]" }
String currentClimateRef "sched comf [%s]"  { ecobee="<[**Obfuscated**#program.currentClimateRef]" }
String desiredComf "desired comf"           { ecobee="<[**Obfuscated**#runningEvent.holdClimateRef]", autoupdate="false" }
Number desiredTemp "desired temp [%.1f °F]"
Number desiredHeat "desired heat [%.1f °F]" { ecobee="<[**Obfuscated**#runtime.desiredHeat]" }
Number desiredCool "desired cool [%.1f °F]" { ecobee="<[**Obfuscated**#runtime.desiredCool]" }
String desiredFan  "desired fan mode [%s]"  { ecobee="<[**Obfuscated**#runtime.desiredFanMode]" }

// Address the ecobee3 unit itself as a sensor, unlike remote sensors it also supports humidity:
Number hallTemperature "hall temp [%.1f °F]" { ecobee="<[**Obfuscated**#remoteSensors(Hall).capability(temperature).value]" }
Number hallHumidity "hall hum [%d %%]" { ecobee="<[**Obfuscated**#remoteSensors(Hall).capability(humidity).value]" }
Switch hallOccupancy "hall occ [%s]" { ecobee="<[**Obfuscated**#remoteSensors(Hall).capability(occupancy).value]" }

Number livingRoomTemperature "living rm temp [%.1f °F]" { ecobee="<[**Obfuscated**#remoteSensors(Living Room).capability(temperature).value]" }
Switch livingRoomOccupancy "living rm occ [%s]" { ecobee="<[**Obfuscated**#remoteSensors(Living Room).capability(occupancy).value]" }

My ecobee.rules (located in /etc/openhab2/rules/)

rule "Populate desiredTemp from desiredHeat"
when
  Item desiredHeat received update
then
  if (hvacMode.state.toString == "heat" && desiredHeat.state instanceof DecimalType) {
    desiredTemp.postUpdate(desiredHeat.state)
  }
end

rule "Populate desiredTemp from desiredCool"
when
  Item desiredCool received update
then
  if (hvacMode.state.toString == "cool" && desiredCool.state instanceof DecimalType) {
    desiredTemp.postUpdate(desiredCool.state)
  }
end

rule TempHold
when
  Item desiredTemp received command
then
  switch hvacMode.state.toString {
    case "heat" : desiredHeat.sendCommand(receivedCommand)
    case "cool" : desiredCool.sendCommand(receivedCommand)
    case "auto" : logWarn("TempHold", "in auto mode, single setpoint ignored")
    case "off"  : logWarn("TempHold", "in off mode, single setpoint ignored")
  }
end

rule HeatHold
when
  Item desiredHeat received command
then
  logInfo("HeatHold", "Setting heat setpoint to " + receivedCommand.toString)
  val DecimalType desiredHeatTemp = receivedCommand as DecimalType
  var DecimalType desiredCoolTemp
  if (desiredCool.state instanceof DecimalType) {
    desiredCoolTemp = desiredCool.state as DecimalType
  } else {
    desiredCoolTemp = new DecimalType(90)
  }

  ecobeeSetHold("**Obfuscated**", desiredCoolTemp, desiredHeatTemp, null, null, null, null, null)
end

rule CoolHold
when
  Item desiredCool received command
then
  logInfo("CoolHold", "Setting cool setpoint to " + receivedCommand.toString)
  val DecimalType desiredCoolTemp = receivedCommand as DecimalType
  var DecimalType desiredHeatTemp
  if (desiredHeat.state instanceof DecimalType) {
    desiredHeatTemp = desiredHeat.state as DecimalType
  } else {
    desiredHeatTemp = new DecimalType(50)
  }

  ecobeeSetHold("**Obfuscated**", desiredCoolTemp, desiredHeatTemp, null, null, null, null, null)
end

rule FanHold
when
  Item desiredFan received command
then
  logInfo("FanHold", "Setting fan hold to " + receivedCommand.toString)
  val params = newLinkedHashMap(
    'isTemperatureAbsolute'-> false,
    'isTemperatureRelative' -> false,
    'isCoolOff' -> true,
    'isHeatOff' -> true,
    'coolHoldTemp' -> 90,
    'heatHoldTemp' -> 50,
    'fan' -> receivedCommand.toString)
  ecobeeSetHold("**Obfuscated**", params, null, null, null, null)
end

rule ComfortHold
when
  Item desiredComf received command
then
  if (receivedCommand.toString.equals("resume")) {
    ecobeeResumeProgram("**Obfuscated**", true)
  } else {
    ecobeeSetHold("**Obfuscated**", null, null, receivedCommand.toString, null, null, null, null)
  }
end

I thought scope was a required field. While I doubt this is the problem, did you try uncommenting it?

I tried for the sake of humor, but I Think that shouldn’t make a difference because that’s a default value.

2018-11-14 07:15:44.232 [ERROR] [org.apache.felix.configadmin        ] - [org.osgi.service.event.EventHandler, org.osgi.service.cm.ManagedService, org.openhab.binding.ecobee.EcobeeActionProvider, id=316, bundle=201/mvn:org.openhab.binding/org.openhab.binding.ecobee/1.12.0]: Updating property ecobee of configuration org.openhab.ecobee caused a problem: the given configKey 'ecobee' is unknown
org.osgi.service.cm.ConfigurationException: ecobee : the given configKey 'ecobee' is unknown