CCCPaste

Dakin Altherma Global CoP Home Assistant

###########################################
# ======================
# GLOBAL/MULTI-MODE SENSORS
# ======================

# ======================
# GLOBAL - Altherma Global - ULTIMATE SYSTEM COP
# ======================
# DOEL: 
#   De meest accurate systeem-efficiëntie berekening mogelijk voor Daikin Altherma 3.
#   Berekent de werkelijke "System COP" (wat je betaalt vs. wat je krijgt).
#
# METHODE (v2.5.x):
#   In plaats van te schatten hoeveel warmte de BUH toevoegt, meten we dit nu fysiek.
#   • Thermische Output: Gemeten via sensor NA de backup heater.
#   • Elektrische Input: Som van Compressor + Backup Heater.
#
# FORMULE:
#   COP = (Flow × 0.0696 × ΔT_System) ÷ (Elektrisch_Comp + Elektrisch_BUH)
#   * ΔT_System = (Temp NA BUH - Retour Temp)
#
# FEATURES:
#   1. Hybrid Measurement: Meet correct of de warmte van de compressor, de BUH, of beide komt.
#   2. 12kW Tuning: Ondersteunt flow rates tot 60 L/min (standaard sensoren kappen af op 25).
#   3. Partial Load Capture: Ondersteunt CoP tot 8.0 voor mild weer/deellast.
#   4. Defrost Detectie: Zet CoP op 0.0 tijdens ontdooien (geen nuttige warmte).
#   5. Directe Feedback: Geeft direct inzicht in impact van BUH op rendement.
#   6. Volledige Attributen: Behoudt alle dashboard-data (Volt, Amp, Flow, Modus, etc.).
#
# TYPISCHE WAARDEN (12kW Model):
#   • Compressor only: CoP 3.5 - 6.0
#   • Hybrid (Comp + BUH): CoP 2.0 - 3.0 (Tijdens SWW of extreme kou)
#   • Defrost: CoP 0.0
#
# VERSION HISTORY:
#   v2.5.3 - FIX: Power calculation consistency - use direct power sensor instead of calculated
#   v2.5.2 - Added Performance Guidelines to calculation note
#   v2.5.1 - Restored all original attributes with updated logic
#   v2.5.0 - ULTIMATE: Overstap naar fysieke meting NA BUH (geen schattingen meer)
#   v2.4.0 - System Efficiency: BUH elektrisch meegerekend in input
#   v2.3.3 - Toegevoegd: Equipment Model informatie in attributen
#   v2.3.2 - Fix: Scope errors in attributen opgelost
#   v2.3.1 - Fix: Flow limiet verhoogd naar 60 L/min voor 12kW unit
#   v2.3.0 - Toegevoegd: Outdoor temperatuur context
#   v2.2.0 - Toegevoegd: BUH detectie en power stability check
#   v2.0.0 - Major rewrite met universele ΔT validatie
# ======================


