Problème avec template

Hello
J’ai depuis peu ces msg d érreurs a propos de template que je n’avais pas il y a 3 mois lors de la création me semble t’il…
J’ai créé des energy input pour faire different calcul.
Tout semble aller bien
Je suis en 2023 -6.-1 en VM sur freebox

Voici les messages d’erreur qui semblent tourner autour de ca: _attr_native_value

Logger: homeassistant.helpers.template_entity
Source: helpers/template_entity.py:345
First occurred: 12 juin 2023 à 17:51:12 (209 occurrences)
Last logged: 07:47:12

TemplateError('ValueError: Template error: float got invalid input 'unavailable' when rendering template '{{ (((states('sensor.energie_jour_hc')|float / (states('sensor.energie_jour_hc')|float + states('sensor.energie_jour_hp')|float)))*100)|float|round (2)}}' but no default was specified') while processing template 'Template<template=({{ (((states('sensor.energie_jour_hc')|float / (states('sensor.energie_jour_hc')|float + states('sensor.energie_jour_hp')|float)))*100)|float|round (2)}}) renders=11814>' for attribute '_attr_native_value' in entity 'sensor.pourcentage_jour_hc_hp'
TemplateError('ValueError: Template error: float got invalid input 'unavailable' when rendering template '{{ (states('sensor.energie_mois_hc')|float + states('sensor.energie_mois_hp')|float)}}' but no default was specified') while processing template 'Template<template=({{ (states('sensor.energie_mois_hc')|float + states('sensor.energie_mois_hp')|float)}}) renders=11798>' for attribute '_attr_native_value' in entity 'sensor.energie_mois_total'
TemplateError('ValueError: Template error: float got invalid input 'unavailable' when rendering template '{{ (states('sensor.energie_an_hc')|float + states('sensor.energie_an_hp')|float)}}' but no default was specified') while processing template 'Template<template=({{ (states('sensor.energie_an_hc')|float + states('sensor.energie_an_hp')|float)}}) renders=11798>' for attribute '_attr_native_value' in entity 'sensor.energie_an_total'
TemplateError('ValueError: Template error: float got invalid input 'unavailable' when rendering template '{{ (((states('sensor.energie_mois_hc')|float / (states('sensor.energie_mois_total')|float)))*100)|float|round (2)}}' but no default was specified') while processing template 'Template<template=({{ (((states('sensor.energie_mois_hc')|float / (states('sensor.energie_mois_total')|float)))*100)|float|round (2)}}) renders=15470>' for attribute '_attr_native_value' in entity 'sensor.pourcentage_mois_hc_hp'
TemplateError('ValueError: Template error: float got invalid input 'unavailable' when rendering template '{{ (((states('sensor.energie_an_hc')|float / (states('sensor.energie_an_total')|float)))*100)|float|round (2)}}' but no default was specified') while processing template 'Template<template=({{ (((states('sensor.energie_an_hc')|float / (states('sensor.energie_an_total')|float)))*100)|float|round (2)}}) renders=15470>' for attribute '_attr_native_value' in entity 'sensor.pourcentage_an_hc_hp'

Un coup de main pour comprendre et modifier
merci

Salut,

Tu devrais déjà avoir des warnings à l’origine, la modification date de octobre 2021

hello
donc si j’ai bien compris il faut que je trouve ou et quelle valeur par default dans tous les template que j’ai crée comme ca?

  - platform: template
    sensors:
        energie_jour_hc:
          friendly_name: Total KWh Jour HC
          value_template: "{{ (states('sensor.daily_hc_bleue')|float + states('sensor.daily_hc_blanche')|float + states('sensor.daily_hc_rouge')|float)}}"
          unit_of_measurement: kWh  
          device_class: energy

Oui il faut corriger tous les templates qui n’utilisent pas une valeur par défaut.
La valeur en question est généralement 0 (sauf dans le cas des divisions)

donc si je met ca dans "modele j’ai plus de message d’erreur

  - platform: template
    sensors:
        energie_jour_hc:
          friendly_name: Total KWh Jour HC
          value_template: "{{ (states('sensor.daily_hc_bleue')|float(0) + states('sensor.daily_hc_blanche')|float(0) + states('sensor.daily_hc_rouge')|float(0))}}"
          unit_of_measurement: kWh  
          device_class: energy

