Trying again to get thermostat working (solved)

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)

current items file:

https://drive.google.com/file/d/1mtvjXliULi-GJdiz-B14NNYiQNMnm0N5/view?usp=sharing

Any Ideas?

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!

1 Like

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…)

For separate low and high set points you can use:

  • Number. { ga="thermostatTemperatureSetpointHigh" }
  • Number. { ga="thermostatTemperatureSetpointLow" }
1 Like

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.

https://www.openhab.org/addons/bindings/zwave/thing.html?manufacturer=linear&file=gctbz48_0_0.html

1 Like

Mapping the numbers to the mode seems to help. (Will take more time and testing to confirm)

Now to try and fix the setpoint issue so I can have it show as one thermostat instead of two.

Did you ever get this working, and if so, can you share the item setup?

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"}

Hope this helps you!

I’ll try it and let you know. Thanks!

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