Template Sensor klappt nicht

Ich möchte einen Template Sensor erstellen, der mir zwei Sensorwerte (Heizenergie und dafür benötigte elektrische Energie) zu einem Quotienten verrechnet (so ähnlich wie eine Arbeitszahl).

Mein naiver Ansatz in sensors.yaml :

- platform: template
    sensors:    
      wp_efficiency:
        friendly_name: "WP Effizienz"
        unique_id: WPefficiency
        value_template: >-
          {%- if is_state("sensor.CurrentConsumedPower" | float(0), 0)  -%}
            0
          {%- else -%}
            {{ ((float(states("sensor.CurrentYieldPower")) | float(0)) / float(states("sensor.CurrentConsumedPower"))) | round(2) }}
          {%- endif %}
```

Das klappt aber nicht, ich bekomme ein rotes “Nicht verfügbar” Ausrufezeichen in der Entitätsliste.

Im Log steht eine für mich nicht recht verständliche Meldung:

2025-09-23 15:36:03.746 ERROR (MainThread) [homeassistant.components.template.template_entity] TemplateError('AttributeError: 'int' object has no attribute 'lower'') while processing template 'Template<template=({%- if is_state("sensor.CurrentConsumedPower" | float(0), 0)  -%}
  0
{%- else -%}
  {{ ((float(states("sensor.CurrentYieldPower")) | float(0)) / float(states("sensor.CurrentConsumedPower"))) | round(2) }}
{%- endif %}) renders=4>' for attribute '_attr_native_value' in entity 'sensor.wp_efficiency'

Hast Du das ganze mal in den Template Editor geworfen?

Was mir spontan auffällt:

Das | float(0) ist überflüssig, da du den den Sensor Status ja bereits zu beginn in float(states()) kapselst. Also entweder die äußere float Umklammerung, oder | float(0) entfernen.

OK, das war eine blinde Zugabe, als es nicht funktionierte :grinning_face_with_smiling_eyes:

“Template Editor”? Ah! Den kannte ich noch nicht.
Der sagt:

Entwicklerwerkzeuge → Template

http://homeassistant.local:8123/developer-tools/template

Versuch mal:

{%- if is_state("sensor.CurrentConsumedPower" | float(0), 0.0)  -%}

Fehler sollte jetzt weg sein, da du jetzt 2 floats vergleichst. In deinem Code vergleichst Du ein float mit einem int, was eine Fehlermeldung nach sich zieht.
{{ is_state("sensor.CurrentConsumedPower" | float(0), 0.0) }} im Template Editor sollte ein TRUE oder FALSE ergeben.

Ändert leider nix mit “0.0”…

Aber das hier tut es:


wp_efficiency:
      friendly_name: "WP Effizienz"
      unique_id: WPefficiency
      value_template: >-
        {%- if states("sensor.CurrentConsumedPower") | float(0) == 0  -%}
          0
        {%- else -%}
          {{ (float(states("sensor.CurrentYieldPower")) / float(states("sensor.CurrentConsumedPower"))) | round(2) }}
        {%- endif %}

Scheint, dass if_states nach String-Werten sucht ode so.