Et si divison je met ‹ 1 › ?

Par contre y a un truc que j’ai du mal comprendre du coup. Je pensais que Float definissait le nombre de chifffre après la virgule dans un calcul. Du coup je comprends plus très bien l’histoire de la valeur par default

Désolé pour ces notions de beotiens…

Merci

Oui c’est une bonne solution

Non… D’ailleurs quand tu met float tout seul, tu as défini combien de chiffres ? :sweat_smile:
Float, ça dit : transforme la chaine de caractères (la valeur du state) en une valeur numérique à virgule. Et la valeur par défaut, c’est justement pour traiter le cas où ta valeur state ne contient pas de chiffres (par exemple unavailable), ça assure qu’il y a un chiffre à la sortie et ça ne casse pas trop le reste du calcul

super merci pour toutes ces informations…
je vais mettre du float(o) partout avant la sieste… lol
Et je mettrai résolu si plus de msg

Ce format de template n’est pas correct et prochainement ne fonctionnera plus.

Salut
J’ai pas vu l’info d’une fin de support de ce format. Au mieux une recommandation pour utiliser le nouveau

ça laisse un peu de marge et ça éviter de tout casser d’un coup

Du coup si on prends mon sensor au dessus faudrait que je le réécrive comment ?
J y comprends plus grand chose…

Tant qu’il rencontre un problème autant passer sur le nouveau format. Il évitera d’y revenir lorsque ce ne sera plus supporté et qu’il aura oublié ce qu’il avait fait.

la bonne ecriture serait donc celle ci?

  - platform: template
    sensors:
        energie_jour_hc:
          name: "Total KWh Jour HC"
          state: >-
		  {{ (states('sensor.daily_hc_bleue')|float(0) + states('sensor.daily_hc_blanche')|float(0) + states('sensor.daily_hc_rouge')|float(0))}}
          unit_of_measurement: kWh  
          device_class: energy

Par contre faut t il tout le temps mettre

state: >-

oubbien peut on ecrire indifferement

  - platform: template
    sensors:
        energie_jour_hc:
          name: "Total KWh Jour HC"
          {{ (states('sensor.daily_hc_bleue')|float(0) + states('sensor.daily_hc_blanche')|float(0) + states('sensor.daily_hc_rouge')|float(0))}}
          unit_of_measurement: kWh  
          device_class: energy

non plutôt :

template:
  - sensor:
      - name: energie_jour_hc
        state:
1 « J'aime »

Exemple.

Avant (ancien format):

sensors:
  - platform: template
    sensors:
        energie_jour_hc:
          name: "Total KWh Jour HC"
          state: >-
		  {{ (states('sensor.daily_hc_bleue')|float(0) + states('sensor.daily_hc_blanche')|float(0) + states('sensor.daily_hc_rouge')|float(0))}}
          unit_of_measurement: kWh  
          device_class: energy

Après (nouveau format):

template:
  - sensor:
      - name: Total KWh Jour HC
        unique_id: energie_jour_hc
        unit_of_measurement: "kWh"
		device_class: energy
        state: "{{ (states('sensor.daily_hc_bleue')|float(0) + states('sensor.daily_hc_blanche')|float(0) + states('sensor.daily_hc_rouge')|float(0))}}"

du coup avant de faire des betises et tout casser, y a un truc qui me chiffone
Si je prends mon exemple

- platform: template
    sensors:
        energie_jour_hc:
          name: "Total KWh Jour HC"
          state: >-
		  {{ (states('sensor.daily_hc_bleue')|float(0) + states('sensor.daily_hc_blanche')|float(0) + states('sensor.daily_hc_rouge')|float(0))}}
          unit_of_measurement: kWh  
          device_class: energy

A ce moment mon sensor s appelle → energie_jour_hc et le nom familier est → Total KWh Jour HC

Du coup name correspond à Total KWh Jour HC
et
unique_id : à energie_jour_hc

Ca va rien changer dans mes sensor et donc mes calculs et autres graphiques…

