KNX Climate control can not sync one specific group address as of today?

Hi Farmio, this is the setup and what we need. The KNX Z35 Climate control is located in the livingroom and should be the main device used to control the temperature and Daikin Airco. The physical Daikin Airco Climate control unit is located in the hallway and therefor not very accessable to be used as people are in the livingroom. Yes you can control the Daikin from HA integration but you need to open the HA app, go to the controll etc., not very convenient. What we need is to control the Daikin Airco from the KNX Z35 device in the livingroom. I’m trying to do this through HA as there is no integration from the Daikin Airco to KNX.

So, the main challange/question is how do I change the target temperature on the Daikin Airrco through the Z35? I can read the temperature from the Z35 but what I coan’t do is use that vallue in an automation or script to set the target temperature on the Daikin Climate entity (see attached picture above).

This is exactly what I proposed a solution for in my previous post. Use knx_event to get a new temperature from the bus. :person_shrugging:

Farmio, its probably me getting my head around how to use KNX in HA and not explaining myself well. It is clear to me how to get the new Target_Temperature from the bus through knx_event`. Where I’am stuck is how to use the captured temperature (with knx_event) and “feed” it to the Daikin AC target temperature attribute? As I don’t know how to use variables in an Automation in HA🤷

If I make a Climate Control entity of the Z35 in HA I can use the below.

- service: climate.set_temperature
    data:
      temperature: '{{ state_attr(''climate.livingroom_thermostat_knx'', ''temperature'')|float }}'
    entity_id: climate.daikin_ac

I guess my question is, how do I get the temperature value read from the bus in the temperature attribute of the climate.daikin_ac entity?

Aha. If you use the event as trigger you can access its payload from a template like you would access a state attribute:
"{{ trigger.event.data.data }}" for the raw payload or "{{ trigger.event.data.value }}" to get the decoded value (the event has to be configured with type: temperature for this).
For temperature you don’t want to deal with raw payloads, but for eg. mode it would be necessary. Keep in mind that raw payloads of 1-byte (or longer) payloads are lists of integers.

Ah, thank you, that is very helpful! What am I doing wrong with the below automation? it does not allow me to add a type for the event, nor set the temperature based on the value of the trigger.

The error message:

Message malformed: expected dict for dictionary value @ data[‘event_data’]

The Automation:

alias: Livingroom Z35 Thermostat - Sync Temp with Daikin HVAC
description: ''
mode: single
trigger:
  - platform: event
    event_type: knx_event
    event_data: 3/6/4    # GA of Target Temperature in Z35 Thermostat    
    type: "temperature"
condition: []
action:
  - service: climate.set_temperature
    data:  
      temperature: '{{ trigger.event.data.value }}'
    entity_id: climate.daikin_ac

The type definitions go in the event config in your configuration.yaml, not in the automation.

event_data works like this:

event_data:
  destination: 3/6/4
  telegramtype: GroupValueWrite

See documentation for more details and additional keys.

Its working! Thank you so much. It was a bit hard to understand the KNX integration in HA but it has been a great learning experience!

One last question :slight_smile: : What does “telegramtype: GroupValueWrite” actually do? Its a bit hard to understand from the docs.

This is what I have in my configuration.yaml

knx:
  event:
     - address:
        - "3/6/4"
      type: "temperature"

And this is my Automation:

alias: Z35 Sync
description: ''
trigger:
  - platform: event
    event_type: knx_event
    event_data:
      destination: 3/6/4
      telegramtype: GroupValueWrite
condition: []
action:
  - service: climate.set_temperature
    data:
      temperature: "{{ (trigger.event.data.value)|float }}"
    entity_id: climate.daikin_ac
mode: single

Now I would like to set the Mode.
I assume you need to declare the address of the mode status (“3/6/10”) in event: as well?
You mentioned above the mode needs to be captured as a raw payload.
How would I be able to do this within the same automation, as the trigger is already used for the temperature. I only want the trigger to be triggered when temperature is set or when the Thermostat in the Z35 is switched to “On”.

It filters the event to only trigger on GroupValueWrite telegrams, not on GroupValueRead or GroupValueResponse.

I don’t think you need to call | float explicitly, as it should already be a float value. But shouldn’t be a problem.

Yes, for the mode it’s more or less the same, but you’d need to set the mode depending on the raw payload - so use event.trigger.data.data with an if or something.
Also don’t use the state addresses for that (and temperature). New values should trigger a telegram to the normal (non-state) addresses from devices like the Z35.

If you want multiple triggers in one automation to do different things have a look in the automation documentation for “trigger id” and “choose”.