[SOLVED] Alexa V3 - Thermostat Issue

Tags: #<Tag:0x00007f61701ccc48>

My thermostat only has 2 channels that are required in alexa, however if i ommit the switch item below the device does not get added and instead shows up as 2 separate items (setpoint and temperature). Is this a bug within the openhab skill or a requirement of channels from amazon. since the switch is a readonly value (which doesnt work in alexa, allows control) this seems very strange that i have to have it present for the thermostat to be discovered.

Group               BathroomThermostat  "Bathroom Thermostat"                                       {alexa="Endpoint.Thermostat" [category="THERMOSTAT"]}

Number:Temperature  BathroomTemperature "Temperature [%.1f °C]"                 (BathroomThermostat)        {channel="draytonwiser:room:1adff779:WiserRoomBathroom:currentTemperature",alexa="TemperatureSensor.temperature" [category="THERMOSTAT",scale="Celsius"]}

Number:Temperature  BathroomSetPoint    "Setpoint [%.1f °C]"                        (BathroomThermostat)        {channel="draytonwiser:room:1adff779:WiserRoomBathroom:currentSetPoint",alexa="ThermostatController.targetSetpoint" [category="THERMOSTAT",scale="Celsius"]}

Switch              BathroomRequesting  "Bathroom Requesting Heat"      (BathroomThermostat)        {channel="draytonwiser:room:1adff779:WiserRoomBathroom:heatRequest",alexa="PowerController.powerState" [nonControllable=true]}

Couple observations related to the item definitions you provided:

No need to specify a category on group endpoint as its name explicitly defines the category. Additionally, no need to specify categories on items associated to a group endpoint. Likewise, the scale parameter can be omitted since you have it defined in your item state description (e.g. "Setpoint [%.1f °C]")

If I understand correctly, you control the heat on/off setting of your thermostat via the BathroomRequesting item and the target temperature via BathroomSetPoint. Moreover, it has a temperature sensor via BathroomTemperature. You should be using ThermostatController.thermostatMode to control the heat on/off setting. What’s the reasoning for adding the nonControllable parameter? (this one is reserved for building blocks APIs controllers only).

Anyway, can you try the below item definitions?

Group BathroomThermostat "Bathroom Thermostat" {alexa="Endpoint.Thermostat"}
Number:Temperature BathroomTemperature "Temperature [%.1f °C]" (BathroomThermostat) {channel="draytonwiser:room:1adff779:WiserRoomBathroom:currentTemperature", alexa="TemperatureSensor.temperature"}
Number:Temperature BathroomSetPoint "Setpoint [%.1f °C]" (BathroomThermostat) {channel="draytonwiser:room:1adff779:WiserRoomBathroom:currentSetPoint", alexa="ThermostatController.targetSetpoint"}
Switch BathroomRequesting "Bathroom Requesting Heat" (BathroomThermostat) {channel="draytonwiser:room:1adff779:WiserRoomBathroom:heatRequest",alexa="ThermostatController.thermostatMode"}

Alexa, what’s the bathroom temperature?
Alexa, what’s the bathroom thermostat set to?
Alexa, set the bathroom temperature to 20
Alexa, set the bathroom thermostat to heat
Alexa, set the bathroom thermostat to off

If you only have one thermostat discovered:
Alexa, turn on the heat
Alexa, set the temperature to 22

1 Like

Thanks, substituting the powercontroller for modecontroller on the switch solved it, missed that a switch was supported in the docs

No worries. Did you mean you swapped with ThermostatController? If not, I’m curious of what you were trying to achieve with your BathroomRequesting item. If you indeed changed to ModeController and kept the nonControllable=true parameter, that would mean you just want to query for the status of that item but not control it.

My heating system has no on/off switch, it’s purely status, it turns on and off via the setpoint, hence I only really wanted setpoint and temperature but it doesn’t work with just the two channels.
A lot in my example was me playing and testing, I meant swapping thermostatMode for the PowerController.
BathroomRequesting was the closest item I could put in to get it to work, adding it as a PowerController was the first working solution I found (albeit I shouldn’t be able to toggle it), but it’s good now :+1:

I am surprised that a Thermostat endpoint group wouldn’t work with just a setpoint and temperature sensor. As a matter a fact, now that I understand what you intended to do, modeling BathroomRequesting as ModeController is actually discarded by the skill since that interface doesn’t support the Switch item type. So only the other two items are actually associated with your thermostat endpoint group.

Technically, the proper way to model a Switch item type as non controllable item is to use toggleController but unfortunately it doesn’t play well with a thermostat endpoint group. This is why I would still recommend using the Thermostat.thermostatMode capability I mentioned above. That way you can still ask Alexa if the thermostat is on (heat) or off (Alexa, is the bathroom thermostat on?).

If you don’t care about having that ability, then you don’t need to configure that item. If you are concern that Alexa thermostat mode command requests (Alexa, set bathroom thermostat to heat) will incorrectly update the item state then you can use a proxy item and set an item sensor to return the proper state. That way the command requests will discarded and the proper state will always be returned to Alexa.

Group BathroomThermostat "Bathroom Thermostat" {alexa="Endpoint.Thermostat"}
Number:Temperature BathroomTemperature "Temperature [%.1f °C]" (BathroomThermostat) {channel="draytonwiser:room:1adff779:WiserRoomBathroom:currentTemperature", alexa="TemperatureSensor.temperature"}
Number:Temperature BathroomSetPoint "Setpoint [%.1f °C]" (BathroomThermostat) {channel="draytonwiser:room:1adff779:WiserRoomBathroom:currentSetPoint", alexa="ThermostatController.targetSetpoint"}
Switch BathroomRequesting "Bathroom Requesting Heat" (BathroomThermostat) {channel="draytonwiser:room:1adff779:WiserRoomBathroom:heatRequest"}
Switch BathroomThermostatAlexaMode "Thermostat Alexa Mode" (BathroomThermostat) {alexa="ThermostatController.thermostatMode" [itemSensor="BathroomRequesting"], expire="1s"}

To avoid opening another topic:
My thermostat can either be set to AUTO, forced heating (HEAT) or OFF. So i’m using this approach:
Number AlexaTestHeatingMode "Heating" {alexa="ThermostatController.thermostatMode" [AUTO=8,OFF=2,HEAT=4]}
However i would also like to be able to use commands like “Turn heating ON” to set it to HEAT mode. It this possible?
I like the fact that Echo confirms the new state of the thermostat instead of just saying OK - this gives additional confidence that the command was understood.