Merci d’avance

Non, c’est bon. C’est pour ca que je t’es mis unique_id: energie_jour_hc qui correspond a energie_jour_hc:( ancien format).
J’ai fait de même chez moi sur une dizaine de template et aucun soucis, sa le même nom et friendly name.

avant:

- platform: template
  sensors:
    energy_home_cout_daily:
      friendly_name: 'Energie home jour € hp+hc'
      value_template: "{{ (((states('sensor.energie_quotidienne_home_hp')|float)*states('input_number.box_prix_hp')|float) + ((states('sensor.energie_quotidienne_home_hc')|float)*states('input_number.box_prix_hc')|float)) /1000 |round (3) }}"
      unit_of_measurement: "€"
      unique_id: energy_home_cout_daily

après:

template:
  - sensor:
      - name: 'Energie home jour € hp+hc'
        unique_id: energy_home_cout_daily
        unit_of_measurement: "€"
        state: "{{ (((states('sensor.energie_quotidienne_home_hp')|float(0))*states('input_number.box_prix_hp')|float(0)) + ((states('sensor.energie_quotidienne_home_hc')|float(0))*states('input_number.box_prix_hc')|float(0))) /1000 |round (3) }}"

résultat dans outils de devellopement

Alors j’ai un fichier template.yaml qui est vide avec includen dans le configuration.yaml
J’ai un fichier sensor.yaml ou j’ai (surement par erreur) mis tous mes templates et sensors crees

Lorsque je veux transferer un par un les template après les avoir modifies et que je verifie la configuration avant redemarrage j’ai un msg d’erreur m’envoyant vers la ligne include sensor. yaml

Je ne peux pas avoir les 2? Je dois tout transferer dans template.yaml et supprimer sensor.yaml?

Bref je nage et ne sais plus quoi .faire

merci

Ta split ta configuration, et l’ancien format des templates est bien dans sensor.yaml.
Avec le nouveau format, c’est dans le fichier template.yaml que tu doit mettre les nouveaux templates.

Tu peu pas avoir un template ancien format dans sensor.yaml et le même template au nouveau format dans template.yaml. Vu qu’il ont les même unique_id et friendly_name, ca fonctionnera pas .
Faut convertir t’es template de sensor.yaml vers template.yaml et supprimer les templates dans sensor.yaml.

Comme tu as split ta config et as un fichier template.yaml, tu doit mettre comme ca ( pas besoin du template: en début de ligne):

template.yaml:

- sensor:
    - name: 'Energie home jour € hp+hc'
      unique_id: energy_home_cout_daily
      unit_of_measurement: "€"
      state: "{{ (((states('sensor.energie_quotidienne_home_hp')|float(0))*states('input_number.box_prix_hp')|float(0)) + ((states('sensor.energie_quotidienne_home_hc')|float(0))*states('input_number.box_prix_hc')|float(0))) /1000 |round (3) }}"

Avant dans le sensor.yaml ( pas besoin du sensor: en début de ligne):

- platform: template
  sensors:
    energy_home_cout_daily:
      friendly_name: 'Energie home jour € hp+hc'
      value_template: "{{ (((states('sensor.energie_quotidienne_home_hp')|float)*states('input_number.box_prix_hp')|float) + ((states('sensor.energie_quotidienne_home_hc')|float)*states('input_number.box_prix_hc')|float)) /1000 |round (3) }}"
      unit_of_measurement: "€"
      unique_id: energy_home_cout_daily

Alors je viens d’essayer avec un template qui me sert pas vraiment comme ca je risque pas de tout casser…

J’ai donc mis dans template et redemarrer

# Puissance coupure *1000
sensor: 
  - name: 'Puissance de coupure'
    unique_id: pcoup
    unit_of_measurement: 'VA' 
    state: "{{ (states('sensor.lixee_pcoup') | float(0) * 1000) | round(0) }}"

MAis avant j’avais un sensor qui s’appelait : sensor.pcoup

Je ne l’ai plus et il m’a crée un sensor : sensor.puissance_de_coupure

Donc je suis pas près de tout transferer s’il me garde par le unique_id…

Ou est l’erreur…

Merci