Ok, my thermostat just keeps giving me issues with GA. Always works fine with paperui or habmin. First I already had to split it to appear like two thermostats to GA since GA can’t seem to understand separate setpoints for heating and cooling. In the past it has randomly decided to just not report anything to GA and I have had to work on the item file to fix it (may have been related to the changes the GA integration has been going thru). Last time I asked for help we got it working with the issue that it would first show as “other” mode when I pulled it up in the home app and I had to “switch” it to the mode it was actually in the make any changes.
Now it won’t let me switch.
I’m at the end of my rope with this and am looking for either an answer or a way to set up a usable habpanel item to control the thermostat.
RCS zwave thermostat model TBZ48A (rebranded GoControl TBZ48)
Edit:
After a month and a half of testing in multiple situations (and dealing with a hurricane and other issues) I can say that mapping the GA functions to the numbers in the documentation has fixed the mode issue and lets me use my thermostat (as two separate for heating and cooling) in Google home app and via voice. Thanks to @Bruce_Osborne for the link to the docs!
The first thing I spot is that you have a Number item for the mode but do not map modes to numbers.
Thus, the integration tries to convert a number to a string and vice versa which ofc does not work.
You would need something like modes="heat=1,heatcool=2,off=3,cool=4" (no idea what your mode numbers are…)
With string in there it has in the past not worked at all. But I’ll try again. I assume that setpoint high should be the highest I want it to go (the cooling temperature) and setpoint low to be the opposite? I will report back if it changes anything.
I would try mapping to numbers but while it defaults to number for type I cannot actually find the numbers that the modes map to as openhab just shows mode types whether I have string or number.
I think this is your device and the documentation from the community supported database is pretty thorough. It lists the numerical values and meanings for mode, for instance.
I never got it to work as one thermostat but I did get it working in google home as two thermostats (one for heating and one for cooling) with this code in my item file.
Group g_Housecool "House Cooling" { ga="Thermostat" [ useFahrenheit=true,modes="heat=1:Heat,heatcool=3:Auto,off=0:Off,cool=2:Cool"] }
Number CoolCurrentTemp " House Cooling Temperature " (g_Housecool) {channel="zwave:device:c8787433:node3:sensor_temperature" , ga="thermostatTemperatureAmbient" }
Number HouseSetTempCool " House Setpoint Cool " (g_Housecool) {channel="zwave:device:c8787433:node3:thermostat_setpoint_cooling" , ga="thermostatTemperatureSetpoint"}
Number Housecoolmode "House A/C Mode" (g_Housecool) {channel="zwave:device:c8787433:node3:thermostat_mode" , ga="thermostatMode"}
Group g_Househeat "House Heating" { ga="Thermostat" [ useFahrenheit=true,modes="heat=1:Heat,heatcool=3:Auto,off=0:Off,cool=2:Cool"] }
Number HeatCurrentTemp "House Heating Temperature" (g_Househeat) {channel="zwave:device:c8787433:node3:sensor_temperature" , ga="thermostatTemperatureAmbient" }
Number HouseSetTempHeat "House Setpoint Heat" (g_Househeat) {channel="zwave:device:c8787433:node3:thermostat_setpoint_heating" , ga="thermostatTemperatureSetpoint"}
Number Househeatmode "House Heater Mode" (g_Househeat) {channel="zwave:device:c8787433:node3:thermostat_mode" , ga="thermostatMode"}
Yours worked for me. I had my mode settings wrong. (I didn’t imagine having modes like “cool=2:cool”). The solution I have for the separate heat and cool temperature setpoints is to use a virtual item for set point. That way I only need one thermostat group per physical thermostat. Here are my items:
Group UpstairsHvac "Upstairs Thermostat" (Hvac) { ga="Thermostat" [ useFahrenheit=true, modes="heat=1:Heat,heatcool=3:Auto,off=0:Off,cool=2:Cool", thermostatTemperatureRange="16,32" ] }
Number UpstairsHvacHeatSetPoint "Heat Setpoint [%.0f °F]" (UpstairsHvac) { channel="zwave:device:controller:node64:thermostat_setpoint_heating" }
Number UpstairsHvacCoolSetPoint "Cool Setpoint [%.0f °F]" (UpstairsHvac) { channel="zwave:device:controller:node64:thermostat_setpoint_cooling" }
Number UpstairsHvacSetPoint "Setpoint [%.0f °F]" <heating> (UpstairsHvac) { ga="thermostatTemperatureSetpoint" }
Number UpstairsHvacTemperature "Temperature [%.1f °F]" (UpstairsHvac,InsideTemperature,TemperatureSensors) { channel="zwave:device:controller:node64:sensor_temperature", ga="thermostatTemperatureAmbient" }
Number UpstairsHvacMode "Mode [MAP(thermostatMode.map):%s]" (UpstairsHvac) { channel="zwave:device:controller:node64:thermostat_mode", ga="thermostatMode" }
Number UpstairsHvacOperatingState "Operating State [MAP(thermostatState.map):%s]" { channel="zwave:device:controller:node64:thermostat_state" }
Number UpstairsHvacFanMode "Fan Mode [MAP(thermostatFanMode.map):%s]" <hvacstate> (UpstairsHvac) { channel="zwave:device:controller:node64:thermostat_fanmode" }
Number UpstairsHvacFanState "Fan State [MAP(thermostatFanState.map):%s]" (UpstairsHvac) { channel="zwave:device:controller:node64:thermostat_fanstate" }
Number UpstairsHvacBattery "Battery [%d %%]" <battery> (UpstairsHvac) { channel="zwave:device:controller:node64:battery-level" }
And my rules:
rule "Downstairs HVAC heat or cool setpoint changed"
when
Item DownstairsHvacCoolSetPoint changed or
Item DownstairsHvacHeatSetPoint changed or
Item DownstairsHvacMode changed
then
if ( DownstairsHvacMode.state == 1 ) DownstairsHvacSetPoint.postUpdate(DownstairsHvacHeatSetPoint.state)
if ( DownstairsHvacMode.state == 2 ) DownstairsHvacSetPoint.postUpdate(DownstairsHvacCoolSetPoint.state)
logInfo(filename, "Synchronized Living Room Thermostat setpoint")
end
rule "Downstairs HVAC setpoint received command "
when
Item DownstairsHvacSetPoint received command
then
if ( DownstairsHvacMode.state == 1 ) DownstairsHvacHeatSetPoint.sendCommand(receivedCommand.toString)
if ( DownstairsHvacMode.state == 2 ) DownstairsHvacCoolSetPoint.sendCommand(receivedCommand.toString)
logInfo(filename, "Synchronized Living Room Thermostat setpoint")
end