Problème template HA 2023.5.3

Mon problème

Depuis la version 2023.5.3, mes templates ne fonctionnent plus et j’ai mais mes sensors qui s’affichent « unvalaibable »

Ma configuration


- sensor:
  
    - name: "PV Puissance Totale"
      unique_id: PV_puissance_totale
      unit_of_measurement: "W"
      device_class: power
      state: "{{ [ states('sensor.pv2_charging_power'), states('sensor.pv1_puissance_instantanee') ] | map('float') | sum }}"
      availability: >
        {{ not 'unavailable' in 
           [ states('sensor.pv2_charging_power'), 
             states('sensor.onduleur_pv_watt') ] }}
             
    - name: "Puissance décharge Batterie"
      unique_id: puissance_decharge_batterie
      state: >-
        {% set state1 = states("sensor.batt_discharge_current") %}
        {% set state2 = states("sensor.battery_voltage") %}
        {% if is_number(state1) and is_number(state2) %}
          {{ ( state1|float * state2|float) | round(2) }}
        {% endif %}
      unit_of_measurement: "W"
      state_class: total
      device_class: power
      
    - name: "Puissance Charge Batterie"
      unique_id: puissance_charge_batterie
      state: >-
        {% set state1 = states("sensor.batt_charge_current") %}
        {% set state2 = states("sensor.battery_voltage") %}
        {% if is_number(state1) and is_number(state2) %}
          {{ ( state1|float * state2|float) | round(2) }}
        {% endif %}
      unit_of_measurement: "W"
      state_class: total
      device_class: power      
    
    - name: "PV1_Puissance-instantanee"
      unique_id: pv1_puissance_instantanee
      state: >-
        {% set state1 = states("sensor.pv1_input_current") %}
        {% set state2 = states("sensor.pv1_input_voltage") %}
        {% if is_number(state1) and is_number(state2) %}
          {{ ( state1|float * state2|float) | round(2) }}
        {% endif %}
      unit_of_measurement: "W"
      state_class: total
      device_class: power  

Quelqu’un a t’il le même problème ?

Bonjour,

Rien dans les logs ?

Sinon, pourquoi n’utilisez vous pas des « entrées » de type « groupe de capteurs » ?
Vous éviteriez les templates.

il me semble qu’il faut définir une valeur par défaut pour float ex: ‹ float(0) ›

Regarde dans le mode développement Modeles tes states !
exemple :

c’est déjà la faisabilité de ton template !

Bonjour

Merci à tous, j’ai déjà récupéré les 3/4 de mes template mais il m’en reste un où c’est impossible.

Il restait « indisponible » quoique je fasse alors je l’ai supprimé et recréer avec un autre nom pour éviter les doublons ou percutage mais il n’apparait même pas dans homeassistant :

    - name: "PV_Energie_Totale_instantanee"
      unique_id: pv_energie_totale_instantanee
      state: >-
        {% set state1 = states("sensor.pv2_charging_power") %}
        {% set state2 = states("sensor.onduleur_pv_watt") %}
        {% if is_number(state1) and is_number(state2) %}
          {{ ( state1|float + state2|float) | round(2) }}
        {% endif %}
      unit_of_measurement: "W"
      state_class: total
      device_class: power

dans le modèle template pourtant le résultat est conforme :

Je comprends pas

Salut,

