2 Issues with KNX Thermostat / KNX Climate

I have two KNX thermostat integrated in home assistant (Hass.io version 142) using the KNX Climate component: one from Gira, which works fine, and one Hager KNX heating actor TXM646R, which has two issues.

Issue 1: The Hager TXM646R does not offer an object to read the status of the target temperature. It only provides an 8 byte object to read the status of ALL target temperatures in all four mode. So I do not have any group address to connect to the “target_temperature_address” in the KNX climate component. Connecting it to the group address with ALL target temperatures in my case 4/2/14 does work.

Issue 2: Using the Hager TXM646R the objects for the setpoint shift and setpoint shift status have a temperature difference datatype (9.002). Using them with “setpoint_shift_address” and “setpoint_shift_state_address” does not work and results in
Error while syncing device: <CouldNotParseTelegram description="payload invalid" device_name="Keller_Gästezimmer_Heizung" group_address="4/2/13" payload="<DPTArray value="[0x0,0x0]" />"/>
In case of the Gira the datatype is an 8 bit count (6.010). This one works fine.

Here is my configuration:

- platform: knx
name: Keller_Gästezimmer_Heizung
temperature_address: '4/2/10'
target_temperature_address: '4/2/14' # this is an 8 byte object containing all target temperatures in each mode
setpoint_shift_address: '4/2/12'
setpoint_shift_state_address: '4/2/13'
operation_mode_address: '4/2/16'
operation_mode_state_address: '4/2/17'
setpoint_shift_max : 3
setpoint_shift_min : -3
setpoint_shift_step: 0.5

Any ideas how to make this thermostate work are welcome!

Hi, Have you solved your issue

Hi Yaqoob5,
thanks for following up. It did start to work well a few releases later with the following and current configuration:

  1. For a Gira KNX Thermoelectric actor:climate:
  - platform: knx
    name: keller_diele_heizung
    temperature_address: '4/2/0'
    target_temperature_state_address: '4/2/1'
    setpoint_shift_address: '4/2/2'
    setpoint_shift_state_address: '4/2/3'
    operation_mode_address: '4/2/5'
    operation_mode_state_address: '4/2/6'
    setpoint_shift_step: 0.5
    min_temp: 7
    max_temp: 28
  1. For a Hager KNX Heat Actor:
 - platform: knx
    name: keller_gaestezimmer_heizung
    temperature_address: '4/2/10'
    target_temperature_state_address: '4/2/11'
    setpoint_shift_address: '4/2/12'
    setpoint_shift_state_address: '4/2/13'
    operation_mode_address: '4/2/15'
    operation_mode_state_address: '4/2/16'
    min_temp: 7
    max_temp: 28

Kind regards,

Good, is it possible to help me.

I have the below address for my system, i could work it out

Lounge Actual Temp_A3 1/4/48

Lounge Set-Point Temp_A3 1/4/49

Lounge Automatic_A3 1/4/50

Lounge Status Auto_A3 1/4/51

Lounge Manual Speed_A3 1/4/52

Lounge Speed Monitor_A3 1/4/53

Lounge PI Monitor_A3 1/4/54

Lounge Cooling ON OFF_A3 1/4/55

Lounge Comfort Status_A3 1/4/56

Lounge Instantaneous Set-Point Temp_A3 1/4/57

Lounge FC Status_A3 1/4/58

I am far from being an expert, so please do not expect too much help from me. Still I can try.
Could you provide a few more details including which KNX climate controller are you using and what are you planning to control.

If you have not come across this here is a very helpful KNX cookbook to get you started.

Thank you, I’m using Schneider, and I want to control off/on and temperature.

4gang soft key thermostat and fan coil conroller from woetz) brand Merten.

Hi Yaqoob5
this is the little advise I can give you:

I am assuming you have your configuration.yaml setup to connect to your knx-bus as described at https://www.home-assistant.io/integrations/knx/

Then try the following in your configuration.yaml

# Example configuration.yaml entry
  - platform: knx
    name: Lounge.Temperature
    temperature_address: '1/4/28'             # This is your actual temperature
    target_temperature_address: '1/4/29'  # This is the group address for the desired target temperature
    target_temperature_state_address: '?/?/?' # you need to find out the state address of your target temperature and put it here
    operation_mode_frost_protection_address: '5/1/5'
    operation_mode_night_address: '5/1/6'
    operation_mode_comfort_address: '5/1/7'
    operation_mode_state_address: '5/1/8'

As for your other values I do not know what you mean if you cannot provide any more documentation. Can you provide the exact type of our Knx climate controller and let me know which communication objects these group addresses are connected to?

As for Fan integration I have no idea and I am not sure that there is a knx fan integration for home assistant. I would simply use a knx switch to turn it on and off

Thank you, the system is reading the temp, but the on and off is not working.

If you send me your personal email, I can send you a photo of my system.

Hi @alex.t,
I’m struggling with the same. I have the Hager TXM646T which seems similar to the R (I haven’t looked up the specs yet but I assume the KNX component of this is the same). I have gotten it functional but not quite perfect yet. One interesting point is that I’ve not gotten it working without the setpoint_shift at all. My setpoint_shift and setpoint_state_shift have a datatype of 5.001 (scale) which seems to make a bit more sense than the 9.001 you have. Here is how I configured it:

   - platform: knx
     name: Kitchen Tstat
     operation_mode_address: '3/3/2'
     operation_mode_state_address: '3/4/2'
     target_temperature_address: '3/5/2'
     target_temperature_state_address: '3/5/2'
     temperature_address: '3/6/2'
     min_temp: 16.0
     max_temp: 26.0

