Thermia Calibra Cool 7 – Realistic Power Estimate Template (No CT Clamp / Power Meter)

Hi everyone,

After a lot of iteration and research I finally have a stable and reasonably accurate way to estimate power consumption on my Thermia Calibra Cool 7 (inverter ground source heat pump) without installing a CT clamp or power meter.

What it does

  • Uses the built-in binary sensors (status_no_demand, status_heat, status_hotwater, etc.) + supply/return line temperatures (Delta-T)
  • Applies lowpass filtering on Delta-T for stability
  • Outputs a realistic kW value + clean operating_mode attribute
  • Feeds directly into the Energy Dashboard via an integration sensor + utility meter

Current calibrated values (based on community reports + live measurements)

  • No Demand: 0.13 kW ← This is the most important one and matches real measurements very well
  • Standby: 0.06 kW
  • Passive Cool: 0.20 kW
  • Active heating/cooling uses Delta-T brackets (2.9 – 6.2 kW)

Results

  • Energy Dashboard now shows realistic daily usage from the heat pump (~3 kWh/day while mostly idle)
  • Power flow card correctly shows ~130 W when in No Demand

Research note

I cross-checked against Thermia documentation, Keymark/ErP data, and multiple user reports from Nibe/Thermia owners. The 0.13 kW for No Demand sits right in the middle of real-world measurements (most people see 100–140 W because the brine pump usually stays running).