C’est pas nouveau…
La modif est la depuis octobre 2021, avec un warning dans les logs… Maintenant que tout le monde devrait être au courant… C’est supprimé
Un message à chaque démarrage du type:
TemplateError('ValueError: Template error: float got invalid input 'unavailable' when rendering template blablabla

1 « J'aime »

J’ai tenté avec float(0) sans changement de résultat

Qu’as-tu dans les logs (journaux complets) ?

Bonjour,

J’ai modifié le sensor pour y ajouter une valeur si l’ un des capteurs n’a pas de donnée. Il affichera 0

Pas d’erreur dans mon cas.

  - sensor:
    - name: "PV_Energie_Totale_instantanee"
      unique_id: dae4c367-cb78-4418-b265-42ee4b1eeef5
      state: >-
        {%  if has_value('sensor.pv2_charging_power') and has_value('sensor.onduleur_pv_watt') %}
          {% set state1 = states('sensor.pv2_charging_power') | float %}
          {% set state2 = states('sensor.onduleur_pv_watt') | float %}
          {% if is_number(state1) and is_number(state2) %}
            {{ (state1 + state2) | round(2) }}
          {% endif %}
        {% else %}
        0
        {% endif %}
      unit_of_measurement: "W"
      state_class: total
      device_class: power

Quand tout va bien

Quand un des capteurs est non dispo.

Cordialement,
Abel

Vérifie bien. Quand je copie colle ton code, j’ai une erreur sur une incompatibilité entre le state_class et device_class
Accessoirement dans tes deux derniers exemples tu as toujours des float sans valeurs par défaut. En plus en ayant des valeurs par défaut, pas besoin de tester si c’est numérique

C’est très tôt en France :slight_smile:

Tu veux dire comme ça, avec float(default=0)

  - sensor:
    - name: "PV_Energie_Totale_instantanee"
      unique_id: dae4c367-cb78-4418-b265-42ee4b1eeef5
      state: >-
          {% set state1 = states('sensor.pv2_charging_power') | float(default=0) %}
          {% set state2 = states('sensor.onduleur_pv_watt') | float(default=0) %}
          {{ (state1 + state2) | round(2) }}
      unit_of_measurement: "W"
      state_class: total
      device_class: power

Abel

Je vois ce que tu voulais dire avec state_class et device_class.
Je viens de regarder le log.
Power ne supporte que measurement

      unit_of_measurement: "W"
      state_class: measurement
      device_class: power

Abel

Oui, encore une nuit hachée de mon coté de l’atlantique

Tout à fait

Pour tester j’ai juste changé les sensors d’entrée en input_number:

template:
  - sensor:
      - name: "PV_Energie_Totale_instantanee"
        unique_id: dae4c367-cb78-4418-b265-42ee4b1eeef5
        state: >-
            {% set state1 = states('input_number.pv2_charging_power') | float(default=0) %}
            {% set state2 = states('input_number.onduleur_pv_watt') | float(default=0) %}
            {{ (state1 + state2) | round(2) }}
        unit_of_measurement: "W"
        state_class: total
        device_class: power

Et j’ai un calcul qui ne donne rien
image
Alors que comme toi ça marche dans les outils de dev

Et voilà ce que je vois

2023-06-01 04:39:29.720 WARNING (MainThread) [homeassistant.components.sensor] Entity sensor.pv_energie_totale_instantanee (<class 'homeassistant.components.template.sensor.SensorTemplate'>) is using state class 'total' which is impossible considering device class ('power') it is using; expected None or one of 'measurement'; Please update your configuration if your entity is manually configured, otherwise create a bug report at https://github.com/home-assistant/core/issues?q=is%3Aopen+is%3Aissue+label%3A%22integration%3A+template%22

Si je corrige (je vire les 2 classes)
image

Donc tu dois avoir le même souci

J’utilise 2 Shelly pour les valeurs en W. C’est avec ces sensors que j’ai fait mes tests

sensor.light_wc_energy 0.06875 kWh et
sensor.fan_wc_energy 0.0738166666666667 kWh

La somme arondie donne bien 0.14

  - sensor:
    - name: "PV_Energie_Totale_instantanee"
      unique_id: dae4c367-cb78-4418-b265-42ee4b1eeef5
      state: >-
        {% set state1 = states('sensor.fan_wc_energy') | float(default=0) %}
        {% set state2 = states('sensor.light_wc_energy') | float(default=0) %}
        {{ (state1 + state2) | round(2) }}
      unit_of_measurement: "W"
      state_class: measurement
      device_class: power

Meme en mode template

Sensor

Je ne pense pas que les sensors jouent sur l’erreur.
Peux-tu

  • Chercher l’erreur dans les log
  • Virer les 2 dernières lignes de ton template
state_class: total
device_class: power
  • Redémarrer HA
  • Et confirmer le diagnostique

C’est bon au niveau des logs, j’avais rectifie il y a 25min

Maintenant state_class et device_class sont compatibles

Time for bed over here :slight_smile:
Ciao,

Abel

1 « J'aime »