Thermostat Controller commands not working [By Design]

These commands on the device page for the thermostat controller don't work:

  • cool()
  • heat()
  • fanAuto()
  • fanCirculate()
  • fanOn()

However, these commands do work:

  • setThermostatFanMode(mode) for all modes
  • setThermostatMode(mode) for all modes

Hub is v2.2.8.156

This seems to be a bug that the mentioned methods above don't work?

Do they work for the controlled thermostat when done from its device page?

Yes the commands for the controlled thermostat work fine. And setThermostatFanMode(mode) and setThermostatMode(mode) will properly change both the controller and the controlled device, so seems like it's a problem in the controller code.

Oh, never mind. Those commands are not supported on the controller thermostat device. The controller thermostat device is used as a conduit from the app to the controlled thermostat. Those commands are not part of that functionality, so are not implemented in the the controller thermostat driver.

Here is what is not supported in the driver:

def cool() {}
def emergencyHeat() {}
def fanAuto() {}
def fanCirculate() {}
def fanOn() {}
def heat() {}
def setSchedule(p = null) {}

Why are they unsupported?

It seems like a bug if setThermostatMode(cool) works but not cool(). Same with all the other commands listed.

You aren't supposed to be using the Controlled Thermostat device separately from the app. The app doesn't use those commands.

It's not a bug, it's the way it was designed. There is no point in carrying code that isn't used, and this device is only used by Thermostat Controller.

If it really is only intended to be used by the app, you should not implement any of the capabilities, then there is no confusion there and nobody will tamper with the device.

With your "app only" design:

  • If I want to make small temporary adjustments like increase the temperature slightly, turn off the thermostat, or change the fan mode, I need to go into the App UI.
  • Usage in dashboards is unsupported since it's not the app.
  • Zero flexibility to use it in rules or other apps.

That seems rather silly to me, since the code to set the mode using the UI vs the device should be pretty much the same so there's no reason why you could not support device commands besides your "app only" philosophy. I think most users would prefer the device being the source of truth and being able to use it like a normal thermostat.

But pretty much sounds like the design philosophy is at odds, so I'll probably just go and write my own app.

I'm sorry, there's a misunderstanding, and that's my fault.

The device can be used outside the app. For example, it can be used by Thermostat Scheduler, or other apps could command it.

Those commands were not implemented for the reason stated: not to have unneeded code . The real failure here is the inflexibility of the device page UI where it shows commands that are not actually implemented by the device. These commands all come from the thermostat capability, and there is no choice in that regard -- that's a shortcoming also. Not all thermostats implement all of the capability defined commands, and this particular thermostat is one of them. The ability of the UI to adjust to this is missing.

And, you're right, implementing those commands would not represent a huge burden, as each just calls the implemented commands with a specific parameter (except for schedule()), thusly:

def cool() {setThermostatMode("cool")}
def emergencyHeat() {setThermostatMode("emergencyHeat")}
def fanAuto() {setThermostatFanMode("auto")}
def fanCirculate() {setThermostatFanMode("circulate")}
def fanOn() {setThermostatFanMode("on")}
def heat() {setThermostatMode("heat")}

I'll put that in for the next release.

Update: I just discovered that this change was made some time ago, but never got merged into the build.

Glad to hear!

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.