I know that i could go with
Number AlexaTestHeatingMode "Heating" {alexa="ModeController.mode" [category="THERMOSTAT", supportedModes="8=Automatic:@Setting.Auto,2=Off:Night,4=On:Day:@Setting.Heat"]
However Alexa only confirms this with OK which i don’t like.

Is it possible to activate HEAT mode by using word ON when using ThermostatController.thermostatMode approach?
Any suggestions?

Hi All,
Im trying to control my Flureo thermostat with alexa. It discovers it just fine.

I can set the temperature with Alexa, but when I say turn on the Ensuite Floor, it says not supported.

How do I turn the floor on and set the temp in a single command? I thought it was possible


Group   Ensuite_Thermostat   "Ensuite Floor"                                                                                                            {alexa="Endpoint.Thermostat"}
Number  Ensuite_Temp         "Ensuite Current Temp [%.0f °C]"  (Group_HabPanel_Dashboard,grpTemp,Ensuite_Thermostat)               ["LRTemp"]           { channel="broadlink:floureonthermostat:192-168-0-229:roomtemperatureexternalsensor", alexa="TemperatureSensor.temperature" }
Number  Ensuite_Target_Temp  "Ensuite Floor [%.0f °C]"         (Group_HabPanel_Dashboard,grpTemp,grpTargetTemp,Ensuite_Thermostat) ["LRTargetTemp"]     { channel="broadlink:floureonthermostat:192-168-0-229:setpoint", alexa="ThermostatController.targetSetpoint" }
Switch  Ensuite_Room_Mode    "Ensuite Auto-Mode (ON/OFF)"      (Group_HabPanel_Dashboard)                                                               { channel="broadlink:floureonthermostat:192-168-0-229:mode" }
Switch  Ensuite_Room_Power   "Ensuite Floor"                   (Group_HabPanel_Dashboard,Ensuite_Thermostat)                                            { channel="broadlink:floureonthermostat:192-168-0-229:power", alexa="ThermostatController.thermostatMode"  [HEAT="HEAT"]}


Thanks!

I answered this question in this post:

Thanks Jeremy, it works for obtaining the temperature and setting the temperature, but if I say Alexa, set the ensuite floor to heat it doesnt support it.

Is my mapping incorrect?

Switch  Ensuite_Room_Power   "Ensuite Floor"                   (Group_HabPanel_Dashboard,Ensuite_Thermostat)                                            { channel="broadlink:floureonthermostat:192-168-0-229:power", alexa="ThermostatController.thermostatMode"  [HEAT="HEAT"]}

The mapping you configured is incorrect. The proper value is OFF="OFF",ON="HEAT". However, since you are using a Switch item, you technically don’t need to specify it, as it defaults to controlling a heater.

Thanks jeremy, that doesnt seem to still work even after deleting the device and readding it/rediscovery.

It says, ‘to turn on, please set a mode’


Group   Ensuite_Thermostat   "Ensuite Floor"                                                                                                            {alexa="Endpoint.Thermostat"}
Number  Ensuite_Temp         "Ensuite Current Temp [%.0f °C]"  (Group_HabPanel_Dashboard,grpTemp,Ensuite_Thermostat)               ["LRTemp"]           { channel="broadlink:floureonthermostat:192-168-0-229:roomtemperatureexternalsensor", alexa="TemperatureSensor.temperature" }
Number  Ensuite_Target_Temp  "Ensuite Floor [%.0f °C]"         (Group_HabPanel_Dashboard,grpTemp,grpTargetTemp,Ensuite_Thermostat) ["LRTargetTemp"]     { channel="broadlink:floureonthermostat:192-168-0-229:setpoint", alexa="ThermostatController.targetSetpoint" }
Switch  Ensuite_Room_Mode    "Ensuite Auto-Mode (ON/OFF)"      (Group_HabPanel_Dashboard)                                                               { channel="broadlink:floureonthermostat:192-168-0-229:mode" }
Switch  Ensuite_Room_Power   "Ensuite Floor"                   (Group_HabPanel_Dashboard,Ensuite_Thermostat)                                            { channel="broadlink:floureonthermostat:192-168-0-229:power", alexa="ThermostatController.thermostatMode"  [OFF="OFF",ON="HEAT"]}

So if I delete all the modes, it says ‘Ensuite floor is off, to turn it on, please set a mode’

My mistake. The mapping should be the other way round OFF="OFF",HEAT="ON".

same issue, if i say Alexa, set ensuite floor to 28 degrees she says its off, to turn it on, please set a mode

Switch  Ensuite_Room_Power   "Ensuite Floor"                   (Group_HabPanel_Dashboard,Ensuite_Thermostat)                                            { channel="broadlink:floureonthermostat:192-168-0-229:power", alexa="ThermostatController.thermostatMode" [OFF="OFF",HEAT="ON"] }

What’s the current state of Ensuite_Room_Power?

Right now, its on as it switched it on manually. But it wasn’t NULL before

smarthome:status Ensuite_Room_Power
ON
openhab>

The message “Ensuite floor is off, to turn it on, please set a mode” is generated when that item is set to OFF. This is the expected behavior.

OK, so how would I turn on the unit using Alexa?I need another item as a switch with power controller?

By making sure your item has the proper state. I just tested your item definition and it’s working as intended.

Im confused. So if the item is OFF and ive set a mode, i should be able to say alexa turn on the ensuite floor, right? without using a powercontroller