##################################################################
#### Titel	: template_energie.yaml
#### Date	: 30.11.2025
#### Version: 1.0
#### State	: 30.11.2025
##################################################################

# ==============================================================================================================================================
# ============================================== SCHICHT A.1 - ROH-ZÄHLER ======================================================================
# ==============================================================================================================================================

# ==============================================================================================================================================
# Schicht A.1 – Rohzähler in Home Assistant (nur Boot-Guard, keine Offsets)
# Diese Sensoren spiegeln die physischen Zählerstände (Bitshake) und werden nur während der Bootphase eingefroren.
# ==============================================================================================================================================

# --------------------------------------------------
# Bitshake: WP-Hauptzähler Eingang (Z1) – Netzbezug gesamt
# --------------------------------------------------
- trigger:
    - platform: homeassistant
      event: start
    - platform: state
      entity_id: sensor.bitshake_wp_picus_e_in
  sensor:
    - name: "Netzbezug Gesamt (kWh)"
      unique_id: netzbezug_gesamt_kwh
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      state: >
        {# Rohwert aus dem Bitshake-Zähler #}
        {% set raw = states('sensor.bitshake_wp_picus_e_in') | float(0) %}

        {# Bisheriger Wert des Template-Sensors #}
        {% set prev_raw = this.state %}
        {% set prev = prev_raw|float(0)
             if prev_raw not in ['unknown','unavailable','nan']
             else raw %}

        {# Boot-Guard: während der Sperre NICHT ändern #}
        {% if is_state('input_boolean.sperre_energiezahler_bootphase', 'on') %}
          {{ prev }}
        {% else %}
          {{ raw }}
        {% endif %}
      availability: >
        {{ states('sensor.bitshake_wp_picus_e_in') not in ['unknown', 'unavailable', 'nan'] }}

# --------------------------------------------------
# Bitshake: WP-Hauptzähler Ausgang (Z1) – Netzeinspeisung
# --------------------------------------------------
- trigger:
    - platform: homeassistant
      event: start
    - platform: state
      entity_id: sensor.bitshake_wp_picus_e_out
  sensor:
    - name: "Netzeinspeisung (kWh)"
      unique_id: netzeinspeisung_kwh
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      state: >
        {% set raw = states('sensor.bitshake_wp_picus_e_out') | float(0) %}

        {% set prev_raw = this.state %}
        {% set prev = prev_raw|float(0)
             if prev_raw not in ['unknown','unavailable','nan']
             else raw %}

        {% if is_state('input_boolean.sperre_energiezahler_bootphase', 'on') %}
          {{ prev }}
        {% else %}
          {{ raw }}
        {% endif %}
      availability: >
        {{ states('sensor.bitshake_wp_picus_e_out') not in ['unknown', 'unavailable', 'nan'] }}

# --------------------------------------------------
# Bitshake: Zähler WHG2/Allgemeinstrom/Wallbox – Netzbezug WHG2/Allg./WB
# --------------------------------------------------
- trigger:
    - platform: homeassistant
      event: start
    - platform: state
      entity_id: sensor.bitshake_whg2_picus_e_in
  sensor:
    - name: "Netzbezug WHG2/Allg./WB (kWh)"
      unique_id: netzbezug_whg2_allg_wb_kwh
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      state: >
        {% set raw = states('sensor.bitshake_whg2_picus_e_in') | float(0) %}

        {% set prev_raw = this.state %}
        {% set prev = prev_raw|float(0)
             if prev_raw not in ['unknown','unavailable','nan']
             else raw %}

        {% if is_state('input_boolean.sperre_energiezahler_bootphase', 'on') %}
          {{ prev }}
        {% else %}
          {{ raw }}
        {% endif %}
      availability: >
        {{ states('sensor.bitshake_whg2_picus_e_in') not in ['unknown', 'unavailable', 'nan'] }}

# --------------------------------------------------
# Bitshake: Zähler WHG2 Ausgang – PV-Ertrag ohne Batterieeinspeisung
# --------------------------------------------------
- trigger:
    - platform: homeassistant
      event: start
    - platform: state
      entity_id: sensor.bitshake_whg2_picus_e_out
  sensor:
    - name: "PV Ertrag ohne Batterieeinspeisung (kWh)"
      unique_id: pv_ertrag_ohne_batterieesinspeisung_kwh
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      state: >
        {% set raw = states('sensor.bitshake_whg2_picus_e_out') | float(0) %}

        {% set prev_raw = this.state %}
        {% set prev = prev_raw|float(0)
             if prev_raw not in ['unknown','unavailable','nan']
             else raw %}

        {% if is_state('input_boolean.sperre_energiezahler_bootphase', 'on') %}
          {{ prev }}
        {% else %}
          {{ raw }}
        {% endif %}
      availability: >
        {{ states('sensor.bitshake_whg2_picus_e_out') not in ['unknown', 'unavailable', 'nan'] }}




# ==============================================================================================================================================
# Schicht A.1 – Rohzähler in Home Assistant (nur Boot-Guard, keine Offsets)
# Diese Sensoren spiegeln die physischen Zählerstände (Eltako) und werden nur während der Bootphase eingefroren.
# ==============================================================================================================================================

# --------------------------------------------------
# Eltako: Zwischenzähler Wärmepumpe – Verbrauch WP
# --------------------------------------------------
- trigger:
    - platform: homeassistant
      event: start
    - platform: state
      entity_id: sensor.warmepumpenstrom_energie_importiert
  sensor:
    - name: "Verbrauch Wärmepumpe (kWh)"
      unique_id: verbrauch_warmepumpe_kwh
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      state: >
        {% set raw = states('sensor.warmepumpenstrom_energie_importiert') | float(0) %}

        {% set prev_raw = this.state %}
        {% set prev = prev_raw|float(0)
             if prev_raw not in ['unknown','unavailable','nan']
             else raw %}

        {% if is_state('input_boolean.sperre_energiezahler_bootphase', 'on') %}
          {{ prev }}
        {% else %}
          {{ raw }}
        {% endif %}
      availability: >
        {{ states('sensor.warmepumpenstrom_energie_importiert') not in ['unknown', 'unavailable', 'nan'] }}

# --------------------------------------------------
# Eltako: Zwischenzähler Allgemeinstrom – Verbrauch Allgemeinstrom
# --------------------------------------------------
- trigger:
    - platform: homeassistant
      event: start
    - platform: state
      entity_id: sensor.allgemeinstrom_energie_importiert
  sensor:
    - name: "Verbrauch Allgemeinstrom (kWh)"
      unique_id: verbrauch_allgemeinstrom_kwh
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      state: >
        {% set raw = states('sensor.allgemeinstrom_energie_importiert') | float(0) %}

        {% set prev_raw = this.state %}
        {% set prev = prev_raw|float(0)
             if prev_raw not in ['unknown','unavailable','nan']
             else raw %}

        {% if is_state('input_boolean.sperre_energiezahler_bootphase', 'on') %}
          {{ prev }}
        {% else %}
          {{ raw }}
        {% endif %}
      availability: >
        {{ states('sensor.allgemeinstrom_energie_importiert') not in ['unknown', 'unavailable', 'nan'] }}




# ==============================================================================================================================================
# ============================================== SCHICHT A.1.1 - ABGELEITETE ROH-ZÄHLER ========================================================
# ==============================================================================================================================================


# =====================================================================
# Schicht A.1.1 – Abgeleiteter Rohzähler ohne Offsets
# Basis: A.1 (physische BitShake-Zähler Z1 & Z2)
# Zweck:
#   - echter Differenzzähler für die Wärmepumpe
#   - Debug-/Diagnosewert
#   - wird von Schicht B NICHT genutzt
#   - dient als unabhängige Kontrollgröße für die Kaskade
# =====================================================================

- sensor:
    - name: "Netzbezug Wärmepumpe (kWh)"
      unique_id: netzbezug_warmepumpe_kwh
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      availability: >
        {{ states('sensor.netzbezug_gesamt_kwh')|is_number
           and states('sensor.netzbezug_whg2_allg_wb_kwh')|is_number }}
      state: >
        {% set prev_raw = this.state %}
        {% set prev = prev_raw|float(0)
          if prev_raw not in ['unknown','unavailable','nan']
          else None %}

        {% set guard = is_state('input_boolean.sperre_energiezahler_bootphase','on') %}
        {% set max_jump = 100.0 if guard else 5.0 %}

        {# Zählerstände aus der echten Hardware (Schicht A.1) #}
        {% set z1 = states('sensor.netzbezug_gesamt_kwh')|float(0) %}
        {% set z2 = states('sensor.netzbezug_whg2_allg_wb_kwh')|float(0) %}

        {# Rohdifferenz #}
        {% set calc = (z1 - z2)|round(3) %}

        {# Monotonie & Schutz #}
        {% if calc < 0 %}
          {{ (prev if prev is not none else 0) }}
        {% elif prev is none or prev == 0 %}
          {{ calc }}
        {% elif guard %}
          {{ prev }}
        {% elif calc < prev %}
          {{ prev }}
        {% elif (calc - prev) > max_jump %}
          {{ prev }}
        {% else %}
          {{ calc }}
        {% endif %}




# ==============================================================================================================================================
# ============================================== SCHICHT A.2 - ROH-ZÄHLER mit OFFSET ===========================================================
# ==============================================================================================================================================

# ==============================================================================================================================================
# Schicht A.2 – Korrigierte Zähler ab 01.01.2025 (Offsets + Sicherungen)
# Basis: Schicht A.1 (Rohzähler - BitShake), plus:
# - Offset aus input_number.*
# - Boot-Guard (während Bootphase keine Änderungen)
# - Monotonie-Schutz (nie rückwärts)
# - Maximaler Sprung je Update (5 kWh, im Guard-Fall effektiv Freeze)
# ==============================================================================================================================================

# --------------------------------------------------
# Netzbezug Gesamt (ab 01.01.2025)
# Roh: sensor.netzbezug_gesamt_kwh  (Bitshake Z1)
# Offset: input_number.offset_netzbezug_gesamt_ab_2025  (z. B. -6084.708)
# --------------------------------------------------
- sensor:
    - name: "Netzbezug Gesamt (ab 01.01.2025)"
      unique_id: netzbezug_gesamt_ab_2025
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total
      availability: >
        {{ states('sensor.netzbezug_gesamt_kwh')|is_number
           and states('input_number.offset_netzbezug_gesamt_ab_2025')|is_number }}
      state: >
        {% set raw    = states('sensor.netzbezug_gesamt_kwh')|float(0) %}
        {% set offset = states('input_number.offset_netzbezug_gesamt_ab_2025')|float(0) %}
        {% set calc   = (raw + offset)|round(3) %}

        {% set prev_raw = this.state %}
        {% set prev = prev_raw|float(0)
           if prev_raw not in ['unknown','unavailable','nan']
           else None %}
        {% set guard    = is_state('input_boolean.sperre_energiezahler_bootphase','on') %}
        {% set max_jump = 100.0 if guard else 5.0 %}

        {% if calc < 0 %}
          {{ (prev if prev is not none else 0) }}
        {% elif prev is none %}
          {# Erstinitialisierung #}
          {{ calc }}
        {% elif guard %}
          {# Während Boot-Guard bleibt der Wert stehen #}
          {{ prev }}
        {% elif calc < prev %}
          {# Niemals rückwärts #}
          {{ prev }}
        {% elif (calc - prev) > max_jump %}
          {# Spikes/Konfig-Fehler abfangen #}
          {{ prev }}
        {% else %}
          {{ calc }}
        {% endif %}

# --------------------------------------------------
# Netzeinspeisung (ab 01.01.2025)
# Roh: sensor.netzeinspeisung_kwh (Bitshake Z1 Ausgang)
# Offset: input_number.offset_netzeinspeisung_ab_2025
#   (z. B. -7034 laut deiner Tabelle)
# --------------------------------------------------
    - name: "Netzeinspeisung (ab 01.01.2025)"
      unique_id: netzeinspeisung_ab_2025
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total
      availability: >
        {{ states('sensor.netzeinspeisung_kwh')|is_number
           and states('input_number.offset_pv_export_bitshake_z1_ab_2025')|is_number }}
      state: >
        {% set raw  = states('sensor.netzeinspeisung_kwh')|float(0) %}
        {% set off  = states('input_number.offset_pv_export_bitshake_z1_ab_2025')|float(0) %}
        {% set calc = (raw + off)|round(3) %}

        {% set prev_raw = this.state %}
        {% set prev = prev_raw|float(0)
           if prev_raw not in ['unknown','unavailable','nan']
           else 0 %}
        {% set guard = is_state('input_boolean.sperre_energiezahler_bootphase','on') %}

        {% if guard %}
          {{ prev }}
        {% elif calc < 0 %}
          {{ prev }}
        {% else %}
          {{ [calc, prev] | max }}
        {% endif %}

# --------------------------------------------------
# Netzbezug WHG2/Allg./WB (ab 01.01.2025)
# Roh: sensor.netzbezug_whg2_allg_wb_kwh (Bitshake Z2 Eingang)
# Offset: input_number.offset_netzbezug_whg2_allg_wb_ab_2025  (z. B. -1348)
# --------------------------------------------------
    - name: "Netzbezug WHG2/Allg./WB (ab 01.01.2025)"
      unique_id: netzbezug_whg2_allg_wb_ab_2025
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total
      availability: >
        {{ states('sensor.netzbezug_whg2_allg_wb_kwh')|is_number
           and states('input_number.offset_netzbezug_whg2_allg_wb_ab_2025')|is_number }}
      state: >
        {% set raw    = states('sensor.netzbezug_whg2_allg_wb_kwh')|float(0) %}
        {% set offset = states('input_number.offset_netzbezug_whg2_allg_wb_ab_2025')|float(0) %}
        {% set calc   = (raw + offset)|round(3) %}

        {% set prev_raw = this.state %}
        {% set prev = prev_raw|float(0)
           if prev_raw not in ['unknown','unavailable','nan']
           else None %}
        {% set guard    = is_state('input_boolean.sperre_energiezahler_bootphase','on') %}
        {% set max_jump = 100.0 if guard else 5.0 %}

        {% if calc < 0 %}
          {{ (prev if prev is not none else 0) }}
        {% elif prev is none %}
          {{ calc }}
        {% elif guard %}
          {{ prev }}
        {% elif calc < prev %}
          {{ prev }}
        {% elif (calc - prev) > max_jump %}
          {{ prev }}
        {% else %}
          {{ calc }}
        {% endif %}

# --------------------------------------------------
# PV-Ertrag ohne Batterieeinspeisung (ab 01.01.2025)
# Roh: sensor.pv_ertrag_ohne_batterieeinspeisung_kwh (Bitshake Z2 Ausgang)
# Offset: input_number.offset_pv_ertrag_ohne_batterie_ab_2025
#   (z. B. -8664 laut deiner Rechnung; Startwert im Helper eintragen)
# --------------------------------------------------
    - name: "PV Ertrag ohne Batterieeinspeisung (ab 01.01.2025)"
      unique_id: pv_ertrag_ohne_batterieeinspeisung_ab_2025
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total
      availability: >
        {{ states('sensor.pv_ertrag_ohne_batterieeinspeisung_kwh')|is_number
           and states('input_number.offset_pv_ertrag_bitshake_z2_ab_2025')|is_number }}
      state: >
        {% set raw  = states('sensor.pv_ertrag_ohne_batterieeinspeisung_kwh')|float(0) %}
        {% set off  = states('input_number.offset_pv_ertrag_bitshake_z2_ab_2025')|float(0) %}
        {% set calc = (raw + off)|round(3) %}

        {% set prev_raw = this.state %}
        {% set prev = prev_raw|float(0)
           if prev_raw not in ['unknown','unavailable','nan']
           else 0 %}
        {% set guard = is_state('input_boolean.sperre_energiezahler_bootphase','on') %}

        {% if guard %}
          {{ prev }}
        {% elif calc < 0 %}
          {{ prev }}
        {% else %}
          {{ [calc, prev] | max }}
        {% endif %}




# ==============================================================================================================================================
# Schicht A.2 – Korrigierte Zähler ab 01.01.2025 (Offsets + Sicherungen)
# Basis: Schicht A.1 (Rohzähler - Eltako), plus:
# - Offset aus input_number.*
# - Boot-Guard (während Bootphase keine Änderungen)
# - Monotonie-Schutz (nie rückwärts)
# - Maximaler Sprung je Update (5 kWh, im Guard-Fall effektiv Freeze)
# ==============================================================================================================================================

# ====================== Korrigierte Eltako-Zähler ab 01.01.2025  (nur Boot‑Guard) ======================
# Diese Sensoren sind nur für Auswertungen / Dashboards gedacht.
# Die Rohsensoren verbrauch_warmepumpe_kwh und verbrauch_allgemeinstrom_kwh bleiben unverändert
# und entsprechen weiterhin exakt den physischen Zählerständen.

# --------------------------------------------------
# Verbrauch Wärmepumpe (ab 01.01.2025)
# Roh: sensor.verbrauch_warmepumpe_kwh (Eltako WP-Zwischenzähler)
# Offset: input_number.offset_verbrauch_warmepumpe_ab_2025 (z. B. +2466.55)
# --------------------------------------------------
- sensor:
    - name: "Verbrauch Wärmepumpe (ab 01.01.2025)"
      unique_id: verbrauch_warmepumpe_ab_2025
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total
      availability: >
        {{ states('sensor.verbrauch_warmepumpe_kwh')|is_number
           and states('input_number.offset_verbrauch_warmepumpe_ab_2025')|is_number }}
      state: >
        {% set raw    = states('sensor.verbrauch_warmepumpe_kwh')|float(0) %}
        {% set offset = states('input_number.offset_verbrauch_warmepumpe_ab_2025')|float(0) %}
        {% set calc   = (raw + offset)|round(3) %}

        {% set prev_raw = this.state %}
        {% set prev = prev_raw|float(0)
           if prev_raw not in ['unknown','unavailable','nan']
           else None %}
        {% set guard    = is_state('input_boolean.sperre_energiezahler_bootphase','on') %}
        {% set max_jump = 100.0 if guard else 5.0 %}

        {% if calc < 0 %}
          {{ (prev if prev is not none else 0) }}
        {% elif prev is none %}
          {{ calc }}
        {% elif guard %}
          {{ prev }}
        {% elif calc < prev %}
          {{ prev }}
        {% elif (calc - prev) > max_jump %}
          {{ prev }}
        {% else %}
          {{ calc }}
        {% endif %}

# --------------------------------------------------
# Verbrauch Allgemeinstrom (ab 01.01.2025)
# Roh: sensor.verbrauch_allgemeinstrom_kwh (Eltako Allgemeinstrom)
# Offset: input_number.offset_verbrauch_allgemeinstrom_ab_2025 (z. B. +107.06)
# --------------------------------------------------
    - name: "Verbrauch Allgemeinstrom (ab 01.01.2025)"
      unique_id: verbrauch_allgemeinstrom_ab_2025
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total
      availability: >
        {{ states('sensor.verbrauch_allgemeinstrom_kwh')|is_number
           and states('input_number.offset_verbrauch_allgemeinstrom_ab_2025')|is_number }}
      state: >
        {% set raw    = states('sensor.verbrauch_allgemeinstrom_kwh')|float(0) %}
        {% set offset = states('input_number.offset_verbrauch_allgemeinstrom_ab_2025')|float(0) %}
        {% set calc   = (raw + offset)|round(3) %}

        {% set prev_raw = this.state %}
        {% set prev = prev_raw|float(0)
           if prev_raw not in ['unknown','unavailable','nan']
           else None %}
        {% set guard    = is_state('input_boolean.sperre_energiezahler_bootphase','on') %}
        {% set max_jump = 100.0 if guard else 5.0 %}

        {% if calc < 0 %}
          {{ (prev if prev is not none else 0) }}
        {% elif prev is none %}
          {{ calc }}
        {% elif guard %}
          {{ prev }}
        {% elif calc < prev %}
          {{ prev }}
        {% elif (calc - prev) > max_jump %}
          {{ prev }}
        {% else %}
          {{ calc }}
        {% endif %}




# =====================================================================
# Schicht A.2 – Korrigierter Netzbezug der Wärmepumpe ab 01.01.2025
# Basis: Schicht A.2 korrigierte Zähler:
#   - sensor.netzbezug_gesamt_ab_2025
#   - sensor.netzbezug_whg2_allg_wb_ab_2025
#
# Zweck:
#   - offizieller WP-Netzbezugszähler für alle Auswertungen (Schicht B)
#   - vollständig offset-korrigiert
#   - monoton geschützt, kein Zurückspringen
# =====================================================================

- sensor:
    - name: "Netzbezug Wärmepumpe (ab 01.01.2025)"
      unique_id: netzbezug_warmepumpe_ab_2025
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total
      availability: >
        {{ states('sensor.netzbezug_gesamt_ab_2025')|is_number
           and states('sensor.netzbezug_whg2_allg_wb_ab_2025')|is_number }}
      state: >
        {% set prev_raw = this.state %}
        {% set prev = prev_raw|float(0)
            if prev_raw not in ['unknown','unavailable','nan']
            else None %}

        {% set guard = is_state('input_boolean.sperre_energiezahler_bootphase','on') %}
        {% set max_jump = 100.0 if guard else 5.0 %}

        {# Korrigierte Zähler aus Schicht A.2 #}
        {% set z1 = states('sensor.netzbezug_gesamt_ab_2025')|float(0) %}
        {% set z2 = states('sensor.netzbezug_whg2_allg_wb_ab_2025')|float(0) %}

        {% set calc = (z1 - z2)|round(3) %}

        {# Monotonie-Logik #}
        {% if calc < 0 %}
          {{ (prev if prev is not none else 0) }}
        {% elif prev is none %}
          {{ calc }}     {# Erstinitialisierung #}
        {% elif guard %}
          {{ prev }}
        {% elif calc < prev %}
          {{ prev }}
        {% elif (calc - prev) > max_jump %}
          {{ prev }}
        {% else %}
          {{ calc }}
        {% endif %}




# ==============================================================================================================================================
# Schicht A.2 – Korrigierte Zähler ab 01.01.2025 (Offsets + Sicherungen)
# Basis: Schicht A.1 (Rohzähler - Sungrow), plus:
# - Offset aus input_number.*
# - Boot-Guard (während Bootphase keine Änderungen)
# - Monotonie-Schutz (nie rückwärts)
# - Maximaler Sprung je Update (5 kWh, im Guard-Fall effektiv Freeze)
# ==============================================================================================================================================

# --------------------------------------------------
# Direktverbrauch PV (ab 01.01.2025)
# Basis: Sungrow total_direct_energy_consumption
# --------------------------------------------------
- sensor:
    - name: "Direktverbrauch PV Sungrow (ab 01.01.2025)"
      unique_id: direktverbrauch_pv_sungrow_ab_2025
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total
      availability: >
        {{ states('sensor.total_direct_energy_consumption')|is_number
           and states('input_number.offset_pv_direct_consumption_ab_2025')|is_number }}
      state: >
        {% set raw  = states('sensor.total_direct_energy_consumption')|float(0) %}
        {% set off  = states('input_number.offset_pv_direct_consumption_ab_2025')|float(0) %}
        {% set calc = (raw + off)|round(3) %}

        {% set prev_raw = this.state %}
        {% set prev = prev_raw|float(0)
           if prev_raw not in ['unknown','unavailable','nan']
           else None %}
        {% set guard    = is_state('input_boolean.sperre_energiezahler_bootphase','on') %}
        {% set max_jump = 100.0 if guard else 5.0 %}

        {% if calc < 0 %}
          {{ (prev if prev is not none else 0) }}
        {% elif prev is none %}
          {{ calc }}
        {% elif guard %}
          {{ prev }}
        {% elif calc < prev %}
          {{ prev }}
        {% elif (calc - prev) > max_jump %}
          {{ prev }}
        {% else %}
          {{ calc }}
        {% endif %}

# --------------------------------------------------
# Batterie-Entladung (ab 01.01.2025)
# Basis: Sungrow total_battery_discharge
# --------------------------------------------------
    - name: "Batterie Entladung Sungrow (ab 01.01.2025)"
      unique_id: batterie_entladung_sungrow_ab_2025
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total
      availability: >
        {{ states('sensor.total_battery_discharge')|is_number
           and states('input_number.offset_battery_discharge_ab_2025')|is_number }}
      state: >
        {% set raw  = states('sensor.total_battery_discharge')|float(0) %}
        {% set off  = states('input_number.offset_battery_discharge_ab_2025')|float(0) %}
        {% set calc = (raw + off)|round(3) %}

        {% set prev_raw = this.state %}
        {% set prev = prev_raw|float(0)
           if prev_raw not in ['unknown','unavailable','nan']
           else None %}
        {% set guard    = is_state('input_boolean.sperre_energiezahler_bootphase','on') %}
        {% set max_jump = 100.0 if guard else 5.0 %}

        {% if calc < 0 %}
          {{ (prev if prev is not none else 0) }}
        {% elif prev is none %}
          {{ calc }}
        {% elif guard %}
          {{ prev }}
        {% elif calc < prev %}
          {{ prev }}
        {% elif (calc - prev) > max_jump %}
          {{ prev }}
        {% else %}
          {{ calc }}
        {% endif %}

# --------------------------------------------------
# Batterie-Ladung gesamt (ab 01.01.2025)
# Basis: Sungrow total_battery_charge
# --------------------------------------------------
    - name: "Batterieladung gesamt Sungrow (ab 01.01.2025)"
      unique_id: batterieladung_gesamt_sungrow_ab_2025
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total
      availability: >
        {{ states('sensor.total_battery_charge')|is_number
           and states('input_number.offset_battery_charge_ab_2025')|is_number }}
      state: >
        {% set raw  = states('sensor.total_battery_charge')|float(0) %}
        {% set off  = states('input_number.offset_battery_charge_ab_2025')|float(0) %}
        {% set calc = (raw + off)|round(3) %}

        {% set prev_raw = this.state %}
        {% set prev = prev_raw|float(0)
           if prev_raw not in ['unknown','unavailable','nan']
           else None %}
        {% set guard    = is_state('input_boolean.sperre_energiezahler_bootphase','on') %}
        {% set max_jump = 100.0 if guard else 5.0 %}

        {% if calc < 0 %}
          {{ (prev if prev is not none else 0) }}
        {% elif prev is none %}
          {{ calc }}
        {% elif guard %}
          {{ prev }}
        {% elif calc < prev %}
          {{ prev }}
        {% elif (calc - prev) > max_jump %}
          {{ prev }}
        {% else %}
          {{ calc }}
        {% endif %}

# --------------------------------------------------
# Batterie-Ladung aus PV (ab 01.01.2025)
# Basis: Sungrow total_battery_charge_from_pv
# --------------------------------------------------
    - name: "Batterieladung aus PV Sungrow (ab 01.01.2025)"
      unique_id: batterieladung_aus_pv_sungrow_ab_2025
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total
      availability: >
        {{ states('sensor.total_battery_charge_from_pv')|is_number
           and states('input_number.offset_battery_charge_from_pv_ab_2025')|is_number }}
      state: >
        {% set raw  = states('sensor.total_battery_charge_from_pv')|float(0) %}
        {% set off  = states('input_number.offset_battery_charge_from_pv_ab_2025')|float(0) %}
        {% set calc = (raw + off)|round(3) %}

        {% set prev_raw = this.state %}
        {% set prev = prev_raw|float(0)
           if prev_raw not in ['unknown','unavailable','nan']
           else None %}
        {% set guard    = is_state('input_boolean.sperre_energiezahler_bootphase','on') %}
        {% set max_jump = 100.0 if guard else 5.0 %}

        {% if calc < 0 %}
          {{ (prev if prev is not none else 0) }}
        {% elif prev is none %}
          {{ calc }}
        {% elif guard %}
          {{ prev }}
        {% elif calc < prev %}
          {{ prev }}
        {% elif (calc - prev) > max_jump %}
          {{ prev }}
        {% else %}
          {{ calc }}
        {% endif %}

# --------------------------------------------------
# PV-Erzeugung gesamt (ab 01.01.2025)
# Basis: Sungrow total_pv_generation
# --------------------------------------------------
    - name: "PV Erzeugung gesamt Sungrow (ab 01.01.2025)"
      unique_id: pv_erzeugung_gesamt_sungrow_ab_2025
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total
      availability: >
        {{ states('sensor.total_pv_generation')|is_number
           and states('input_number.offset_pv_generation_ab_2025')|is_number }}
      state: >
        {% set raw  = states('sensor.total_pv_generation')|float(0) %}
        {% set off  = states('input_number.offset_pv_generation_ab_2025')|float(0) %}
        {% set calc = (raw + off)|round(3) %}

        {% set prev_raw = this.state %}
        {% set prev = prev_raw|float(0)
           if prev_raw not in ['unknown','unavailable','nan']
           else None %}
        {% set guard    = is_state('input_boolean.sperre_energiezahler_bootphase','on') %}
        {% set max_jump = 100.0 if guard else 5.0 %}

        {% if calc < 0 %}
          {{ (prev if prev is not none else 0) }}
        {% elif prev is none %}
          {{ calc }}
        {% elif guard %}
          {{ prev }}
        {% elif calc < prev %}
          {{ prev }}
        {% elif (calc - prev) > max_jump %}
          {{ prev }}
        {% else %}
          {{ calc }}
        {% endif %}

# --------------------------------------------------
# PV-Netzeinspeisung gesamt (ab 01.01.2025)
# Basis: Sungrow total_exported_energy
# --------------------------------------------------
    - name: "PV Netzeinspeisung gesamt Sungrow (ab 01.01.2025)"
      unique_id: pv_netzeinspeisung_gesamt_sungrow_ab_2025
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total
      availability: >
        {{ states('sensor.total_exported_energy')|is_number
           and states('input_number.offset_pv_export_sungrow_ab_2025')|is_number }}
      state: >
        {% set raw  = states('sensor.total_exported_energy')|float(0) %}
        {% set off  = states('input_number.offset_pv_export_sungrow_ab_2025')|float(0) %}
        {% set calc = (raw + off)|round(3) %}

        {% set prev_raw = this.state %}
        {% set prev = prev_raw|float(0)
           if prev_raw not in ['unknown','unavailable','nan']
           else None %}
        {% set guard    = is_state('input_boolean.sperre_energiezahler_bootphase','on') %}
        {% set max_jump = 100.0 if guard else 5.0 %}

        {% if calc < 0 %}
          {{ (prev if prev is not none else 0) }}
        {% elif prev is none %}
          {{ calc }}
        {% elif guard %}
          {{ prev }}
        {% elif calc < prev %}
          {{ prev }}
        {% elif (calc - prev) > max_jump %}
          {{ prev }}
        {% else %}
          {{ calc }}
        {% endif %}



# ==============================================================================================================================================
# ============================================== SCHICHT B - Bilanz-ZÄHLER bereits mit OFFSET ==================================================
# ==============================================================================================================================================


# ==============================================================================================================================================
# Schicht B – Bilanzierte Energieflüsse ab 01.01.2025
# Basis ausschließlich: Schicht A.2 (korrigierte Zähler)
# - Keine direkten Offsets mehr
# - Boot-Guard über input_boolean.sperre_energiezahler_bootphase
# - Monotonie-Schutz (nie rückwärts)
# - Maximaler Sprung je Update: 5 kWh
# ==============================================================================================================================================

# -------------------------------------------------------------------------------------------------
# 1) Gesamt-Eigenverbrauch aus PV + Batterie seit 01.01.2025
#    = Direktverbrauch PV (Sungrow A.2) + Batterie-Entladung (Sungrow A.2)
# -------------------------------------------------------------------------------------------------
- sensor:
    - name: "Eigenverbrauch Gesamt PV Batterie"
      unique_id: eigenverbrauch_gesamt_pv_batterie
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      availability: >
        {{ states('sensor.direktverbrauch_pv_sungrow_ab_2025')|is_number
           and states('sensor.batterie_entladung_sungrow_ab_2025')|is_number }}
      state: >
        {% if not (
          states('sensor.direktverbrauch_pv_sungrow_ab_2025')|is_number and
          states('sensor.batterie_entladung_sungrow_ab_2025')|is_number
        ) %}
          unknown
        {% else %}
          {% set dirc = states('sensor.direktverbrauch_pv_sungrow_ab_2025')|float(0) %}
          {% set batt = states('sensor.batterie_entladung_sungrow_ab_2025')|float(0) %}
          {{ (dirc + batt)|round(3) }}
        {% endif %}

# -------------------------------------------------------------------------------------------------
# 2) PV/Batterie-Anteil der Wärmepumpe seit 01.01.2025
#    = Verbrauch Wärmepumpe A.2 − Netzbezug Wärmepumpe A.2
#    Plausibilitäts-Deckel: 0 .. min(Eigenverbrauch gesamt, WP-Gesamtverbrauch)
# -------------------------------------------------------------------------------------------------
    - name: "Eigenverbrauch PV Batterie Wärmepumpe"
      unique_id: eigenverbrauch_pv_batterie_warmepumpe
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      availability: >
        {{ states('sensor.verbrauch_warmepumpe_ab_2025')|is_number
           and states('sensor.netzbezug_warmepumpe_ab_2025')|is_number
           and states('sensor.direktverbrauch_pv_sungrow_ab_2025')|is_number
           and states('sensor.batterie_entladung_sungrow_ab_2025')|is_number }}
      state: >
        {% if not (
          states('sensor.verbrauch_warmepumpe_ab_2025')|is_number and
          states('sensor.netzbezug_warmepumpe_ab_2025')|is_number and
          states('sensor.direktverbrauch_pv_sungrow_ab_2025')|is_number and
          states('sensor.batterie_entladung_sungrow_ab_2025')|is_number
        ) %}
          unknown
        {% else %}
          {% set wp_gesamt = states('sensor.verbrauch_warmepumpe_ab_2025')|float(0) %}
          {% set netz_wp   = states('sensor.netzbezug_warmepumpe_ab_2025')|float(0) %}
          {% set dirc      = states('sensor.direktverbrauch_pv_sungrow_ab_2025')|float(0) %}
          {% set batt      = states('sensor.batterie_entladung_sungrow_ab_2025')|float(0) %}

          {% set eigen_gesamt = (dirc + batt) %}
          {% set calc_raw     = (wp_gesamt - netz_wp) %}
          {% set calc_nonneg  = [calc_raw, 0]|max %}
          {% set upper_cap    = [eigen_gesamt, wp_gesamt]|min %}
          {% set calc_cap     = [calc_nonneg, upper_cap]|min %}
          {{ calc_cap|round(3) }}
        {% endif %}

# -------------------------------------------------------------------------------------------------
# 3) PV/Batterie-Anteil WHG2/Allg./WB
#    = Gesamt-Eigenverbrauch PV/Batt − WP-Eigenverbrauch PV/Batt
# -------------------------------------------------------------------------------------------------
    - name: "Eigenverbrauch PV Batterie WHG2/Allg./WB"
      unique_id: eigenverbrauch_pv_batterie_whg2_allg_wb
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      availability: >
        {{ states('sensor.verbrauch_warmepumpe_ab_2025')|is_number
           and states('sensor.netzbezug_warmepumpe_ab_2025')|is_number
           and states('sensor.direktverbrauch_pv_sungrow_ab_2025')|is_number
           and states('sensor.batterie_entladung_sungrow_ab_2025')|is_number }}
      state: >
        {% if not (
          states('sensor.verbrauch_warmepumpe_ab_2025')|is_number and
          states('sensor.netzbezug_warmepumpe_ab_2025')|is_number and
          states('sensor.direktverbrauch_pv_sungrow_ab_2025')|is_number and
          states('sensor.batterie_entladung_sungrow_ab_2025')|is_number
        ) %}
          unknown
        {% else %}
          {% set wp_gesamt = states('sensor.verbrauch_warmepumpe_ab_2025')|float(0) %}
          {% set netz_wp   = states('sensor.netzbezug_warmepumpe_ab_2025')|float(0) %}
          {% set dirc      = states('sensor.direktverbrauch_pv_sungrow_ab_2025')|float(0) %}
          {% set batt      = states('sensor.batterie_entladung_sungrow_ab_2025')|float(0) %}

          {% set eigen_gesamt = (dirc + batt) %}
          {% set eigen_wp     = [wp_gesamt - netz_wp, 0]|max %}
          {% set calc_raw     = (eigen_gesamt - eigen_wp) %}
          {% set calc_nonneg  = [calc_raw, 0]|max %}
          {{ calc_nonneg|round(3) }}
        {% endif %}

# -------------------------------------------------------------------------------------------------
# 4) Gesamtverbrauch WHG2/Allg./WB seit 01.01.2025
#    = Netzbezug WHG2 A.2 + Eigenverbrauch PV/Batt WHG2
# -------------------------------------------------------------------------------------------------
    - name: "Gesamtverbrauch WHG2/Allg./WB"
      unique_id: gesamtverbrauch_whg2_allg_wb
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      availability: >
        {{ states('sensor.netzbezug_gesamt_ab_2025')|is_number
           and states('sensor.direktverbrauch_pv_sungrow_ab_2025')|is_number
           and states('sensor.batterie_entladung_sungrow_ab_2025')|is_number
           and states('sensor.verbrauch_warmepumpe_ab_2025')|is_number }}
      state: >
        {% if not (
          states('sensor.netzbezug_gesamt_ab_2025')|is_number and
          states('sensor.direktverbrauch_pv_sungrow_ab_2025')|is_number and
          states('sensor.batterie_entladung_sungrow_ab_2025')|is_number and
          states('sensor.verbrauch_warmepumpe_ab_2025')|is_number
        ) %}
          unknown
        {% else %}
          {# Haus-Gesamtverbrauch (korrigiert, ab 2025) #}
          {% set netz = states('sensor.netzbezug_gesamt_ab_2025')|float(0) %}
          {% set dirc = states('sensor.direktverbrauch_pv_sungrow_ab_2025')|float(0) %}
          {% set batt = states('sensor.batterie_entladung_sungrow_ab_2025')|float(0) %}
          {% set haus = netz + dirc + batt %}

          {# Wärmepumpen-Gesamtverbrauch (Eltako, ab 2025) #}
          {% set wp_gesamt = states('sensor.verbrauch_warmepumpe_ab_2025')|float(0) %}

          {# WHG2/Allg./WB = Haus − WP, niemals negativ #}
          {% set calc_raw = haus - wp_gesamt %}
          {% set calc     = [calc_raw, 0]|max %}
          {{ calc|round(3) }}
        {% endif %}

# -------------------------------------------------------------------------------------------------
# 5) Gesamtverbrauch Wohnung 2 & Wallbox
#    = Gesamtverbrauch WHG2/Allg./WB − Allgemeinstrom-Zwischenzähler (A.2)
# -------------------------------------------------------------------------------------------------
    - name: "Gesamtverbrauch Wohnung 2 & Wallbox"
      unique_id: gesamtverbrauch_wohnung2_wallbox
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      availability: >
        {{ states('sensor.gesamtverbrauch_whg2_allg_wb')|is_number
           and states('sensor.verbrauch_allgemeinstrom_ab_2025')|is_number }}
      state: >
        {% if not (
          states('sensor.gesamtverbrauch_whg2_allg_wb')|is_number and
          states('sensor.verbrauch_allgemeinstrom_ab_2025')|is_number
        ) %}
          unknown
        {% else %}
          {% set whg2_allg_wb = states('sensor.gesamtverbrauch_whg2_allg_wb')|float(0) %}
          {% set allg         = states('sensor.verbrauch_allgemeinstrom_ab_2025')|float(0) %}

          {# Whg2+WB = Gesamtverbrauch WHG2/Allg./WB − Allgemeinstrom, niemals negativ #}
          {% set calc_raw = whg2_allg_wb - allg %}
          {% set calc     = [calc_raw, 0]|max %}
          {{ calc|round(3) }}
        {% endif %}

# -------------------------------------------------------------------------------------------------
# 6) Haus-Gesamtverbrauch seit 01.01.2025
#    = Netzbezug gesamt (A.2) + Direktverbrauch PV (A.2) + Batterie-Entladung (A.2)
# -------------------------------------------------------------------------------------------------
    - name: "Gesamtverbrauch Haus (kWh)"
      unique_id: gesamtverbrauch_haus_kwh
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      availability: >
        {{ states('sensor.netzbezug_gesamt_ab_2025')|is_number
           and states('sensor.direktverbrauch_pv_sungrow_ab_2025')|is_number
           and states('sensor.batterie_entladung_sungrow_ab_2025')|is_number }}
      state: >
        {% if not (
          states('sensor.netzbezug_gesamt_ab_2025')|is_number and
          states('sensor.direktverbrauch_pv_sungrow_ab_2025')|is_number and
          states('sensor.batterie_entladung_sungrow_ab_2025')|is_number
        ) %}
          unknown
        {% else %}
          {% set netz = states('sensor.netzbezug_gesamt_ab_2025')|float(0) %}
          {% set dirc = states('sensor.direktverbrauch_pv_sungrow_ab_2025')|float(0) %}
          {% set batt = states('sensor.batterie_entladung_sungrow_ab_2025')|float(0) %}
          {{ (netz + dirc + batt)|round(3) }}
        {% endif %}

# -------------------------------------------------------------------------------------------------
# 7) Netzladungen der Batterie seit 01.01.2025
#    = Batterieladung gesamt (A.2) − Batterieladung aus PV (A.2)
# -------------------------------------------------------------------------------------------------
    - name: "Netzladung Batterie"
      unique_id: netzladung_batterie
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      availability: >
        {{ states('sensor.batterieladung_gesamt_sungrow_ab_2025')|is_number
           and states('sensor.batterieladung_aus_pv_sungrow_ab_2025')|is_number }}
      state: >
        {% if not (
          states('sensor.batterieladung_gesamt_sungrow_ab_2025')|is_number and
          states('sensor.batterieladung_aus_pv_sungrow_ab_2025')|is_number
        ) %}
          unknown
        {% else %}
          {% set total   = states('sensor.batterieladung_gesamt_sungrow_ab_2025')|float(0) %}
          {% set from_pv = states('sensor.batterieladung_aus_pv_sungrow_ab_2025')|float(0) %}
          {% set calc_raw = (total - from_pv) %}
          {% set calc     = [calc_raw, 0]|max %}
          {{ calc|round(3) }}
        {% endif %}




# ==============================================================================================================================================
# ============================================== SCHICHT B.2 - Monotone Wrapper für Eigenverbrauchs-Sensoren ===================================
# ==============================================================================================================================================

# -------------------------------------------------------------------------------------------------
# 2a) Eigenverbrauch PV Batterie Wärmepumpe (monotoner Wrapper)
# -------------------------------------------------------------------------------------------------
- sensor:
    - name: "Eigenverbrauch PV Batterie Wärmepumpe (monoton)"
      unique_id: eigenverbrauch_pv_batterie_warmepumpe_monoton
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      availability: >
        {{ states('sensor.eigenverbrauch_pv_batterie_warmepumpe')|is_number }}
      state: >
        {% set raw  = states('sensor.eigenverbrauch_pv_batterie_warmepumpe') %}
        {% set prev = states('sensor.eigenverbrauch_pv_batterie_warmepumpe_monoton') %}
        {% if not raw|is_number %}
          {# Kein gültiger neuer Wert → alten Wert halten, falls vorhanden #}
          {% if prev|is_number %}
            {{ prev }}
          {% else %}
            unknown
          {% endif %}
        {% else %}
          {% set raw_f = raw|float(0) %}
          {% if not prev|is_number %}
            {# Erstinitialisierung #}
            {{ raw_f|round(3) }}
          {% else %}
            {% set prev_f = prev|float(0) %}
            {% if raw_f >= prev_f %}
              {# Nur nach oben oder gleich → übernehmen #}
              {{ raw_f|round(3) }}
            {% else %}
              {# Abwärtsbewegung → ignorieren, alten Wert behalten #}
              {{ prev_f|round(3) }}
            {% endif %}
          {% endif %}
        {% endif %}

# -------------------------------------------------------------------------------------------------
# 3a) Eigenverbrauch PV Batterie WHG2/Allg./WB (monotoner Wrapper)
# -------------------------------------------------------------------------------------------------
    - name: "Eigenverbrauch PV Batterie WHG2/Allg./WB (monoton)"
      unique_id: eigenverbrauch_pv_batterie_whg2_allg_wb_monoton
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      availability: >
        {{ states('sensor.eigenverbrauch_pv_batterie_whg2_allg_wb')|is_number }}
      state: >
        {% set raw  = states('sensor.eigenverbrauch_pv_batterie_whg2_allg_wb') %}
        {% set prev = states('sensor.eigenverbrauch_pv_batterie_whg2_allg_wb_monoton') %}
        {% if not raw|is_number %}
          {% if prev|is_number %}
            {{ prev }}
          {% else %}
            unknown
          {% endif %}
        {% else %}
          {% set raw_f = raw|float(0) %}
          {% if not prev|is_number %}
            {{ raw_f|round(3) }}
          {% else %}
            {% set prev_f = prev|float(0) %}
            {% if raw_f >= prev_f %}
              {{ raw_f|round(3) }}
            {% else %}
              {{ prev_f|round(3) }}
            {% endif %}
          {% endif %}
        {% endif %}




# ==============================================================================================================================================
# ============================================== SCHICHT C - Quoten und Kennzahlen bereits mit OFFSET =========================================
# ==============================================================================================================================================

# ======================================================================
# Schicht C – Quoten und weitere Statistiken auf Basis der korrigierten
# Energiezähler (Schicht A.2 und Schicht B)
# ======================================================================

# --------------------------------------------------
# Gesamt-Autarkiequote des Hauses
# = Eigenverbrauch (PV + Batterie) / Gesamtverbrauch Haus
# Basis:
#   - sensor.eigenverbrauch_gesamt_pv_batterie      (Schicht B)
#   - sensor.gesamtverbrauch_haus_kwh               (Schicht B)
# --------------------------------------------------
- sensor:
    - name: "Gesamt Autarkiequote"
      unique_id: gesamt_autarkiequote
      unit_of_measurement: "%"
      state_class: measurement
      availability: >
        {{ states('sensor.eigenverbrauch_gesamt_pv_batterie')|is_number
           and states('sensor.gesamtverbrauch_haus_kwh')|is_number }}
      state: >
        {% set eigen  = states('sensor.eigenverbrauch_gesamt_pv_batterie')|float(0) %}
        {% set gesamt = states('sensor.gesamtverbrauch_haus_kwh')|float(0) %}
        {% if gesamt > 0 %}
          {{ (eigen / gesamt * 100)|round(2) }}
        {% else %}
          0
        {% endif %}

# --------------------------------------------------
# Eigenverbrauchsquote der Wärmepumpe
# = PV/Batterie-Anteil WP / Gesamtverbrauch WP
# Basis:
#   - sensor.eigenverbrauch_pv_batterie_warmepumpe  (Schicht B)
#   - sensor.verbrauch_warmepumpe_ab_2025           (Schicht A.2)
# --------------------------------------------------
    - name: "Gesamt Eigenverbrauchsquote WP"
      unique_id: gesamt_eigenverbrauchsquote_wp
      unit_of_measurement: "%"
      state_class: measurement
      availability: >
        {{ states('sensor.eigenverbrauch_pv_batterie_warmepumpe')|is_number
           and states('sensor.verbrauch_warmepumpe_ab_2025')|is_number }}
      state: >
        {% set eigen_wp   = states('sensor.eigenverbrauch_pv_batterie_warmepumpe')|float(0) %}
        {% set gesamt_wp  = states('sensor.verbrauch_warmepumpe_ab_2025')|float(0) %}
        {% if gesamt_wp > 0 %}
          {{ (eigen_wp / gesamt_wp * 100)|round(2) }}
        {% else %}
          0
        {% endif %}

# --------------------------------------------------
# Eigenverbrauchsquote WHG2/Allg./WB
# = PV/Batterie-Anteil WHG2 / Gesamtverbrauch WHG2/Allg./WB
# Basis:
#   - sensor.eigenverbrauch_pv_batterie_whg2_allg_wb  (Schicht B)
#   - sensor.gesamtverbrauch_whg2_allg_wb             (Schicht B)
# --------------------------------------------------
    - name: "Gesamt Eigenverbrauchsquote WHG2/Allg./WB"
      unique_id: gesamt_eigenverbrauchsquote_whg2_allg_wb
      unit_of_measurement: "%"
      state_class: measurement
      availability: >
        {{ states('sensor.eigenverbrauch_pv_batterie_whg2_allg_wb')|is_number
           and states('sensor.gesamtverbrauch_whg2_allg_wb')|is_number }}
      state: >
        {% set eigen_whg2 = states('sensor.eigenverbrauch_pv_batterie_whg2_allg_wb')|float(0) %}
        {% set gesamt_whg2 = states('sensor.gesamtverbrauch_whg2_allg_wb')|float(0) %}
        {% if gesamt_whg2 > 0 %}
          {{ (eigen_whg2 / gesamt_whg2 * 100)|round(2) }}
        {% else %}
          0
        {% endif %}

# --------------------------------------------------
# Netzbezugsquote Haus
# = Netzbezug Gesamt / Gesamtverbrauch Haus
# Basis:
#   - sensor.netzbezug_gesamt_ab_2025      (Schicht A.2)
#   - sensor.gesamtverbrauch_haus_kwh      (Schicht B)
# --------------------------------------------------
    - name: "Gesamt Netzbezugsquote"
      unique_id: gesamt_netzbezugsquote
      unit_of_measurement: "%"
      state_class: measurement
      availability: >
        {{ states('sensor.netzbezug_gesamt_ab_2025')|is_number
           and states('sensor.gesamtverbrauch_haus_kwh')|is_number }}
      state: >
        {% set netz   = states('sensor.netzbezug_gesamt_ab_2025')|float(0) %}
        {% set gesamt = states('sensor.gesamtverbrauch_haus_kwh')|float(0) %}
        {% if gesamt > 0 %}
          {{ (netz / gesamt * 100)|round(2) }}
        {% else %}
          0
        {% endif %}

# --------------------------------------------------
# PV-Eigenverbrauchsquote (bezogen auf Erzeugung)
# = (Direktverbrauch PV + Batterieladung aus PV) / PV-Erzeugung gesamt
# Basis (Schicht A.2):
#   - sensor.pv_erzeugung_gesamt_sungrow_ab_2025
#   - sensor.direktverbrauch_pv_sungrow_ab_2025
#   - sensor.batterieladung_aus_pv_sungrow_ab_2025
# --------------------------------------------------
    - name: "PV Eigenverbrauchsquote (Erzeugung)"
      unique_id: pv_eigenverbrauchsquote_erzeugung
      unit_of_measurement: "%"
      state_class: measurement
      availability: >
        {{ states('sensor.pv_erzeugung_gesamt_sungrow_ab_2025')|is_number
           and states('sensor.direktverbrauch_pv_sungrow_ab_2025')|is_number
           and states('sensor.batterieladung_aus_pv_sungrow_ab_2025')|is_number }}
      state: >
        {% set pv_total = states('sensor.pv_erzeugung_gesamt_sungrow_ab_2025')|float(0) %}
        {% set direct   = states('sensor.direktverbrauch_pv_sungrow_ab_2025')|float(0) %}
        {% set batt_ch  = states('sensor.batterieladung_aus_pv_sungrow_ab_2025')|float(0) %}
        {% set eigen    = direct + batt_ch %}
        {% if pv_total > 0 %}
          {{ (eigen / pv_total * 100)|round(2) }}
        {% else %}
          0
        {% endif %}

# --------------------------------------------------
# PV-Eigenverbrauchsquote (bezogen auf Verbrauchsseite)
# = Eigenverbrauch PV/Batterie / PV-Erzeugung gesamt
# Basis:
#   - sensor.eigenverbrauch_gesamt_pv_batterie          (Schicht B)
#   - sensor.pv_erzeugung_gesamt_sungrow_ab_2025        (Schicht A.2)
# --------------------------------------------------
    - name: "PV Eigenverbrauchsquote (Verbrauch)"
      unique_id: pv_eigenverbrauchsquote_verbrauch
      unit_of_measurement: "%"
      state_class: measurement
      availability: >
        {{ states('sensor.eigenverbrauch_gesamt_pv_batterie')|is_number
           and states('sensor.pv_erzeugung_gesamt_sungrow_ab_2025')|is_number }}
      state: >
        {% set eigen   = states('sensor.eigenverbrauch_gesamt_pv_batterie')|float(0) %}
        {% set erzeug  = states('sensor.pv_erzeugung_gesamt_sungrow_ab_2025')|float(0) %}
        {% if erzeug > 0 %}
          {{ (eigen / erzeug * 100)|round(2) }}
        {% else %}
          0
        {% endif %}

# --------------------------------------------------
# PV-Einspeisequote (bezogen auf Erzeugung)
# = Netzeinspeisung / PV-Erzeugung gesamt
# Basis (Schicht A.2):
#   - sensor.pv_erzeugung_gesamt_sungrow_ab_2025
#   - sensor.pv_netzeinspeisung_gesamt_sungrow_ab_2025
# --------------------------------------------------
    - name: "PV Einspeisequote (Erzeugung)"
      unique_id: pv_einspeisequote_erzeugung
      unit_of_measurement: "%"
      state_class: measurement
      availability: >
        {{ states('sensor.pv_erzeugung_gesamt_sungrow_ab_2025')|is_number
           and states('sensor.pv_netzeinspeisung_gesamt_sungrow_ab_2025')|is_number }}
      state: >
        {% set pv_total = states('sensor.pv_erzeugung_gesamt_sungrow_ab_2025')|float(0) %}
        {% set export   = states('sensor.pv_netzeinspeisung_gesamt_sungrow_ab_2025')|float(0) %}
        {% if pv_total > 0 %}
          {{ (export / pv_total * 100)|round(2) }}
        {% else %}
          0
        {% endif %}

# --------------------------------------------------
# PV-Überschussquote (Verbrauchssicht)
# = 100 % − PV-Eigenverbrauchsquote (Verbrauch)
# Basis:
#   - sensor.eigenverbrauch_gesamt_pv_batterie          (Schicht B)
#   - sensor.pv_erzeugung_gesamt_sungrow_ab_2025        (Schicht A.2)
# --------------------------------------------------
    - name: "PV Überschussquote (Verbrauch)"
      unique_id: pv_ueberschussquote_verbrauch
      unit_of_measurement: "%"
      state_class: measurement
      availability: >
        {{ states('sensor.eigenverbrauch_gesamt_pv_batterie')|is_number
           and states('sensor.pv_erzeugung_gesamt_sungrow_ab_2025')|is_number }}
      state: >
        {% set eigen   = states('sensor.eigenverbrauch_gesamt_pv_batterie')|float(0) %}
        {% set erzeug  = states('sensor.pv_erzeugung_gesamt_sungrow_ab_2025')|float(0) %}
        {% if erzeug > 0 %}
          {{ ((1 - (eigen / erzeug)) * 100)|round(2) }}
        {% else %}
          0
        {% endif %}




# ==============================================================================================================================================
# ===================================== SCHICHT D - Kosten & PV-Ertrags-Sensoren bereits mit OFFSET ============================================
# ==============================================================================================================================================

# ======================================================================
# Schicht D – Kosten- & PV-Ertrags-Sensoren (ab 01.01.2025)
# Basis: korrigierte kWh-Zähler aus Schicht A.2 und B + Utility Meter
# ======================================================================

- sensor:

# 1) Netzstromkosten Wärmepumpe (seit 01.01.2025)
#    kWh (Netz WP, korrigiert) * WP-Tarif
#    Basis:
#      - sensor.netzbezug_warmepumpe_ab_2025
#      - input_number.strompreis_bezug_wp
- sensor:
  - name: "Stromkosten WP Netz (Euro)"
    unique_id: stromkosten_wp_netz_euro
    unit_of_measurement: "€"
    device_class: monetary
    state_class: total
    availability: >
      {{ states('sensor.netzbezug_warmepumpe_ab_2025')|is_number
         and states('input_number.strompreis_bezug_wp')|is_number }}
    state: >
      {% set kwh    = states('sensor.netzbezug_warmepumpe_ab_2025')|float(0) %}
      {% set preis  = states('input_number.strompreis_bezug_wp')|float(0) %}
      {% set calc   = (kwh * preis)|round(2) %}
      {% set prevraw = this.state %}
      {% set prev    = prevraw|float(0) if prevraw not in ['unknown','unavailable','nan'] else 0 %}
      {# keine negativen Kosten zulassen, Glitches ignorieren #}
      {% if calc < 0 %}
        {{ prev }}
      {% else %}
        {{ [calc, prev]|max }}
      {% endif %}

  - name: "Stromkosten WP Netz (monatlich)"
    unique_id: stromkosten_wp_netz_monatlich
    unit_of_measurement: "€"
    device_class: monetary
    state_class: total
    availability: >
      {{ states('sensor.netzbezug_warmepumpe_monatlich')|is_number
         and states('input_number.strompreis_bezug_wp')|is_number }}
    state: >
      {% set kwh   = states('sensor.netzbezug_warmepumpe_monatlich')|float(0) %}
      {% set preis = states('input_number.strompreis_bezug_wp')|float(0) %}
      {{ (kwh * preis)|round(2) }}

  - name: "Stromkosten WP Netz (jährlich)"
    unique_id: stromkosten_wp_netz_jahrlich
    unit_of_measurement: "€"
    device_class: monetary
    state_class: total
    availability: >
      {{ states('sensor.netzbezug_warmepumpe_jahrlich')|is_number
         and states('input_number.strompreis_bezug_wp')|is_number }}
    state: >
      {% set kwh   = states('sensor.netzbezug_warmepumpe_jahrlich')|float(0) %}
      {% set preis = states('input_number.strompreis_bezug_wp')|float(0) %}
      {{ (kwh * preis)|round(2) }}

# 2) Netzstromkosten Haushalt (WHG2/Allg./WB, seit 01.01.2025)
#    kWh (Netz WHG2, korrigiert) * Haushalts-Tarif
#    Basis:
#      - sensor.netzbezug_whg2_allg_wb_ab_2025
#      - input_number.strompreis_bezug_normal
  - name: "Stromkosten Haushalt Netz (Euro)"
    unique_id: stromkosten_haushalt_netz_euro
    unit_of_measurement: "€"
    device_class: monetary
    state_class: total
    availability: >
      {{ states('sensor.netzbezug_whg2_allg_wb_ab_2025')|is_number
         and states('input_number.strompreis_bezug_normal')|is_number }}
    state: >
      {% set kwh    = states('sensor.netzbezug_whg2_allg_wb_ab_2025')|float(0) %}
      {% set preis  = states('input_number.strompreis_bezug_normal')|float(0) %}
      {% set calc   = (kwh * preis)|round(2) %}
      {% set prevraw = this.state %}
      {% set prev    = prevraw|float(0) if prevraw not in ['unknown','unavailable','nan'] else 0 %}
      {% if calc < 0 %}
        {{ prev }}
      {% else %}
        {{ [calc, prev]|max }}
      {% endif %}

  - name: "Stromkosten Haushalt Netz (monatlich)"
    unique_id: stromkosten_haushalt_netz_monatlich
    unit_of_measurement: "€"
    device_class: monetary
    state_class: total
    availability: >
      {{ states('sensor.netzbezug_whg2_allg_wb_monatlich')|is_number
         and states('input_number.strompreis_bezug_normal')|is_number }}
    state: >
      {% set kwh   = states('sensor.netzbezug_whg2_allg_wb_monatlich')|float(0) %}
      {% set preis = states('input_number.strompreis_bezug_normal')|float(0) %}
      {{ (kwh * preis)|round(2) }}

  - name: "Stromkosten Haushalt Netz (jährlich)"
    unique_id: stromkosten_haushalt_netz_jahrlich
    unit_of_measurement: "€"
    device_class: monetary
    state_class: total
    availability: >
      {{ states('sensor.netzbezug_whg2_allg_wb_jahrlich')|is_number
         and states('input_number.strompreis_bezug_normal')|is_number }}
    state: >
      {% set kwh   = states('sensor.netzbezug_whg2_allg_wb_jahrlich')|float(0) %}
      {% set preis = states('input_number.strompreis_bezug_normal')|float(0) %}
      {{ (kwh * preis)|round(2) }}

# 3) Netzstromkosten gesamt (WP + Haushalt)
#    Summe aus 1) und 2)
  - name: "Stromkosten Netz gesamt (Euro)"
    unique_id: stromkosten_netz_gesamt_euro
    unit_of_measurement: "€"
    device_class: monetary
    state_class: total
    availability: >
      {{ states('sensor.stromkosten_wp_netz_euro')|is_number
         and states('sensor.stromkosten_haushalt_netz_euro')|is_number }}
    state: >
      {% set wp_cost = states('sensor.stromkosten_wp_netz_euro')|float(0) %}
      {% set hh_cost = states('sensor.stromkosten_haushalt_netz_euro')|float(0) %}
      {% set calc    = (wp_cost + hh_cost)|round(2) %}
      {% set prevraw = this.state %}
      {% set prev    = prevraw|float(0) if prevraw not in ['unknown','unavailable','nan'] else 0 %}
      {% if calc < 0 %}
        {{ prev }}
      {% else %}
        {{ [calc, prev]|max }}
      {% endif %}

  - name: "Stromkosten Netz gesamt (monatlich)"
    unique_id: stromkosten_netz_gesamt_monatlich
    unit_of_measurement: "€"
    device_class: monetary
    state_class: total
    availability: >
      {{ states('sensor.stromkosten_wp_netz_monatlich')|is_number
         and states('sensor.stromkosten_haushalt_netz_monatlich')|is_number }}
    state: >
      {% set wp = states('sensor.stromkosten_wp_netz_monatlich')|float(0) %}
      {% set hh = states('sensor.stromkosten_haushalt_netz_monatlich')|float(0) %}
      {{ (wp + hh)|round(2) }}

  - name: "Stromkosten Netz gesamt (jährlich)"
    unique_id: stromkosten_netz_gesamt_jahrlich
    unit_of_measurement: "€"
    device_class: monetary
    state_class: total
    availability: >
      {{ states('sensor.stromkosten_wp_netz_jahrlich')|is_number
         and states('sensor.stromkosten_haushalt_netz_jahrlich')|is_number }}
    state: >
      {% set wp = states('sensor.stromkosten_wp_netz_jahrlich')|float(0) %}
      {% set hh = states('sensor.stromkosten_haushalt_netz_jahrlich')|float(0) %}
      {{ (wp + hh)|round(2) }}

# 4) Einspeiseerlöse PV (seit 01.01.2025)
#    kWh Export (verkaufte Energie, Bitshake Z1 korrigiert) * Einspeisevergütung
#    Basis:
#      - sensor.netzeinspeisung_ab_2025
#      - input_number.einspeisevergutung
  - name: "PV Einspeiseerlöse (Euro)"
    unique_id: pv_einspeiseerloese_euro
    unit_of_measurement: "€"
    device_class: monetary
    state_class: total
    availability: >
      {{ states('sensor.netzeinspeisung_ab_2025')|is_number
         and states('input_number.einspeisevergutung')|is_number }}
    state: >
      {% set kwh   = states('sensor.netzeinspeisung_ab_2025')|float(0) %}
      {% set verg  = states('input_number.einspeisevergutung')|float(0) %}
      {% set calc  = (kwh * verg)|round(2) %}
      {% set prevraw = this.state %}
      {% set prev    = prevraw|float(0) if prevraw not in ['unknown','unavailable','nan'] else 0 %}
      {% if calc < 0 %}
        {{ prev }}
      {% else %}
        {{ [calc, prev]|max }}
      {% endif %}

  - name: "PV Einspeiseerlöse (monatlich)"
    unique_id: pv_einspeiseerloese_monatlich
    unit_of_measurement: "€"
    device_class: monetary
    state_class: total
    availability: >
      {{ states('sensor.netzeinspeisung_monatlich')|is_number
         and states('input_number.einspeisevergutung')|is_number }}
    state: >
      {% set kwh  = states('sensor.netzeinspeisung_monatlich')|float(0) %}
      {% set verg = states('input_number.einspeisevergutung')|float(0) %}
      {{ (kwh * verg)|round(2) }}

  - name: "PV Einspeiseerlöse (jährlich)"
    unique_id: pv_einspeiseerloese_jahrlich
    unit_of_measurement: "€"
    device_class: monetary
    state_class: total
    availability: >
      {{ states('sensor.netzeinspeisung_jahrlich')|is_number
         and states('input_number.einspeisevergutung')|is_number }}
    state: >
      {% set kwh  = states('sensor.netzeinspeisung_jahrlich')|float(0) %}
      {% set verg = states('input_number.einspeisevergutung')|float(0) %}
      {{ (kwh * verg)|round(2) }}

# 5) Hypothetische Stromkosten OHNE PV
#    Annahme: gleicher Verbrauch, alles aus dem Netz:
#      - WP: gesamter WP-Verbrauch (Eltako korrigiert)
#      - Haushalt: Gesamtverbrauch WHG2/Allg./WB (Schicht B)
  - name: "Stromkosten ohne PV (Euro)"
    unique_id: stromkosten_ohne_pv_euro
    unit_of_measurement: "€"
    device_class: monetary
    state_class: total
    availability: >
      {{ states('sensor.verbrauch_warmepumpe_ab_2025')|is_number
         and states('sensor.gesamtverbrauch_whg2_allg_wb')|is_number
         and states('input_number.strompreis_bezug_wp')|is_number
         and states('input_number.strompreis_bezug_normal')|is_number }}
    state: >
      {% set wp_total = states('sensor.verbrauch_warmepumpe_ab_2025')|float(0) %}
      {% set hh_total = states('sensor.gesamtverbrauch_whg2_allg_wb')|float(0) %}
      {% set preis_wp = states('input_number.strompreis_bezug_wp')|float(0) %}
      {% set preis_hh = states('input_number.strompreis_bezug_normal')|float(0) %}
      {% set kosten   = wp_total * preis_wp + hh_total * preis_hh %}
      {{ kosten|round(2) }}

# 6) Effektive Stromkosten MIT PV (Netto)
#    Netzkosten gesamt – Einspeiseerlöse
#    Basis:
#      - Netz WP/Haushalt: korrigierte Netzbezüge ab 2025
#      - Einspeisung: netzeinspeisung_ab_2025
  - name: "Stromkosten mit PV (Netto, Euro)"
    unique_id: stromkosten_mit_pv_netto_euro
    unit_of_measurement: "€"
    device_class: monetary
    state_class: total
    availability: >
      {{ states('sensor.netzbezug_warmepumpe_ab_2025')|is_number
         and states('sensor.netzbezug_whg2_allg_wb_ab_2025')|is_number
         and states('sensor.netzeinspeisung_ab_2025')|is_number
         and states('input_number.strompreis_bezug_wp')|is_number
         and states('input_number.strompreis_bezug_normal')|is_number
         and states('input_number.einspeisevergutung')|is_number }}
    state: >
      {% set wp_net   = states('sensor.netzbezug_warmepumpe_ab_2025')|float(0) %}
      {% set hh_net   = states('sensor.netzbezug_whg2_allg_wb_ab_2025')|float(0) %}
      {% set preis_wp = states('input_number.strompreis_bezug_wp')|float(0) %}
      {% set preis_hh = states('input_number.strompreis_bezug_normal')|float(0) %}
      {% set export_k = states('sensor.netzeinspeisung_ab_2025')|float(0) %}
      {% set verg     = states('input_number.einspeisevergutung')|float(0) %}
      {% set kosten_netz = wp_net * preis_wp + hh_net * preis_hh %}
      {% set erloes      = export_k * verg %}
      {{ (kosten_netz - erloes)|round(2) }}

# 7) Wert des PV-Eigenverbrauchs Wärmepumpe
#    (kWh PV/Batt für WP * WP-Tarif)
  - name: "PV-Eigenverbrauch Wert WP (Euro)"
    unique_id: pv_eigenverbrauch_wert_wp_euro
    unit_of_measurement: "€"
    device_class: monetary
    state_class: total
    availability: >
      {{ states('sensor.eigenverbrauch_pv_batterie_warmepumpe')|is_number
         and states('input_number.strompreis_bezug_wp')|is_number }}
    state: >
      {% set eig_wp   = states('sensor.eigenverbrauch_pv_batterie_warmepumpe')|float(0) %}
      {% set preis_wp = states('input_number.strompreis_bezug_wp')|float(0) %}
      {{ (eig_wp * preis_wp)|round(2) }}

# 8) Wert des PV-Eigenverbrauchs Haushalt (WHG2/Allg./WB)
#    (kWh PV/Batt für Haushalt * Haushalts-Tarif)
  - name: "PV-Eigenverbrauch Wert Haushalt (Euro)"
    unique_id: pv_eigenverbrauch_wert_haushalt_euro
    unit_of_measurement: "€"
    device_class: monetary
    state_class: total
    availability: >
      {{ states('sensor.eigenverbrauch_pv_batterie_whg2_allg_wb')|is_number
         and states('input_number.strompreis_bezug_normal')|is_number }}
    state: >
      {% set eig_hh   = states('sensor.eigenverbrauch_pv_batterie_whg2_allg_wb')|float(0) %}
      {% set preis_hh = states('input_number.strompreis_bezug_normal')|float(0) %}
      {{ (eig_hh * preis_hh)|round(2) }}



# 9) Gesamtwert des PV-Eigenverbrauchs (WP + Haushalt)
  - name: "PV-Eigenverbrauch Wert gesamt (Euro)"
    unique_id: pv_eigenverbrauch_wert_gesamt_euro
    unit_of_measurement: "€"
    device_class: monetary
    state_class: total
    availability: >
      {{ states('sensor.pv_eigenverbrauch_wert_wp_euro')|is_number
         and states('sensor.pv_eigenverbrauch_wert_haushalt_euro')|is_number }}
    state: >
      {% set wp_val = states('sensor.pv_eigenverbrauch_wert_wp_euro')|float(0) %}
      {% set hh_val = states('sensor.pv_eigenverbrauch_wert_haushalt_euro')|float(0) %}
      {{ (wp_val + hh_val)|round(2) }}

# 10) PV-Gesamtvorteil = Eigenverbrauchs-Wert + Einspeiseerlöse
  - name: "PV Vorteil gesamt (Euro)"
    unique_id: pv_vorteil_gesamt_euro
    unit_of_measurement: "€"
    device_class: monetary
    state_class: total
    availability: >
      {{ states('sensor.pv_eigenverbrauch_wert_gesamt_euro')|is_number
         and states('sensor.pv_einspeiseerlose_euro')|is_number }}
    state: >
      {% set eig  = states('sensor.pv_eigenverbrauch_wert_gesamt_euro')|float(0) %}
      {% set erl  = states('sensor.pv_einspeiseerlose_euro')|float(0) %}
      {% set calc = (eig + erl)|round(2) %}
      {% set prevraw = this.state %}
      {% set prev    = prevraw|float(0) if prevraw not in ['unknown','unavailable','nan'] else 0 %}
      {% if calc < 0 %}
        {{ prev }}
      {% else %}
        {{ [calc, prev]|max }}
      {% endif %}

  - name: "PV Vorteil gesamt (monatlich)"
    unique_id: pv_vorteil_gesamt_monatlich
    unit_of_measurement: "€"
    device_class: monetary
    state_class: total
    state: >
      {% set eig_wp   = states('sensor.verbrauch_warmepumpe_pv_batterie_monatlich')|float(0) %}
      {% set eig_whg2 = states('sensor.eigenverbrauch_pv_batterie_whg2_allg_wb_monatlich')|float(0) %}
      {% set preis_wp = states('input_number.strompreis_bezug_wp')|float(0) %}
      {% set preis_hh = states('input_number.strompreis_bezug_normal')|float(0) %}
      {% set eins     = states('sensor.pv_einspeiseerlose_monatlich')|float(0) %}
      {% set wert_eigen = eig_wp * preis_wp + eig_whg2 * preis_hh %}
      {{ (wert_eigen + eins)|round(2) }}

  - name: "PV Vorteil gesamt (jährlich)"
    unique_id: pv_vorteil_gesamt_jahrlich
    unit_of_measurement: "€"
    device_class: monetary
    state_class: total
    state: >
      {% set eig_wp   = states('sensor.verbrauch_warmepumpe_pv_batterie_jahrlich')|float(0) %}
      {% set eig_whg2 = states('sensor.eigenverbrauch_pv_batterie_whg2_allg_wb_jahrlich')|float(0) %}
      {% set preis_wp = states('input_number.strompreis_bezug_wp')|float(0) %}
      {% set preis_hh = states('input_number.strompreis_bezug_normal')|float(0) %}
      {% set eins     = states('sensor.pv_einspeiseerlose_jahrlich')|float(0) %}
      {% set wert_eigen = eig_wp * preis_wp + eig_whg2 * preis_hh %}
      {{ (wert_eigen + eins)|round(2) }}

# 11) PV-Ersparnis: Kosten ohne PV − Kosten mit PV
#       Plausibilitätscheck zu "PV Vorteil gesamt"
  - name: "PV Ersparnis (Euro)"
    unique_id: pv_ersparnis_euro
    unit_of_measurement: "€"
    device_class: monetary
    state_class: total
    availability: >
      {{ states('sensor.stromkosten_ohne_pv_euro')|is_number
         and states('sensor.stromkosten_mit_pv_netto_euro')|is_number }}
    state: >
      {% set k_ohne = states('sensor.stromkosten_ohne_pv_euro')|float(0) %}
      {% set k_mit  = states('sensor.stromkosten_mit_pv_netto_euro')|float(0) %}
      {% set calc   = (k_ohne - k_mit)|round(2) %}
      {% set prevraw = this.state %}
      {% set prev    = prevraw|float(0) if prevraw not in ['unknown','unavailable','nan'] else 0 %}
      {% if calc < 0 %}
        {{ prev }}
      {% else %}
        {{ [calc, prev]|max }}
      {% endif %}

  - name: "PV Ersparnis (monatlich)"
    unique_id: pv_ersparnis_monatlich
    unit_of_measurement: "€"
    device_class: monetary
    state_class: total
    state: >
      {% set wp_kwh   = states('sensor.verbrauch_warmepumpe_monatlich') %}
      {% set whg2_kwh = states('sensor.gesamtverbrauch_whg2_allg_wb_monatlich') %}
      {% if not (wp_kwh|is_number and whg2_kwh|is_number) %}
        unknown
      {% else %}
        {% set wp_kwh   = wp_kwh|float(0) %}
        {% set whg2_kwh = whg2_kwh|float(0) %}
        {% set preis_wp = states('input_number.strompreis_bezug_wp')|float(0) %}
        {% set preis_hh = states('input_number.strompreis_bezug_normal')|float(0) %}

        {# Kosten ohne PV: alles aus dem Netz #}
        {% set kosten_ohne = wp_kwh * preis_wp + whg2_kwh * preis_hh %}

        {# Kosten mit PV: echte Netzkosten minus Einspeiseerloese #}
        {% set netz = states('sensor.stromkosten_netz_gesamt_monatlich')|float(0) %}
        {% set eins = states('sensor.pv_einspeiseerloese_monatlich')|float(0) %}
        {% set kosten_mit = netz - eins %}

        {{ (kosten_ohne - kosten_mit)|round(2) }}
      {% endif %}

  - name: "PV Ersparnis (jährlich)"
    unique_id: pv_ersparnis_jahrlich
    unit_of_measurement: "€"
    device_class: monetary
    state_class: total
    state: >
      {% set wp_kwh   = states('sensor.verbrauch_warmepumpe_jahrlich') %}
      {% set whg2_kwh = states('sensor.gesamtverbrauch_whg2_allg_wb_jahrlich') %}
      {% if not (wp_kwh|is_number and whg2_kwh|is_number) %}
        unknown
      {% else %}
        {% set wp_kwh   = wp_kwh|float(0) %}
        {% set whg2_kwh = whg2_kwh|float(0) %}
        {% set preis_wp = states('input_number.strompreis_bezug_wp')|float(0) %}
        {% set preis_hh = states('input_number.strompreis_bezug_normal')|float(0) %}

        {% set kosten_ohne = wp_kwh * preis_wp + whg2_kwh * preis_hh %}

        {% set netz = states('sensor.stromkosten_netz_gesamt_jahrlich')|float(0) %}
        {% set eins = states('sensor.pv_einspeiseerloese_jahrlich')|float(0) %}
        {% set kosten_mit = netz - eins %}

        {{ (kosten_ohne - kosten_mit)|round(2) }}
      {% endif %}




# ==============================================================================================================================================
# ============================================== SCHICHT E - Prüfungen der Energie-Zähler ======================================================
# ==============================================================================================================================================

# ======================================================================
# SCHICHT E – KONTROLLEN DER ENERGIEZÄHLER (ohne Offsets, auf Schicht A–D)
# ======================================================================

# Vergleich: Direktverbrauch + Batterie-Entladung vs. Eigenverbrauchs-Zähler.
# Sollte nahe 0 kWh sein – sonst eigenverbrauch_gesamt_pv_batterie prüfen.
- sensor:
    - name: "Plausibilitätskontrolle"
      unique_id: plausibilitaetskontrolle
      unit_of_measurement: "kWh"
      # device_class: energy
      state_class: measurement
      state: >
        {% set dirc  = states('sensor.direktverbrauch_pv_sungrow_ab_2025') | float(0) %}
        {% set batt  = states('sensor.batterie_entladung_sungrow_ab_2025') | float(0) %}
        {% set eigen = states('sensor.eigenverbrauch_gesamt_pv_batterie') | float(0) %}
        {{ (dirc + batt - eigen) | round(3) }}

# Check: Gesamtverbrauch Haus vs. (Netzbezug_ab_2025 + Direkt_ab_2025 + BattEntl_ab_2025)
# Sollte ≈ 0 kWh sein – sonst Bilanz-/Offset-Fehler in den Basis-Sensoren.
# Hausbilanz-Abweichung: Haus − (Netz + Direkt + BattEntl) ≈ 0
    - name: "Energiebilanz Abweichung (kWh)"
      unique_id: energiebilanz_abweichung
      unit_of_measurement: "kWh"
      # device_class: energy
      state_class: measurement
      availability: >
        {{ states('sensor.gesamtverbrauch_haus_kwh')|is_number and
           states('sensor.netzbezug_gesamt_ab_2025')|is_number and
           states('sensor.direktverbrauch_pv_sungrow_ab_2025')|is_number and
           states('sensor.batterie_entladung_sungrow_ab_2025')|is_number }}
      state: >
        {% set haus   = states('sensor.gesamtverbrauch_haus_kwh')|float(0) %}
        {% set bezugk = states('sensor.netzbezug_gesamt_ab_2025')|float(0) %}
        {% set dirck  = states('sensor.direktverbrauch_pv_sungrow_ab_2025')|float(0) %}
        {% set battdk = states('sensor.batterie_entladung_sungrow_ab_2025')|float(0) %}
        {{ (haus - (bezugk + dirck + battdk)) | round(3) }}

# Negativ-Wächter: „on“, falls einer der Kernzähler < 0 (Reset/Glitch)
    - name: "Energie Datenfehler (bool)"
      unique_id: energie_datenfehler
      state: >
        {% set ids = [
          'sensor.netzbezug_gesamt_kwh',
          'sensor.netzeinspeisung_kwh',
          'sensor.gesamtverbrauch_haus_kwh',
          'sensor.verbrauch_warmepumpe_kwh',
          'sensor.verbrauch_allgemeinstrom_kwh'
        ] %}
        {% set neg = [] %}
        {% for e in ids %}
          {% set v = states(e) %}
          {% if v not in ['unknown','unavailable'] and (v|float(-1) < 0) %}
            {% set _ = neg.append(e) %}
          {% endif %}
        {% endfor %}
        {{ 'on' if neg|count > 0 else 'off' }}

# Tagesbilanz: Haus_taglich − (Netz_taglich + Direkt_t + BattEntl_t) ≈ 0
# Nutzt deine täglichen Haus-/Netz-UMs + Sungrow-Tageswerte.
    - name: "Tagesbilanz Differenz (kWh)"
      unique_id: tagesbilanz_differenz
      unit_of_measurement: "kWh"
      state_class: measurement
      availability: >
        {{ states('sensor.gesamtverbrauch_haus_taglich')|is_number and
           states('sensor.netzbezug_gesamt_taglich')|is_number and
           states('sensor.daily_direct_energy_consumption')|is_number and
           states('sensor.daily_battery_discharge')|is_number }}
      state: >
        {% set haus  = states('sensor.gesamtverbrauch_haus_taglich')|float(0) %}
        {% set netz  = states('sensor.netzbezug_gesamt_taglich')|float(0) %}
        {% set eigen = states('sensor.daily_direct_energy_consumption')|float(0)
                       + states('sensor.daily_battery_discharge')|float(0) %}
        {{ (haus - (netz + eigen)) | round(3) }}




# ======================================================================
# SCHICHT E – UM-CHECKS für alle Utility-Meter-Gruppen (kWh)
# (Suffixe: _stundlich / _taglich / _wochentlich / _monatlich / _jahrlich)
# Reihenfolge wie in Schicht F (UMs A–E)
# ======================================================================

# A – NETZBEZUG
# --------------------------------------------------------------------
# 1) Netzbezug Gesamt (Hausanschluss)
- sensor:
  - name: "UM-Check Netzbezug Gesamt"
    unique_id: umcheck_netzbezug_gesamt
    state: >
      {% set src = states('sensor.netzbezug_gesamt_kwh') %}
      {% set h = states('sensor.netzbezug_gesamt_stundlich') %}
      {% set d = states('sensor.netzbezug_gesamt_taglich') %}
      {% set w = states('sensor.netzbezug_gesamt_wochentlich') %}
      {% set m = states('sensor.netzbezug_gesamt_monatlich') %}
      {% set y = states('sensor.netzbezug_gesamt_jahrlich') %}
      {% if src in ['unknown','unavailable','nan'] or
            h in ['unknown','unavailable','nan'] or
            d in ['unknown','unavailable','nan'] or
            w in ['unknown','unavailable','nan'] or
            m in ['unknown','unavailable','nan'] or
            y in ['unknown','unavailable','nan'] %}
        unknown
      {% else %}
        {% set src = src|float(0) %}
        {% set h = h|float(0) %}
        {% set d = d|float(0) %}
        {% set w = w|float(0) %}
        {% set m = m|float(0) %}
        {% set y = y|float(0) %}
        {% set tol = 0.01 %}
        {% if h < -tol or d < -tol or w < -tol or m < -tol or y < -tol %}
          NEGATIVE
        {% elif y - src > tol %}
          YEARLY_GT_SOURCE
        {% elif m - y > tol %}
          MONTHLY_GT_YEARLY
        {% elif w - m > tol %}
          WEEKLY_GT_MONTHLY
        {% elif d - w > tol %}
          DAILY_GT_WEEKLY
        {% elif h - d > tol %}
          HOURLY_GT_DAILY
        {% else %}
          OK
        {% endif %}
      {% endif %}

# 2) Netzbezug Wärmepumpe

  - name: "UM-Check Netzbezug Wärmepumpe"
    unique_id: umcheck_netzbezug_wp
    state: >
      {% set src = states('sensor.netzbezug_warmepumpe_kwh') %}
      {% set h = states('sensor.netzbezug_warmepumpe_stundlich') %}
      {% set d = states('sensor.netzbezug_warmepumpe_taglich') %}
      {% set w = states('sensor.netzbezug_warmepumpe_wochentlich') %}
      {% set m = states('sensor.netzbezug_warmepumpe_monatlich') %}
      {% set y = states('sensor.netzbezug_warmepumpe_jahrlich') %}
      {% if src in ['unknown','unavailable','nan'] or
            h in ['unknown','unavailable','nan'] or
            d in ['unknown','unavailable','nan'] or
            w in ['unknown','unavailable','nan'] or
            m in ['unknown','unavailable','nan'] or
            y in ['unknown','unavailable','nan'] %}
        unknown
      {% else %}
        {% set src = src|float(0) %}
        {% set h = h|float(0) %}
        {% set d = d|float(0) %}
        {% set w = w|float(0) %}
        {% set m = m|float(0) %}
        {% set y = y|float(0) %}
        {% set tol = 0.01 %}
        {% if h < -tol or d < -tol or w < -tol or m < -tol or y < -tol %}
          NEGATIVE
        {% elif y - src > tol %}
          YEARLY_GT_SOURCE
        {% elif m - y > tol %}
          MONTHLY_GT_YEARLY
        {% elif w - m > tol %}
          WEEKLY_GT_MONTHLY
        {% elif d - w > tol %}
          DAILY_GT_WEEKLY
        {% elif h - d > tol %}
          HOURLY_GT_DAILY
        {% else %}
          OK
        {% endif %}
      {% endif %}

# 3) Netzbezug WHG2/Allg./WB

  - name: "UM-Check Netzbezug WHG2/Allg./WB"
    unique_id: umcheck_netzbezug_whg2_allg_wb
    state: >
      {% set src = states('sensor.netzbezug_whg2_allg_wb_kwh') %}
      {% set h = states('sensor.netzbezug_whg2_allg_wb_stundlich') %}
      {% set d = states('sensor.netzbezug_whg2_allg_wb_taglich') %}
      {% set w = states('sensor.netzbezug_whg2_allg_wb_wochentlich') %}
      {% set m = states('sensor.netzbezug_whg2_allg_wb_monatlich') %}
      {% set y = states('sensor.netzbezug_whg2_allg_wb_jahrlich') %}
      {% if src in ['unknown','unavailable','nan'] or
            h in ['unknown','unavailable','nan'] or
            d in ['unknown','unavailable','nan'] or
            w in ['unknown','unavailable','nan'] or
            m in ['unknown','unavailable','nan'] or
            y in ['unknown','unavailable','nan'] %}
        unknown
      {% else %}
        {% set src = src|float(0) %}
        {% set h = h|float(0) %}
        {% set d = d|float(0) %}
        {% set w = w|float(0) %}
        {% set m = m|float(0) %}
        {% set y = y|float(0) %}
        {% set tol = 0.01 %}
        {% if h < -tol or d < -tol or w < -tol or m < -tol or y < -tol %}
          NEGATIVE
        {% elif y - src > tol %}
          YEARLY_GT_SOURCE
        {% elif m - y > tol %}
          MONTHLY_GT_YEARLY
        {% elif w - m > tol %}
          WEEKLY_GT_MONTHLY
        {% elif d - w > tol %}
          DAILY_GT_WEEKLY
        {% elif h - d > tol %}
          HOURLY_GT_DAILY
        {% else %}
          OK
        {% endif %}
      {% endif %}

# B – VERBRAUCH
# --------------------------------------------------------------------
# 4) Verbrauch Wärmepumpe (Eltako)

  - name: "UM-Check Verbrauch Wärmepumpe"
    unique_id: umcheck_verbrauch_wp
    state: >
      {% set src = states('sensor.verbrauch_warmepumpe_kwh') %}
      {% set h = states('sensor.verbrauch_warmepumpe_stundlich') %}
      {% set d = states('sensor.verbrauch_warmepumpe_taglich') %}
      {% set w = states('sensor.verbrauch_warmepumpe_wochentlich') %}
      {% set m = states('sensor.verbrauch_warmepumpe_monatlich') %}
      {% set y = states('sensor.verbrauch_warmepumpe_jahrlich') %}
      {% if src in ['unknown','unavailable','nan'] or
            h in ['unknown','unavailable','nan'] or
            d in ['unknown','unavailable','nan'] or
            w in ['unknown','unavailable','nan'] or
            m in ['unknown','unavailable','nan'] or
            y in ['unknown','unavailable','nan'] %}
        unknown
      {% else %}
        {% set src = src|float(0) %}
        {% set h = h|float(0) %}
        {% set d = d|float(0) %}
        {% set w = w|float(0) %}
        {% set m = m|float(0) %}
        {% set y = y|float(0) %}
        {% set tol = 0.01 %}
        {% if h < -tol or d < -tol or w < -tol or m < -tol or y < -tol %}
          NEGATIVE
        {% elif y - src > tol %}
          YEARLY_GT_SOURCE
        {% elif m - y > tol %}
          MONTHLY_GT_YEARLY
        {% elif w - m > tol %}
          WEEKLY_GT_MONTHLY
        {% elif d - w > tol %}
          DAILY_GT_WEEKLY
        {% elif h - d > tol %}
          HOURLY_GT_DAILY
        {% else %}
          OK
        {% endif %}
      {% endif %}

# 5) Allgemeinstrom (Eltako)

  - name: "UM-Check Allgemeinstrom"
    unique_id: umcheck_allgemeinstrom
    state: >
      {% set src = states('sensor.verbrauch_allgemeinstrom_kwh') %}
      {% set h = states('sensor.allgemeinstrom_stundlich') %}
      {% set d = states('sensor.allgemeinstrom_taglich') %}
      {% set w = states('sensor.allgemeinstrom_wochentlich') %}
      {% set m = states('sensor.allgemeinstrom_monatlich') %}
      {% set y = states('sensor.allgemeinstrom_jahrlich') %}
      {% if src in ['unknown','unavailable','nan'] or
            h in ['unknown','unavailable','nan'] or
            d in ['unknown','unavailable','nan'] or
            w in ['unknown','unavailable','nan'] or
            m in ['unknown','unavailable','nan'] or
            y in ['unknown','unavailable','nan'] %}
        unknown
      {% else %}
        {% set src = src|float(0) %}
        {% set h = h|float(0) %}
        {% set d = d|float(0) %}
        {% set w = w|float(0) %}
        {% set m = m|float(0) %}
        {% set y = y|float(0) %}
        {% set tol = 0.01 %}
        {% if h < -tol or d < -tol or w < -tol or m < -tol or y < -tol %}
          NEGATIVE
        {% elif y - src > tol %}
          YEARLY_GT_SOURCE
        {% elif m - y > tol %}
          MONTHLY_GT_YEARLY
        {% elif w - m > tol %}
          WEEKLY_GT_MONTHLY
        {% elif d - w > tol %}
          DAILY_GT_WEEKLY
        {% elif h - d > tol %}
          HOURLY_GT_DAILY
        {% else %}
          OK
        {% endif %}
      {% endif %}

# 6) Haus-Gesamtverbrauch

  - name: "UM-Check Gesamtverbrauch Haus"
    unique_id: umcheck_gesamtverbrauch_haus
    state: >
      {% set src = states('sensor.gesamtverbrauch_haus_kwh') %}
      {% set h = states('sensor.gesamtverbrauch_haus_stundlich') %}
      {% set d = states('sensor.gesamtverbrauch_haus_taglich') %}
      {% set w = states('sensor.gesamtverbrauch_haus_wochentlich') %}
      {% set m = states('sensor.gesamtverbrauch_haus_monatlich') %}
      {% set y = states('sensor.gesamtverbrauch_haus_jahrlich') %}
      {% if src in ['unknown','unavailable','nan'] or
            h in ['unknown','unavailable','nan'] or
            d in ['unknown','unavailable','nan'] or
            w in ['unknown','unavailable','nan'] or
            m in ['unknown','unavailable','nan'] or
            y in ['unknown','unavailable','nan'] %}
        unknown
      {% else %}
        {% set src = src|float(0) %}
        {% set h = h|float(0) %}
        {% set d = d|float(0) %}
        {% set w = w|float(0) %}
        {% set m = m|float(0) %}
        {% set y = y|float(0) %}
        {% set tol = 0.01 %}
        {% if h < -tol or d < -tol or w < -tol or m < -tol or y < -tol %}
          NEGATIVE
        {% elif y - src > tol %}
          YEARLY_GT_SOURCE
        {% elif m - y > tol %}
          MONTHLY_GT_YEARLY
        {% elif w - m > tol %}
          WEEKLY_GT_MONTHLY
        {% elif d - w > tol %}
          DAILY_GT_WEEKLY
        {% elif h - d > tol %}
          HOURLY_GT_DAILY
        {% else %}
          OK
        {% endif %}
      {% endif %}

# 7) Gesamtverbrauch WHG2/Allg./WB

  - name: "UM-Check Gesamtverbrauch WHG2/Allg./WB"
    unique_id: umcheck_gesamtverbrauch_whg2_allg_wb
    state: >
      {% set src = states('sensor.gesamtverbrauch_whg2_allg_wb') %}
      {% set h = states('sensor.gesamtverbrauch_whg2_allg_wb_stundlich') %}
      {% set d = states('sensor.gesamtverbrauch_whg2_allg_wb_taglich') %}
      {% set w = states('sensor.gesamtverbrauch_whg2_allg_wb_wochentlich') %}
      {% set m = states('sensor.gesamtverbrauch_whg2_allg_wb_monatlich') %}
      {% set y = states('sensor.gesamtverbrauch_whg2_allg_wb_jahrlich') %}
      {% if src in ['unknown','unavailable','nan'] or
            h in ['unknown','unavailable','nan'] or
            d in ['unknown','unavailable','nan'] or
            w in ['unknown','unavailable','nan'] or
            m in ['unknown','unavailable','nan'] or
            y in ['unknown','unavailable','nan'] %}
        unknown
      {% else %}
        {% set src = src|float(0) %}
        {% set h = h|float(0) %}
        {% set d = d|float(0) %}
        {% set w = w|float(0) %}
        {% set m = m|float(0) %}
        {% set y = y|float(0) %}
        {% set tol = 0.01 %}
        {% if h < -tol or d < -tol or w < -tol or m < -tol or y < -tol %}
          NEGATIVE
        {% elif y - src > tol %}
          YEARLY_GT_SOURCE
        {% elif m - y > tol %}
          MONTHLY_GT_YEARLY
        {% elif w - m > tol %}
          WEEKLY_GT_MONTHLY
        {% elif d - w > tol %}
          DAILY_GT_WEEKLY
        {% elif h - d > tol %}
          HOURLY_GT_DAILY
        {% else %}
          OK
        {% endif %}
      {% endif %}

# 8) Gesamtverbrauch Wohnung 2 & Wallbox

  - name: "UM-Check Gesamtverbrauch Whg2 & WB"
    unique_id: umcheck_gesamtverbrauch_wohnung2_wb
    state: >
      {% set src = states('sensor.gesamtverbrauch_wohnung_2_wallbox') %}
      {% set h = states('sensor.gesamtverbrauch_wohnung_2_wb_stundlich') %}
      {% set d = states('sensor.gesamtverbrauch_wohnung_2_wb_taglich') %}
      {% set w = states('sensor.gesamtverbrauch_wohnung_2_wb_wochentlich') %}
      {% set m = states('sensor.gesamtverbrauch_wohnung_2_wb_monatlich') %}
      {% set y = states('sensor.gesamtverbrauch_wohnung_2_wb_jahrlich') %}
      {% if src in ['unknown','unavailable','nan'] or
            h in ['unknown','unavailable','nan'] or
            d in ['unknown','unavailable','nan'] or
            w in ['unknown','unavailable','nan'] or
            m in ['unknown','unavailable','nan'] or
            y in ['unknown','unavailable','nan'] %}
        unknown
      {% else %}
        {% set src = src|float(0) %}
        {% set h = h|float(0) %}
        {% set d = d|float(0) %}
        {% set w = w|float(0) %}
        {% set m = m|float(0) %}
        {% set y = y|float(0) %}
        {% set tol = 0.01 %}
        {% if h < -tol or d < -tol or w < -tol or m < -tol or y < -tol %}
          NEGATIVE
        {% elif y - src > tol %}
          YEARLY_GT_SOURCE
        {% elif m - y > tol %}
          MONTHLY_GT_YEARLY
        {% elif w - m > tol %}
          WEEKLY_GT_MONTHLY
        {% elif d - w > tol %}
          DAILY_GT_WEEKLY
        {% elif h - d > tol %}
          HOURLY_GT_DAILY
        {% else %}
          OK
        {% endif %}
      {% endif %}

# C – PV / BATTERIE – ERZEUGUNG UND SPEICHER
# --------------------------------------------------------------------
# 9) PV-Erzeugung gesamt (Totalsensor)

  - name: "UM-Check PV-Erzeugung gesamt"
    unique_id: umcheck_pv_erzeugung_gesamt
    state: >
      {% set src = states('sensor.total_pv_generation') %}
      {% set h = states('sensor.pv_erzeugung_gesamt_stundlich') %}
      {% set d = states('sensor.pv_erzeugung_gesamt_taglich') %}
      {% set w = states('sensor.pv_erzeugung_gesamt_wochentlich') %}
      {% set m = states('sensor.pv_erzeugung_gesamt_monatlich') %}
      {% set y = states('sensor.pv_erzeugung_gesamt_jahrlich') %}
      {% if src in ['unknown','unavailable','nan'] or
            h in ['unknown','unavailable','nan'] or
            d in ['unknown','unavailable','nan'] or
            w in ['unknown','unavailable','nan'] or
            m in ['unknown','unavailable','nan'] or
            y in ['unknown','unavailable','nan'] %}
        unknown
      {% else %}
        {% set src = src|float(0) %}
        {% set h = h|float(0) %}
        {% set d = d|float(0) %}
        {% set w = w|float(0) %}
        {% set m = m|float(0) %}
        {% set y = y|float(0) %}
        {% set tol = 0.01 %}
        {% if h < -tol or d < -tol or w < -tol or m < -tol or y < -tol %}
          NEGATIVE
        {% elif y - src > tol %}
          YEARLY_GT_SOURCE
        {% elif m - y > tol %}
          MONTHLY_GT_YEARLY
        {% elif w - m > tol %}
          WEEKLY_GT_MONTHLY
        {% elif d - w > tol %}
          DAILY_GT_WEEKLY
        {% elif h - d > tol %}
          HOURLY_GT_DAILY
        {% else %}
          OK
        {% endif %}
      {% endif %}

# 10) PV-Ertrag ohne Batterieeinspeisung

  - name: "UM-Check PV-Ertrag ohne Batterie"
    unique_id: umcheck_pv_ertrag_ohne_batt
    state: >
      {% set src = states('sensor.pv_ertrag_ohne_batterieeinspeisung_kwh') %}
      {% set h = states('sensor.pv_ertrag_ohne_batterie_stundlich') %}
      {% set d = states('sensor.pv_ertrag_ohne_batterie_taglich') %}
      {% set w = states('sensor.pv_ertrag_ohne_batterie_wochentlich') %}
      {% set m = states('sensor.pv_ertrag_ohne_batterie_monatlich') %}
      {% set y = states('sensor.pv_ertrag_ohne_batterie_jahrlich') %}
      {% if src in ['unknown','unavailable','nan'] or
            h in ['unknown','unavailable','nan'] or
            d in ['unknown','unavailable','nan'] or
            w in ['unknown','unavailable','nan'] or
            m in ['unknown','unavailable','nan'] or
            y in ['unknown','unavailable','nan'] %}
        unknown
      {% else %}
        {% set src = src|float(0) %}
        {% set h = h|float(0) %}
        {% set d = d|float(0) %}
        {% set w = w|float(0) %}
        {% set m = m|float(0) %}
        {% set y = y|float(0) %}
        {% set tol = 0.01 %}
        {% if h < -tol or d < -tol or w < -tol or m < -tol or y < -tol %}
          NEGATIVE
        {% elif y - src > tol %}
          YEARLY_GT_SOURCE
        {% elif m - y > tol %}
          MONTHLY_GT_YEARLY
        {% elif w - m > tol %}
          WEEKLY_GT_MONTHLY
        {% elif d - w > tol %}
          DAILY_GT_WEEKLY
        {% elif h - d > tol %}
          HOURLY_GT_DAILY
        {% else %}
          OK
        {% endif %}
      {% endif %}

# 11) Netzeinspeisung gesamt

  - name: "UM-Check Netzeinspeisung"
    unique_id: umcheck_netzeinspeisung
    state: >
      {% set src = states('sensor.netzeinspeisung_kwh') %}
      {% set h = states('sensor.netzeinspeisung_stundlich') %}
      {% set d = states('sensor.netzeinspeisung_taglich') %}
      {% set w = states('sensor.netzeinspeisung_wochentlich') %}
      {% set m = states('sensor.netzeinspeisung_monatlich') %}
      {% set y = states('sensor.netzeinspeisung_jahrlich') %}
      {% if src in ['unknown','unavailable','nan'] or
            h in ['unknown','unavailable','nan'] or
            d in ['unknown','unavailable','nan'] or
            w in ['unknown','unavailable','nan'] or
            m in ['unknown','unavailable','nan'] or
            y in ['unknown','unavailable','nan'] %}
        unknown
      {% else %}
        {% set src = src|float(0) %}
        {% set h = h|float(0) %}
        {% set d = d|float(0) %}
        {% set w = w|float(0) %}
        {% set m = m|float(0) %}
        {% set y = y|float(0) %}
        {% set tol = 0.01 %}
        {% if h < -tol or d < -tol or w < -tol or m < -tol or y < -tol %}
          NEGATIVE
        {% elif y - src > tol %}
          YEARLY_GT_SOURCE
        {% elif m - y > tol %}
          MONTHLY_GT_YEARLY
        {% elif w - m > tol %}
          WEEKLY_GT_MONTHLY
        {% elif d - w > tol %}
          DAILY_GT_WEEKLY
        {% elif h - d > tol %}
          HOURLY_GT_DAILY
        {% else %}
          OK
        {% endif %}
      {% endif %}

# 12) Batterieentladung (Totalsensor)

  - name: "UM-Check Batterieentladung"
    unique_id: umcheck_batterieentladung
    state: >
      {% set src = states('sensor.total_battery_discharge') %}
      {% set h = states('sensor.batterieentladung_stundlich') %}
      {% set d = states('sensor.batterieentladung_taglich') %}
      {% set w = states('sensor.batterieentladung_wochentlich') %}
      {% set m = states('sensor.batterieentladung_monatlich') %}
      {% set y = states('sensor.batterieentladung_jahrlich') %}
      {% if src in ['unknown','unavailable','nan'] or
            h in ['unknown','unavailable','nan'] or
            d in ['unknown','unavailable','nan'] or
            w in ['unknown','unavailable','nan'] or
            m in ['unknown','unavailable','nan'] or
            y in ['unknown','unavailable','nan'] %}
        unknown
      {% else %}
        {% set src = src|float(0) %}
        {% set h = h|float(0) %}
        {% set d = d|float(0) %}
        {% set w = w|float(0) %}
        {% set m = m|float(0) %}
        {% set y = y|float(0) %}
        {% set tol = 0.01 %}
        {% if h < -tol or d < -tol or w < -tol or m < -tol or y < -tol %}
          NEGATIVE
        {% elif y - src > tol %}
          YEARLY_GT_SOURCE
        {% elif m - y > tol %}
          MONTHLY_GT_YEARLY
        {% elif w - m > tol %}
          WEEKLY_GT_MONTHLY
        {% elif d - w > tol %}
          DAILY_GT_WEEKLY
        {% elif h - d > tol %}
          HOURLY_GT_DAILY
        {% else %}
          OK
        {% endif %}
      {% endif %}

# 13) Batterieladung aus PV (Totalsensor)

  - name: "UM-Check Batterieladung aus PV"
    unique_id: umcheck_batterieladung_aus_pv
    state: >
      {% set src = states('sensor.total_battery_charge_from_pv') %}
      {% set h = states('sensor.batterieladung_aus_pv_stundlich') %}
      {% set d = states('sensor.batterieladung_aus_pv_taglich') %}
      {% set w = states('sensor.batterieladung_aus_pv_wochentlich') %}
      {% set m = states('sensor.batterieladung_aus_pv_monatlich') %}
      {% set y = states('sensor.batterieladung_aus_pv_jahrlich') %}
      {% if src in ['unknown','unavailable','nan'] or
            h in ['unknown','unavailable','nan'] or
            d in ['unknown','unavailable','nan'] or
            w in ['unknown','unavailable','nan'] or
            m in ['unknown','unavailable','nan'] or
            y in ['unknown','unavailable','nan'] %}
        unknown
      {% else %}
        {% set src = src|float(0) %}
        {% set h = h|float(0) %}
        {% set d = d|float(0) %}
        {% set w = w|float(0) %}
        {% set m = m|float(0) %}
        {% set y = y|float(0) %}
        {% set tol = 0.01 %}
        {% if h < -tol or d < -tol or w < -tol or m < -tol or y < -tol %}
          NEGATIVE
        {% elif y - src > tol %}
          YEARLY_GT_SOURCE
        {% elif m - y > tol %}
          MONTHLY_GT_YEARLY
        {% elif w - m > tol %}
          WEEKLY_GT_MONTHLY
        {% elif d - w > tol %}
          DAILY_GT_WEEKLY
        {% elif h - d > tol %}
          HOURLY_GT_DAILY
        {% else %}
          OK
        {% endif %}
      {% endif %}

# 14) Netzladung Batterie

  - name: "UM-Check Netzladung Batterie"
    unique_id: umcheck_netzladung_batterie
    state: >
      {% set src = states('sensor.netzladung_batterie') %}
      {% set h = states('sensor.netzladung_batterie_stundlich') %}
      {% set d = states('sensor.netzladung_batterie_taglich') %}
      {% set w = states('sensor.netzladung_batterie_wochentlich') %}
      {% set m = states('sensor.netzladung_batterie_monatlich') %}
      {% set y = states('sensor.netzladung_batterie_jahrlich') %}
      {% if src in ['unknown','unavailable','nan'] or
            h in ['unknown','unavailable','nan'] or
            d in ['unknown','unavailable','nan'] or
            w in ['unknown','unavailable','nan'] or
            m in ['unknown','unavailable','nan'] or
            y in ['unknown','unavailable','nan'] %}
        unknown
      {% else %}
        {% set src = src|float(0) %}
        {% set h = h|float(0) %}
        {% set d = d|float(0) %}
        {% set w = w|float(0) %}
        {% set m = m|float(0) %}
        {% set y = y|float(0) %}
        {% set tol = 0.01 %}
        {% if h < -tol or d < -tol or w < -tol or m < -tol or y < -tol %}
          NEGATIVE
        {% elif y - src > tol %}
          YEARLY_GT_SOURCE
        {% elif m - y > tol %}
          MONTHLY_GT_YEARLY
        {% elif w - m > tol %}
          WEEKLY_GT_MONTHLY
        {% elif d - w > tol %}
          DAILY_GT_WEEKLY
        {% elif h - d > tol %}
          HOURLY_GT_DAILY
        {% else %}
          OK
        {% endif %}
      {% endif %}

# D – EIGENVERBRAUCH
# --------------------------------------------------------------------
# 15) Eigenverbrauch PV/Batterie gesamt

  - name: "UM-Check Eigenverbrauch PV/Batt gesamt"
    unique_id: umcheck_eigenverbrauch_pv_batt_gesamt
    state: >
      {% set src = states('sensor.eigenverbrauch_gesamt_pv_batterie') %}
      {% set h = states('sensor.eigenverbrauch_pv_batterie_gesamt_stundlich') %}
      {% set d = states('sensor.eigenverbrauch_pv_batterie_gesamt_taglich') %}
      {% set w = states('sensor.eigenverbrauch_pv_batterie_gesamt_wochentlich') %}
      {% set m = states('sensor.eigenverbrauch_pv_batterie_gesamt_monatlich') %}
      {% set y = states('sensor.eigenverbrauch_pv_batterie_gesamt_jahrlich') %}
      {% if src in ['unknown','unavailable','nan'] or
            h in ['unknown','unavailable','nan'] or
            d in ['unknown','unavailable','nan'] or
            w in ['unknown','unavailable','nan'] or
            m in ['unknown','unavailable','nan'] or
            y in ['unknown','unavailable','nan'] %}
        unknown
      {% else %}
        {% set src = src|float(0) %}
        {% set h = h|float(0) %}
        {% set d = d|float(0) %}
        {% set w = w|float(0) %}
        {% set m = m|float(0) %}
        {% set y = y|float(0) %}
        {% set tol = 0.01 %}
        {% if h < -tol or d < -tol or w < -tol or m < -tol or y < -tol %}
          NEGATIVE
        {% elif y - src > tol %}
          YEARLY_GT_SOURCE
        {% elif m - y > tol %}
          MONTHLY_GT_YEARLY
        {% elif w - m > tol %}
          WEEKLY_GT_MONTHLY
        {% elif d - w > tol %}
          DAILY_GT_WEEKLY
        {% elif h - d > tol %}
          HOURLY_GT_DAILY
        {% else %}
          OK
        {% endif %}
      {% endif %}

# 16) Eigenverbrauch WP aus PV/Batterie

  - name: "UM-Check Eigenverbrauch WP aus PV/Batt"
    unique_id: umcheck_eigenverbrauch_wp_pv_batt
    state: >
      {% set src = states('sensor.eigenverbrauch_pv_batterie_warmepumpe_monoton') %}
      {% set h = states('sensor.eigenverbrauch_warmepumpe_aus_pv_batterie_stundlich') %}
      {% set d = states('sensor.eigenverbrauch_warmepumpe_aus_pv_batterie_taglich') %}
      {% set w = states('sensor.eigenverbrauch_warmepumpe_aus_pv_batterie_wochentlich') %}
      {% set m = states('sensor.eigenverbrauch_warmepumpe_aus_pv_batterie_monatlich') %}
      {% set y = states('sensor.eigenverbrauch_warmepumpe_aus_pv_batterie_jahrlich') %}
      {% if src in ['unknown','unavailable','nan'] or
            h in ['unknown','unavailable','nan'] or
            d in ['unknown','unavailable','nan'] or
            w in ['unknown','unavailable','nan'] or
            m in ['unknown','unavailable','nan'] or
            y in ['unknown','unavailable','nan'] %}
        unknown
      {% else %}
        {% set src = src|float(0) %}
        {% set h = h|float(0) %}
        {% set d = d|float(0) %}
        {% set w = w|float(0) %}
        {% set m = m|float(0) %}
        {% set y = y|float(0) %}
        {% set tol = 0.01 %}
        {% if h < -tol or d < -tol or w < -tol or m < -tol or y < -tol %}
          NEGATIVE
        {% elif y - src > tol %}
          YEARLY_GT_SOURCE
        {% elif m - y > tol %}
          MONTHLY_GT_YEARLY
        {% elif w - m > tol %}
          WEEKLY_GT_MONTHLY
        {% elif d - w > tol %}
          DAILY_GT_WEEKLY
        {% elif h - d > tol %}
          HOURLY_GT_DAILY
        {% else %}
          OK
        {% endif %}
      {% endif %}

# 17) Eigenverbrauch PV/Batt WHG2/Allg./WB

  - name: "UM-Check Eigenverbrauch PV/Batt WHG2/Allg./WB"
    unique_id: umcheck_eigenverbrauch_pv_batt_whg2_allg_wb
    state: >
      {% set src = states('sensor.eigenverbrauch_pv_batterie_whg2_allg_wb_monoton') %}
      {% set h = states('sensor.eigenverbrauch_pv_batt_whg2_allg_wb_stundlich') %}
      {% set d = states('sensor.eigenverbrauch_pv_batt_whg2_allg_wb_taglich') %}
      {% set w = states('sensor.eigenverbrauch_pv_batt_whg2_allg_wb_wochentlich') %}
      {% set m = states('sensor.eigenverbrauch_pv_batt_whg2_allg_wb_monatlich') %}
      {% set y = states('sensor.eigenverbrauch_pv_batt_whg2_allg_wb_jahrlich') %}
      {% if src in ['unknown','unavailable','nan'] or
            h in ['unknown','unavailable','nan'] or
            d in ['unknown','unavailable','nan'] or
            w in ['unknown','unavailable','nan'] or
            m in ['unknown','unavailable','nan'] or
            y in ['unknown','unavailable','nan'] %}
        unknown
      {% else %}
        {% set src = src|float(0) %}
        {% set h = h|float(0) %}
        {% set d = d|float(0) %}
        {% set w = w|float(0) %}
        {% set m = m|float(0) %}
        {% set y = y|float(0) %}
        {% set tol = 0.01 %}
        {% if h < -tol or d < -tol or w < -tol or m < -tol or y < -tol %}
          NEGATIVE
        {% elif y - src > tol %}
          YEARLY_GT_SOURCE
        {% elif m - y > tol %}
          MONTHLY_GT_YEARLY
        {% elif w - m > tol %}
          WEEKLY_GT_MONTHLY
        {% elif d - w > tol %}
          DAILY_GT_WEEKLY
        {% elif h - d > tol %}
          HOURLY_GT_DAILY
        {% else %}
          OK
        {% endif %}
      {% endif %}

# E – DIREKTVERBRAUCH PV
# --------------------------------------------------------------------
# 18) Direktverbrauch PV (Totalsensor)

  - name: "UM-Check Direktverbrauch PV"
    unique_id: umcheck_direktverbrauch_pv
    state: >
      {% set src = states('sensor.total_direct_energy_consumption') %}
      {% set h = states('sensor.direktverbrauch_pv_stundlich') %}
      {% set d = states('sensor.direktverbrauch_pv_taglich') %}
      {% set w = states('sensor.direktverbrauch_pv_wochentlich') %}
      {% set m = states('sensor.direktverbrauch_pv_monatlich') %}
      {% set y = states('sensor.direktverbrauch_pv_jahrlich') %}
      {% if src in ['unknown','unavailable','nan'] or
            h in ['unknown','unavailable','nan'] or
            d in ['unknown','unavailable','nan'] or
            w in ['unknown','unavailable','nan'] or
            m in ['unknown','unavailable','nan'] or
            y in ['unknown','unavailable','nan'] %}
        unknown
      {% else %}
        {% set src = src|float(0) %}
        {% set h = h|float(0) %}
        {% set d = d|float(0) %}
        {% set w = w|float(0) %}
        {% set m = m|float(0) %}
        {% set y = y|float(0) %}
        {% set tol = 0.01 %}
        {% if h < -tol or d < -tol or w < -tol or m < -tol or y < -tol %}
          NEGATIVE
        {% elif y - src > tol %}
          YEARLY_GT_SOURCE
        {% elif m - y > tol %}
          MONTHLY_GT_YEARLY
        {% elif w - m > tol %}
          WEEKLY_GT_MONTHLY
        {% elif d - w > tol %}
          DAILY_GT_WEEKLY
        {% elif h - d > tol %}
          HOURLY_GT_DAILY
        {% else %}
          OK
        {% endif %}
      {% endif %}

# ====================================================================
# Euro-Checks (Monat/Jahr) – wie gehabt
# ====================================================================

  - name: "UM-Check EUR Stromkosten WP"
    unique_id: umcheck_eur_stromkosten_wp
    state: >
      {% set m = states('sensor.stromkosten_wp_netz_monatlich') %}
      {% set y = states('sensor.stromkosten_wp_netz_jahrlich') %}
      {% if m in ['unknown','unavailable','nan'] or y in ['unknown','unavailable','nan'] %}
        unknown
      {% else %}
        {% set m = m|float(0) %}
        {% set y = y|float(0) %}
        {% set tol = 0.01 %}
        {% if m < -tol or y < -tol %}
          NEGATIVE
        {% elif m - y > tol %}
          MONTHLY_GT_YEARLY
        {% else %}
          OK
        {% endif %}
      {% endif %}

  - name: "UM-Check EUR Stromkosten Haushalt"
    unique_id: umcheck_eur_stromkosten_haushalt
    state: >
      {% set m = states('sensor.stromkosten_haushalt_netz_monatlich') %}
      {% set y = states('sensor.stromkosten_haushalt_netz_jahrlich') %}
      {% if m in ['unknown','unavailable','nan'] or y in ['unknown','unavailable','nan'] %}
        unknown
      {% else %}
        {% set m = m|float(0) %}
        {% set y = y|float(0) %}
        {% set tol = 0.01 %}
        {% if m < -tol or y < -tol %}
          NEGATIVE
        {% elif m - y > tol %}
          MONTHLY_GT_YEARLY
        {% else %}
          OK
        {% endif %}
      {% endif %}

  - name: "UM-Check EUR Stromkosten gesamt"
    unique_id: umcheck_eur_stromkosten_gesamt
    state: >
      {% set m = states('sensor.stromkosten_netz_gesamt_monatlich') %}
      {% set y = states('sensor.stromkosten_netz_gesamt_jahrlich') %}
      {% if m in ['unknown','unavailable','nan'] or y in ['unknown','unavailable','nan'] %}
        unknown
      {% else %}
        {% set m = m|float(0) %}
        {% set y = y|float(0) %}
        {% set tol = 0.01 %}
        {% if m < -tol or y < -tol %}
          NEGATIVE
        {% elif m - y > tol %}
          MONTHLY_GT_YEARLY
        {% else %}
          OK
        {% endif %}
      {% endif %}

  - name: "UM-Check EUR PV-Einspeiseerlöse"
    unique_id: umcheck_eur_pv_einspeise
    state: >
      {% set m = states('sensor.pv_einspeiseerlose_monatlich') %}
      {% set y = states('sensor.pv_einspeiseerlose_jahrlich') %}
      {% if m in ['unknown','unavailable','nan'] or y in ['unknown','unavailable','nan'] %}
        unknown
      {% else %}
        {% set m = m|float(0) %}
        {% set y = y|float(0) %}
        {% set tol = 0.01 %}
        {% if m < -tol or y < -tol %}
          NEGATIVE
        {% elif m - y > tol %}
          MONTHLY_GT_YEARLY
        {% else %}
          OK
        {% endif %}
      {% endif %}

  - name: "UM-Check EUR PV-Vorteil gesamt"
    unique_id: umcheck_eur_pv_vorteil
    state: >
      {% set m = states('sensor.pv_vorteil_gesamt_monatlich') %}
      {% set y = states('sensor.pv_vorteil_gesamt_jahrlich') %}
      {% if m in ['unknown','unavailable','nan'] or y in ['unknown','unavailable','nan'] %}
        unknown
      {% else %}
        {% set m = m|float(0) %}
        {% set y = y|float(0) %}
        {% set tol = 0.01 %}
        {% if m < -tol or y < -tol %}
          NEGATIVE
        {% elif m - y > tol %}
          MONTHLY_GT_YEARLY
        {% else %}
          OK
        {% endif %}
      {% endif %}

  - name: "UM-Check EUR PV-Ersparnis"
    unique_id: umcheck_eur_pv_ersparnis
    state: >
      {% set m = states('sensor.pv_ersparnis_monatlich') %}
      {% set y = states('sensor.pv_ersparnis_jahrlich') %}
      {% if m in ['unknown','unavailable','nan'] or y in ['unknown','unavailable','nan'] %}
        unknown
      {% else %}
        {% set m = m|float(0) %}
        {% set y = y|float(0) %}
        {% set tol = 0.01 %}
        {% if m < -tol or y < -tol %}
          NEGATIVE
        {% elif m - y > tol %}
          MONTHLY_GT_YEARLY
        {% else %}
          OK
        {% endif %}
      {% endif %}