Opentherm Multi Room brainstorming / ideas

If you are posting code, use the code tags and not quotes. That way you can pick out errors with indentations more easily. Like the first part:

setpoint_cv_virtual:
  friendly_name: "CV Virtual Setpoint"
  unit_of_measurement: "°C"
  value_template: >
    {% set woonkamer_td = (state_attr('climate.woonkamer_bt','temperature') - states('sensor.living_room_temperature') | float) %}
    {% set berging_td = (state_attr('climate.berging_bt','temperature') - states('sensor.berging_mija_temp_temperature') | float) %}
    {% set slaapkamer_td = (state_attr('climate.slaapkamer','temperature') - states('sensor.mbr_temperature') | float) %}
    {% set badkamer_td = (state_attr('climate.badkamer_bt','temperature') - states('sensor.badkamer_mija_temp_temperature') | float) %}
    {% set inkomhall_td = (state_attr('climate.inkomhall','temperature') - states('sensor.inkomhal_radiator_local_temperature') | float) %}
    {% set fitness_td = (state_attr('climate.fitness','temperature') - states('sensor.fitness_temperature') | float) %}
    {% set max_td = ([woonkamer_td,berging_td,slaapkamer_td,badkamer_td,inkomhall_td,fitness_td] | max) %}
    {% set list_room_td = [woonkamer_td,berging_td,slaapkamer_td,badkamer_td,inkomhall_td,fitness_td] %}
    {% set index_td = list_room_td.index(max_td) %}
    {% if index_td == 1 %}
      {{ state_attr('climate.woonkamer_bt','temperature') }}
    {% elif index_td == 2 %}
      {{ state_attr('climate.berging_bt','temperature') }}
    {% elif index_td == 3 %}
      {{ state_attr('climate.slaapkamer','temperature') }} 
    {% elif index_td == 4 %}
      {{ state_attr('climate.badkamer_bt','temperature') }}  
    {% elif index_td == 5 %}
      {{ state_attr('climate.inkomhall','temperature') }}          
    {% else %}
      {{ state_attr('climate.fitness','temperature') }}          
    {% endif %}

Having said that, you never seemed to define this is a template sensor.

Keep in mind that my code is old and had a few revisions. Important thing is to add default values so these get used when sensors are offline.

- platform: template
  sensors:
      setpoint_cv_virtual:
      friendly_name: "CV Virtual Setpoint"
      unit_of_measurement: "°C"
      value_template: >
        {% set alex_td = state_attr('climate.alex','temperature') | float(18) - states('sensor.alex_sensor_temperature') | float(18) %}
        {% set esther_td = state_attr('climate.esther','temperature') | float(18) - states('sensor.esther_sensor_temperature') | float(18) %}
        {% set woonkamer_td = state_attr('climate.woonkamer','temperature') | float(18) - states('sensor.woonkamer_sensor_temperature') | float(18) %}
        {% set max_td = ([woonkamer_td,alex_td,esther_td] | max) %}
        {% set list_room_td = [woonkamer_td,alex_td,esther_td] %}
        {% set index_td = list_room_td.index(max_td) %}
        {% if index_td == 1 %}
          {{ state_attr('climate.alex','temperature') | float(18)}}
        {% elif index_td == 2 %}
          {{ state_attr('climate.esther','temperature') | float(18)}}
        {% else %}
          {{ state_attr('climate.woonkamer','temperature') | float(18)}}
        {% endif %}
    temperature_cv_virtual:
      friendly_name: "CV Virtual Temperature"
      unit_of_measurement: "°C"
      value_template: >
        {% set alex_td = state_attr('climate.alex','temperature') - states('sensor.alex_sensor_temperature') | float(23) %}
        {% set esther_td = state_attr('climate.esther','temperature') - states('sensor.esther_sensor_temperature') | float(23) %}
        {% set woonkamer_td = state_attr('climate.woonkamer','temperature') - states('sensor.woonkamer_sensor_temperature') | float(23) %}
        {% set max_td = ([woonkamer_td,alex_td,esther_td] | max) %}
        {% set list_room_td = [woonkamer_td,alex_td,esther_td] %}
        {% set index_td = list_room_td.index(max_td) %}
        {% if index_td == 1 %}
          {{ states('sensor.alex_sensor_temperature') | float(23)}}
        {% elif index_td == 2 %}
          {{ states('sensor.esther_sensor_temperature') | float(23)}}
        {% else %}
          {{ states('sensor.woonkamer_sensor_temperature') | float(23)}}
        {% endif %}

Note that this is the old style as there was an issue getting the friendly_name to behave correctly in the new style. There is a long debate around this: Add (bring back) friendly_name to template sensors
But since the old style does not show signs of being decraped, i will use it like this :smiley:

Edit: i’ll mark this for future reference.