I don’t have ETS but I have the web GUI for the SE Wiser and it gives me this for the kitchen thermostat:

As I mentioned, I could never get the setpoint_shift parameters to work so I just left them out and it works with the little dial slider just fine on the Lovelace climate card. To get the setpoint temp to show I had to give the target_temp and target_state_temp both the same address. I’m not sure about this but only putting the target_temp_state_address without the other didn’t seem to work.

I’ve still got to figure out the cooling mode part of all this. As far as I can tell the heating/cooling mode is a single binary address for the entire system. I can toggle this in HA and it changes the mode of every tstat in the house to cooling mode but I don’t know how to integrate that into the climate config above.

Also, what datatype do you have for the operational_mode? Mine is 01.001 (switch) which doesn’t seem right for operational mode. I had it set to on_off_address/on_off_state_address which also works but I have these operational modes on the thermostat so I assume they should be there in KNX too. Probably a question for the integrator who set up my system.

Dear Tony,
I just had at look at the manual for the TXM646T/R on the Hager homepage. So here are my 5 cents on your questions:

Actually there are two different things to control a heater:
(1) A temperature controller, which recieves an actual temperature value compares it against a target value and tells a valve switch actuator to open the valve a certain percentage.
(2) a heating valve switch actuator which gets an input value how much a valve is to be opened and then switches the voltage for the valve on - usually with a pulse width modulated signal, where the on/off ratio corresponds to the percentace, with which the valve should be open.

The Hager TXM646T is ONLY an actuator (i.e. item 2), the TXM646R combines an actuator AND a temperature controller (i.e. a combination of 1 and 2).
So the communication objects ond “Kueche Stellgroesse” are only the percentages the valve of your heating should be open. They are not related to the setpoint temperature shifts because this would be only available on the temperature controller. The same is true for the operational mode. These communication objets also only exist on temperature controllers such as the TXM646R.

Maybe you could check with your integrator, which controller you are using and find out the respective group addresses and we take it from there

1 Like

Many thanks! I hadn’t found English docs for the Hager unit and I didn’t want to spend hours trying to understand the German (I could do it, but it’d be a struggle). That makes sense with the opening percentage. It’s not something I’d want to control except as some sort of manual override but that’s not what I need to be doing with HA. I might use it as a parameter just to see what it’s doing.

The thermostats I have are a mix of the Merten (Schneider Electric) touch screens and the digital displays with push buttons. If the modes aren’t in the Hager then they are in the thermostats themselves, at least the touch screen ones. I’ll dig into the configuration on the thermostats to see what else I can get out of it. That said, the house has such thermal mass that I can’t see any reason to use these other modes so I’m not going to waste effort trying to connect that to HA.

I’ll change the schalten and schaltstatus back to on/off instead of operation_mode.


Thats probably the case. Its a very common pattern in KNX installations.
There could also be a 3rd device just for controlling the temperature sending % values to the actuators. A temperature controller, kind of specified logic engine, containing eg. 6 channels.
Just follow the group address the heating actuator gets its valve percentage from.

Is there a way to force the thermostat operation mode to different modes? I don’t have individual operational modes (available to me in KNX) but I have a master switch in KNX to swap the system over to cooling. All the physical thermostats get this signal and change their setpoints and reverse their operation to act as cooling thermostats but the Lovelace card is showing “heat” when they are active. It’s mainly just a visual thing because I know the thermostats/valves are working correctly but it would make the overview complete if I could tell the thermostat entities that they are in cooling mode.

Edit: I want to set hvac_mode: cool or however that works, it wasn’t clear from reading the climate.knx docs.

If you happen to know the group address which is used to switch the system to cooling you could used the home assistant knx.send service in order to send a value there.
Something like:

- id: some_id_here
  alias: Some Alias Here
  initial_state: true
    # define some trigger here
  - service: knx.send
      address: ?/?/? #whatever address you are using
      payload: '???' #whatever value you are using

I am not sure if this work nor if it is a good idea because you might run into issues between the address you send this to and the corresponding stage address. The best would be to talk to your integrator and findout the addresses of your thermostate.

I was more concerned with simply the climate card in Lovelace. The system is functioning correctly, I just wanted it to show that each thermostat was in cooling mode (snowflake vs. fire symbol and color).

The master switch in KNX for the heating cooling is temporarily setup as a user-controlled switch. I can flip this switch in the web GUI I have for the KNX router or with HA. The integrators were missing a binary input to connect the heatpump to the KNX system. It should be the heatpump that changes the mode from heating to cooling and back as it determines what is needed in the house based on it’s own sensors for room temp and outside temp. Either way, this one GA will be 0 or 1 for heating/cooling and that should inform HA that the climate entities are in heating or cooling mode (the physical thermostats change immediately on this signal already).

I suppose I could make an automation that uses this master heat/cool switch state as the trigger and then does the action similar to this example from the docs:

    platform: time
    at: "07:15:00"
    - service: climate.set_hvac_mode
        entity_id: climate.kitchen
        hvac_mode: heat

I made the automation to change but I can’t use the heat_modes: argument in the config. It says:

Invalid config for [climate.knx]: [hvac_modes] is an invalid option for [climate.knx]. Check: climate.knx->
hvac_modes. (See ?, line ?)

Here’s the KNX thermostat config:

     name: Livingroom Tstat
     - heat
     - cool
     target_temperature_address: '3/5/1'
     target_temperature_state_address: '3/5/1'
     temperature_address: '3/6/1'
     min_temp: 16.0
     max_temp: 26.0

Interestingly, it shows a - heat when I look at the entity in developer tools (without any hvac_modes argument given).

Heat is the default.
You can use operation_modes to override hvac and preset modes.