template:

  - sensor:
      name: "Altherma Global - COP"
      unique_id: "altherma_global_cop"
      unit_of_measurement: "COP"
      state_class: "measurement"
      device_class: "power_factor"
      state: >-
        {% set flow = state_attr('sensor.althermasensors', 'Flow sensor (l/min)') | float(0) %}
        {% set temp_out = states('sensor.espaltherma_leaving_after_buh') | float(0) %}
        {% set temp_in = state_attr('sensor.althermasensors', 'Inlet water temp.(R4T)') | float(0) %}
        {% set comp_power_w = states('sensor.warmtepomp_power') | float(0) %}
        {% set comp_power_kw = comp_power_w / 1000 %}
        {% set buh_power_w = states('sensor.weerstand_power') | float(0) %}
        {% set buh_power_kw = buh_power_w / 1000 %}
        {% set total_elec_kw = comp_power_kw + buh_power_kw %}
        {% set defrost = is_state('sensor.daikin_defrost_operation', 'ON') %}
        {% set power_stable = comp_power_w > 50 and comp_power_w < 8000 %}
        {% set valid_flow = flow > 5 and flow < 65 %}
        {% set valid_temps = temp_out > 10 and temp_out < 70 and temp_in > 5 and temp_in < 65 %}
        {% set delta_t = (temp_out - temp_in) | abs %}
        {% set total_thermal_kw = flow * 0.0696 * delta_t %}
        {% if not defrost and total_elec_kw > 0.05 and valid_flow and valid_temps and power_stable %}
          {% set cop = total_thermal_kw / total_elec_kw %}
          {% if cop <= 20.0 %}
            {{ cop | round(3) }}
          {% else %}
            0.0
          {% endif %}
        {% else %}
          0.0
        {% endif %}

      attributes:
        operation_mode: >-
          {% set temp_out = states('sensor.espaltherma_leaving_after_buh') | float(0) %}
          {% set temp_in = state_attr('sensor.althermasensors', 'Inlet water temp.(R4T)') | float(0) %}
          {% set delta_t = temp_out - temp_in %}
          {% set defrost_active = is_state('sensor.daikin_defrost_operation', 'ON') %}
          {% set buh_active = is_state('binary_sensor.daikin_backup_heater', 'on') or states('sensor.weerstand_power') | float(0) > 100 %}
          {% if defrost_active %}
            Defrost Active
          {% elif buh_active and delta_t > 1.0 %}
            Heating (Hybrid/BUH)
          {% elif delta_t > 1.0 %}
            Heating
          {% elif delta_t < -1.0 %}
            Cooling
          {% else %}
            Standby (ΔT: {{ delta_t | round(1) }}°C)
          {% endif %}
        
        flow_rate: >-
          {% set val = state_attr('sensor.althermasensors', 'Flow sensor (l/min)') | float(0) %}
          {% if val > 5 and val < 65 %}
            {{ val | round(1) }} L/min
          {% else %}
            Invalid ({{ val | round(1) }})
          {% endif %}
        
        leaving_temp: >-
          {{ states('sensor.espaltherma_leaving_after_buh') | float(0) | round(1) }} °C (After BUH)
        
        inlet_temp: >-
          {{ state_attr('sensor.althermasensors', 'Inlet water temp.(R4T)') | float(0) | round(1) }} °C
        
        delta_t: >-
          {% set temp_out = states('sensor.espaltherma_leaving_after_buh') | float(0) %}
          {% set temp_in = state_attr('sensor.althermasensors', 'Inlet water temp.(R4T)') | float(0) %}
          {{ (temp_out - temp_in) | abs | round(1) }} °C
        
        thermal_power: >-
          {% set flow = state_attr('sensor.althermasensors', 'Flow sensor (l/min)') | float(0) %}
          {% set temp_out = states('sensor.espaltherma_leaving_after_buh') | float(0) %}
          {% set temp_in = state_attr('sensor.althermasensors', 'Inlet water temp.(R4T)') | float(0) %}
          {% set delta_t = (temp_out - temp_in) | abs %}
          {{ (flow * 0.0696 * delta_t) | round(2) }} kW
        
        electrical_input: >-
          {% set comp_kw = states('sensor.warmtepomp_power') | float(0) / 1000 %}
          {% set buh_kw = states('sensor.weerstand_power') | float(0) / 1000 %}
          {{ (comp_kw + buh_kw) | round(2) }} kW (Comp + BUH)
        
        current: "{{ states('sensor.warmtepomp_current') }} A"
        voltage: "{{ states('sensor.warmtepomp_voltage') }} V"
        power_factor: "{{ states('sensor.warmtepomp_power_factor') | default('0.92') }}"
        warmtepomp_power: "{{ states('sensor.warmtepomp_power') | float(0) | round(1) }} W"
        
        freeze_protection: "{{ state_attr('sensor.althermasensors', 'Freeze Protection') | default('Unknown') }}"
        defrost_operation: "{{ states('sensor.daikin_defrost_operation') | default('Unknown') }}"
        
        backup_heater_active: >-
          {{ is_state('binary_sensor.daikin_backup_heater', 'on') or states('sensor.weerstand_power') | float(0) > 100 }}
        buh_power: "{{ states('sensor.weerstand_power') | default('0') }} W"
        
        power_stable: >-
          {{ states('sensor.warmtepomp_power') | float(0) > 50 and states('sensor.warmtepomp_power') | float(0) < 8000 }}
        
        outdoor_temperature: "{{ states('sensor.bt_carport_temperature') | default('Unknown') }} °C"
        
        performance_context: >-
          {% set flow = state_attr('sensor.althermasensors', 'Flow sensor (l/min)') | float(0) %}
          {% set temp_out = states('sensor.espaltherma_leaving_after_buh') | float(0) %}
          {% set temp_in = state_attr('sensor.althermasensors', 'Inlet water temp.(R4T)') | float(0) %}
          {% set delta_t = (temp_out - temp_in) | abs %}
          {% set therm = flow * 0.0696 * delta_t %}
          {% set elec = (states('sensor.warmtepomp_power')|float / 1000) + (states('sensor.weerstand_power')|float / 1000) %}
          {% if elec > 0.05 and flow > 5 %}
            {% set real_cop = therm / elec %}
            {% if real_cop == 0 %}Standby
            {% elif real_cop < 2.5 %}Low Efficiency (Check BUH/Weather)
            {% elif real_cop < 4.0 %}Good
            {% else %}Excellent
            {% endif %}
          {% else %}
            Standby
          {% endif %}
        
        calculation_active: >-
          {% set flow = state_attr('sensor.althermasensors', 'Flow sensor (l/min)') | float(0) %}
          {% set power = states('sensor.warmtepomp_power') | float(0) %}
          {{ flow > 5 and power > 50 }}
        
        data_quality: >-
          {% set flow = state_attr('sensor.althermasensors', 'Flow sensor (l/min)') | float(0) %}
          {% set temp = states('sensor.espaltherma_leaving_after_buh') | float(0) %}
          {% if flow > 5 and flow < 65 and temp > 10 and temp < 70 %}Good{% else %}Poor/Idle{% endif %}
        
        cop_calculation_note: "Guidelines (Heating LWT 35°C): • Excellent: > 5.0 (Mild +12°C) • Good: 4.0 - 5.0 (Nominal +7°C) • Normal: 3.0 - 4.0 (Cold +2°C) • Fair: 2.2 - 3.0 (Freeze -7°C) • Poor: < 2.2 (BUH Active or Issue)"
        system_info: "ETVX12S23EJ6V + EPRA12EAV3, 12 kW (2023)"
        version: "2.5.3"

      availability: >-
        {{ states('sensor.althermasensors') not in ['unavailable', 'unknown', 'none'] and states('sensor.espaltherma_leaving_after_buh') not in ['unavailable', 'unknown', 'none'] and states('sensor.warmtepomp_power') not in ['unavailable', 'unknown', 'none'] }}