```yaml
      # ---------- THERmia SENSORS (Updated Safety Net) ----------
      - name: "Thermia Heat Pump Delta T Raw"
        unique_id: thermia_delta_t_raw
        unit_of_measurement: "°C"
        device_class: temperature
        state_class: measurement
        icon: mdi:thermometer-differential
        state: >
          {% set s = states('sensor.thermia_calibra_cool_7_supply_line_temperature') | float(0) %}
          {% set r = states('sensor.thermia_calibra_cool_7_return_line_temperature') | float(0) %}
          {{ (s - r) | abs | round(2) }}

      - name: "Thermia Heat Pump Power Estimate"
        unique_id: thermia_estimated_power
        unit_of_measurement: "kW"
        device_class: power
        state_class: measurement
        icon: mdi:heat-pump
        state: >
          {% set supply = states('sensor.thermia_calibra_cool_7_supply_line_temperature') | float(0) %}
          {% set raw_delta = ((supply - states('sensor.thermia_calibra_cool_7_return_line_temperature') | float(0)) | abs) %}
          {% set delta_t = states('sensor.thermia_heat_pump_delta_t_smoothed') | float(raw_delta) %}

          {% set no_demand = is_state('binary_sensor.thermia_calibra_cool_7_status_no_demand_operational_status', 'on') %}
          {% set standby = is_state('binary_sensor.thermia_calibra_cool_7_status_standby_operational_status', 'on') %}
          {% set passive_on = is_state('binary_sensor.thermia_calibra_cool_7_status_passive_cool_operational_status', 'on') %}
          {% set defrost_on = is_state('binary_sensor.thermia_calibra_cool_7_status_defrost_operational_status', 'on') %}
          {% set legionella_on = is_state('binary_sensor.thermia_calibra_cool_7_status_legionella_operational_status', 'on') %}
          {% set hotwater_on = is_state('binary_sensor.thermia_calibra_cool_7_status_hotwater_operational_status', 'on') %}
          {% set heat_on = is_state('binary_sensor.thermia_calibra_cool_7_status_heat_operational_status', 'on') %}
          {% set cool_on = is_state('binary_sensor.thermia_calibra_cool_7_status_cool_operational_status', 'on') %}
          {% set aux_on = (heat_on or hotwater_on) and supply > 45 %}

          {% if legionella_on %}
            {% set power = 6.8 %}
            {% set mode = 'legionella' %}
          {% elif aux_on %}
            {% set power = 6.8 %}
            {% set mode = 'aux' %}
          {% elif defrost_on %}
            {% set power = 4.5 %}
            {% set mode = 'defrost' %}
          {% elif hotwater_on %}
            {% set power = 5.5 %}
            {% set mode = 'hotwater' %}
          {% elif heat_on or cool_on %}
            {% set mode = 'heat' if heat_on else 'cool' %}
            {% if delta_t > 8 %} {% set power = 6.2 %}
            {% elif delta_t > 6 %} {% set power = 5.3 %}
            {% elif delta_t > 4 %} {% set power = 4.4 %}
            {% elif delta_t > 2 %} {% set power = 3.6 %}
            {% else %} {% set power = 2.9 %} {% endif %}
          {# Delta-T safety net - lowered to match real consumption #}
          {% elif delta_t > 7 %}
            {% set power = 0.50 %}
            {% set mode = 'high_delta_t' %}
          {% elif delta_t > 4 %}
            {% set power = 0.30 %}
            {% set mode = 'medium_delta_t' %}
          {# True idle states #}
          {% elif passive_on %}
            {% set power = 0.20 %}
            {% set mode = 'passive' %}
          {% elif standby %}
            {% set power = 0.06 %}
            {% set mode = 'standby' %}
          {% elif no_demand %}
            {% set power = 0.13 %}
            {% set mode = 'no_demand' %}
          {% else %}
            {% set power = 0.10 %}
            {% set mode = 'unknown' %}
          {% endif %}
          {{ power | round(2) }}

        attributes:
          delta_t_used: >
            {% set supply = states('sensor.thermia_calibra_cool_7_supply_line_temperature') | float(0) %}
            {% set raw_delta = ((supply - states('sensor.thermia_calibra_cool_7_return_line_temperature') | float(0)) | abs) %}
            {% set delta_t = states('sensor.thermia_heat_pump_delta_t_smoothed') | float(raw_delta) %}
            {{ delta_t | round(2) }}
          delta_t_source: >
            {{ 'smoothed' if states('sensor.thermia_heat_pump_delta_t_smoothed') not in ['unknown','unavailable',''] else 'raw' }}
          operating_mode: >
            {% set supply = states('sensor.thermia_calibra_cool_7_supply_line_temperature') | float(0) %}
            {% set raw_delta = ((supply - states('sensor.thermia_calibra_cool_7_return_line_temperature') | float(0)) | abs) %}
            {% set delta_t = states('sensor.thermia_heat_pump_delta_t_smoothed') | float(raw_delta) %}
            {% set heat_on = is_state('binary_sensor.thermia_calibra_cool_7_status_heat_operational_status', 'on') %}
            {% set cool_on = is_state('binary_sensor.thermia_calibra_cool_7_status_cool_operational_status', 'on') %}
            {% set hotwater_on = is_state('binary_sensor.thermia_calibra_cool_7_status_hotwater_operational_status', 'on') %}
            {% set passive_on = is_state('binary_sensor.thermia_calibra_cool_7_status_passive_cool_operational_status', 'on') %}
            {% set defrost_on = is_state('binary_sensor.thermia_calibra_cool_7_status_defrost_operational_status', 'on') %}
            {% set legionella_on = is_state('binary_sensor.thermia_calibra_cool_7_status_legionella_operational_status', 'on') %}
            {% set aux_on = (heat_on or hotwater_on) and supply > 45 %}
            {% set no_demand = is_state('binary_sensor.thermia_calibra_cool_7_status_no_demand_operational_status', 'on') %}
            {% set standby = is_state('binary_sensor.thermia_calibra_cool_7_status_standby_operational_status', 'on') %}
            {% if legionella_on %}legionella
            {% elif aux_on %}aux
            {% elif defrost_on %}defrost
            {% elif hotwater_on %}hotwater
            {% elif heat_on %}heat
            {% elif cool_on %}cool
            {% elif delta_t > 7 %}high_delta_t
            {% elif delta_t > 4 %}medium_delta_t
            {% elif passive_on %}passive
            {% elif standby %}standby
            {% elif no_demand %}no_demand
            {% else %}unknown{% endif %}
          power_kw_raw: "{{ states('sensor.thermia_estimated_power') | float(0) | round(2) }}"

Update: Recalibrated to electrical input (not heat output) + reliability fixes

After more digging I found a significant accuracy issue with my original brackets, so I'm posting a corrected version. Thanks to everyone who's been testing it.

The big fix: the active brackets were heat output, not electrical draw

My original active-mode values (2.9–6.2 kW) were effectively the thermal output of the heat pump, not the electrical consumption. Since the whole point is to estimate the kWh hitting your electricity bill, that's wrong — the compressor draws far less than it delivers because of COP.

The relationship is simply:

electrical input (kW) = heat output (kW) / COP

The Calibra Cool 7 is a 1.5–7 kW modulating inverter GSHP with a SCOP around 5.87. Inverter ground-source units hold a COP of roughly 4–5.5 across their modulation range (COP actually rises at part load before parasitic losses kick in). So a unit moving 1.5–7 kW of heat is only pulling about 0.3–1.75 kW electrical — not 3–6 kW. I cross-checked against a worked modulation example (an 8 kW unit at 40% load drawing 0.71 kW electrical at COP 4.5), which lines up almost exactly with my mid Delta-T bracket.

The resistive loads (aux immersion heater, legionella boost) stay high because they're ~1:1 electrical, and hot water sits a bit higher than space heating because the elevated supply temperature drops the COP to ~3.

Recalibrated values:

Mode Old (heat output) New (electrical)
Legionella 6.8 5.5
Aux heater 6.8 6.0
Defrost 4.5 1.2
Hot water 5.5 1.5–1.8 (by Delta-T)
Heating ΔT > 8 6.2 1.75
Heating ΔT > 6 5.3 1.35
Heating ΔT > 4 4.4 1.00
Heating ΔT > 2 3.6 0.65
Heating ΔT ≤ 2 2.9 0.40
Passive cool 0.18 0.20
high_delta_t (idle) 0.24 0.50
medium_delta_t (idle) 0.18 0.30
Standby 0.06 0.06 (unchanged)
No Demand 0.13 0.13 (unchanged)