Besoin d'aide pour régler des erreurs de Template

Bonjour à tous,

Je me permets de solliciter de l’aide pour régler quelques problèmes de template que je n’arrive malheuresement pas à traiter par moi-même…

La situation:
J’ai plusieurs templates dans mes fichiers de config récupérés deci delà sur le web au fur et à mesure de ma configuration.
Les templates en question fonctionnent tous sans problème, mais j’ai une liste longue comme le bras de messages d’erreurs dans mon log car ils ne répondent pas aux nouvelles « normes » instaurées lors d’une release ayant eu lieu en début d’année (Avril je crois?)

J’ai à plusieurs reprises essayé de comprendre ce qui n’allait pas et ce que je devais corriger en lisant ce forum, la release note, le forum US, le wiki,… mais je n’ai jamais réussi à comprendre clairement la logique.

Souhaitant nettoyer un peu mon log de ces erreurs (bah ouais c’est pas beau tout ce orange et tout ce rouge) je sollicite votre aide.

Le but serait que je post une à une les erreurs et les templates en questions et que quelques âmes charitables m’aident à apporter les corrections nécessaires…
Je pense qu’en en corrigeant 3 ou 4, j’assimilerais la logique et arriverais à traiter le reste par la suite…

Voici le 1er warning:

* Template variable warning: 'dict object' has no attribute 'HCHP' when rendering '{{ ((state_attr("sensor.wifinfo","TIC").HCHP |replace(",",".") | float) / 1000)| round(2) }}'

Et voici le sensor incriminé:

      # Energy Total + attr HP/HC
      teleinfo_energy:
        value_template: '{{ ((( state_attr("sensor.wifinfo","TIC").HCHC + state_attr("sensor.wifinfo","TIC").HCHP ) | float) / 1000) | round(2) }}'
        unit_of_measurement: "kWh"
        attribute_templates:
          Index HP: >-
            {{ ((state_attr("sensor.wifinfo","TIC").HCHP |replace(",",".") | float) / 1000)| round(2) }}
          Index HC: >-
            {{ ((state_attr("sensor.wifinfo","TIC").HCHC |replace(",",".") | float) / 1000) | round(2) }}
        friendly_name: Global

Merci d’avance pour votre aide, et espérant que cela puisse être utile à plusieurs d’entre nous…

stp copier/coller données… ton sensor avec atribs

Est-ce que cela aide?

Merci d’avance :slight_smile:

non…la source: sensor.wifinfo
et le total de ton template, ce que je voix manque des choses, p.e. maintenant il faut

template:
   - sensor
     name: teleinfo_energy
     state: {{
     attributes:
       Index HP: > 
etcetc

En réalité l’ancien méthode marche encore ce que j’a vu chez moi

Ok désolé, je n’avais pas compris…

Voici la totalité du Sensor + Template:

# Teleinfo

#### Wemos D1 Mini + PitInfo : Teleinfo
#    - sensor = Energy Today (consommation journalière)
#    - attributs = tout le reste du JSON
#    - https://www.canaletto.fr/post/home-assistant-esp-and-teleinfo


    - name: 'Wifinfo'
      state_topic: "maison/tasmota/wifinfo_teleinfo/tele/SENSOR"
      value_template: "{{ ((value_json['ENERGY'].Today) | float) | round(2) }}"
      unit_of_measurement: "kWh"
      device_class: energy
      availability_topic: "maison/tasmota/wifinfo_teleinfo/tele/LWT"
      payload_available: "Online"
      payload_not_available: "Offline"
      json_attributes_topic: "maison/tasmota/wifinfo_teleinfo/tele/SENSOR"
      qos: 1

    - name: 'Wifinfo TIC'
      state_topic: "maison/tasmota/wifinfo_teleinfo/tele/SENSOR"
      value_template: "{{ ((value_json['TIC'].Today) | float) | round(2) }}"
      unit_of_measurement: "kWh"
      device_class: energy
      availability_topic: "maison/tasmota/wifinfo_teleinfo/tele/LWT"
      payload_available: "Online"
      payload_not_available: "Offline"
      json_attributes_topic: "maison/tasmota/wifinfo_teleinfo/tele/SENSOR"
      qos: 1

sensor:
  - platform: template
    sensors:

      #
      #### Teleinfo attributes from wifinfo
      #    
        #
      # Power
      teleinfo_puissance:
        value_template: '{{ (state_attr("sensor.wifinfo","ENERGY").Power | float) | round(2) }}'
        unit_of_measurement: "W"
        friendly_name: Puissance     
      #
      # EnergyHC
      teleinfo_energyhc:
        value_template: '{{ ((state_attr("sensor.wifinfo","TIC").HCHC | float) / 1000) | round(2) }}'
        unit_of_measurement: "kWh"
        friendly_name: Heures creuses
        
      #
      # EnergyHP
      teleinfo_energyhp:
        value_template: '{{ ((state_attr("sensor.wifinfo","TIC").HCHP | float) / 1000) | round(2) }}'
        unit_of_measurement: "kWh"
        friendly_name: Heures pleines
      #
      # Energy Total + attr HP/HC
      teleinfo_energy:
        value_template: '{{ ((( state_attr("sensor.wifinfo","TIC").HCHC + state_attr("sensor.wifinfo","TIC").HCHP ) | float) / 1000) | round(2) }}'
        unit_of_measurement: "kWh"
        attribute_templates:
          Index HP: >-
            {{ ((state_attr("sensor.wifinfo","TIC").HCHP |replace(",",".") | float) / 1000)| round(2) }}
          Index HC: >-
            {{ ((state_attr("sensor.wifinfo","TIC").HCHC |replace(",",".") | float) / 1000) | round(2) }}
        friendly_name: Global
      #
      # Energy yesterday
      teleinfo_energy_yesterday:
        value_template: '{{ ( state_attr("sensor.wifinfo","ENERGY").Yesterday ) |int }}'
        unit_of_measurement: "kWh"
        friendly_name: Conso. veille
      #
      # Energy total (year)
      teleinfo_energy_total:
        value_template: '{{ ( state_attr("sensor.wifinfo","ENERGY").Total ) |int }}'
        unit_of_measurement: "kWh"
        friendly_name: Conso. annuelle
      #
      # Periode Tarifaire
      teleinfo_periode_tarifaire:
        value_template: '{{ (state_attr("sensor.wifinfo","TIC").PTEC) |replace("..","") }}'
        friendly_name: Période tarifaire
        
      hp_cost_today:
        friendly_name: 'HP Cost Today'
        value_template: "{{ (states('sensor.daily_energyhp_consumption')| float * states('input_number.hp_energy_cost')|float + states('input_number.hp_daily_cost')| float)|round(2) }}"
        unit_of_measurement: "€"

      hc_cost_today:
        friendly_name: 'HC Cost Today'
        value_template: "{{ (states('sensor.daily_energyhc_consumption')| float * states('input_number.hc_energy_cost')|float + states('input_number.hc_daily_cost')| float)|round(2) }}"
        unit_of_measurement: "€"

      cost_today:
        friendly_name: "Coût journée en cours"
        value_template: "{{ (states('sensor.hp_cost_today')| float + states('sensor.hc_cost_today')| float)|round(2) }}"
        unit_of_measurement: "€"

      hp_cost_week:
        friendly_name: 'HP coût semaine'
        value_template: "{{ (states('sensor.weekly_energyhp_consumption')| float * states('input_number.hp_energy_cost')|float + (states('input_number.hp_daily_cost') | float * 7) | float)|round(2) }}"
        unit_of_measurement: "€"

      hc_cost_week:
        friendly_name: 'HC coût semaine'
        value_template: "{{ (states('sensor.weekly_energyhc_consumption')| float * states('input_number.hc_energy_cost')|float + (states('input_number.hc_daily_cost')  | float * 7) | float)|round(2) }}"
        unit_of_measurement: "€"

      cost_week:
        friendly_name: "Coût semaine en cours"
        value_template: "{{ (states('sensor.hp_cost_week')| float + states('sensor.hc_cost_week')| float)|round(2) }}"
        unit_of_measurement: "€"

      hp_cost_month:
        friendly_name: 'HP coût mois'
        value_template: "{{ (states('sensor.monthly_energyhp_consumption')| float * states('input_number.hp_energy_cost')|float + states('input_number.hp_daily_cost') | float * 30)|round(2) }}"
        unit_of_measurement: "€"

      hc_cost_month:
        friendly_name: 'HC coût mois'
        value_template: "{{ (states('sensor.monthly_energyhc_consumption')| float * states('input_number.hc_energy_cost')|float + states('input_number.hc_daily_cost') | float * 30)|round(2) }}"
        unit_of_measurement: "€"

      cost_month:
        friendly_name: "Coût mois en cours"
        value_template: "{{ (states('sensor.hp_cost_month')| float + states('sensor.hc_cost_month')| float)|round(2) }}"
        unit_of_measurement: "€"

      hp_cost_year:
        friendly_name: 'HP coût année'
        value_template: "{{ (states('sensor.yearly_energyhp_consumption')| float * states('input_number.hp_energy_cost')|float + states('input_number.hp_daily_cost') | float * 365)|round(2) }}"
        unit_of_measurement: "€"

      hc_cost_year:
        friendly_name: 'HC coût année'
        value_template: "{{ (states('sensor.yearly_energyhc_consumption')| float * states('input_number.hc_energy_cost')|float + states('input_number.hc_daily_cost') | float * 365)|round(2) }}"
        unit_of_measurement: "€"

      cost_year:
        friendly_name: "Coût année en cours"
        value_template: "{{ (states('sensor.hp_cost_year')| float + states('sensor.hc_cost_year')| float)|round(2) }}"
        unit_of_measurement: "€"


      cost_today_display:
        friendly_name: "Aujourd'hui display"
        value_template: "{{ (states('input_number.cumulative_energy_cost')| float)|round(2) }}"
        unit_of_measurement: "€"

      cost_yesterday_display:
        friendly_name: "Hier"
        value_template: "{{ (states('input_number.yesterday_energy_cost')| float)|round(2) }}"
        unit_of_measurement: "€"

…donc…example de chez moi
Sensor:
image

template:

template:
  - sensor:
      - name: teletic
        state: >
            {{ (state_attr('input_text.test','TIC').HCHP | float + state_attr('input_text.test','TIC').HCHP | float) }}
        attributes:
          HCHPTIC: "{{ state_attr('input_text.test','TIC').HCHP | float }}"

donne:

correction…sensor manqué (je suis aveugle de temps en temp

Comme t’as vu , j’ai utilisé la nouvelle structure et ça marche pour des attribs

EDIT: J’ai aussi recherché d’anciennes example et hônnetement, la tienne me semble bon

EDIT2:
et oui…ça marche aussi chez moi

  - platform: template
    sensors:
      teletic2:
        friendly_name: "teletic2"
        value_template: > 
            {{ state_attr('input_text.test','TIC').HCHP | float + state_attr('input_text.test','TIC').HCHC | float }}
        attribute_templates:
          HCHPTIC: "{{ state_attr('input_text.test','TIC').HCHP | float }}"

Bonjour,

J’ai testé mais j’ai toujours le message d’erreur de mon côté…
Ta méthode et ma méthode fonctionnenet mais toujours le message d’erreur…

J’ai reproduit le soucis mais c’est un peux curieux.
Je pense que c’est les 'au lieu des "
essaie ça

      teleinfo_energy:
        value_template: >
           {{ ((( state_attr('sensor.wifinfo','TIC').HCHC + state_attr('sensor.wifinfo','TIC').HCHP ) | float(0)) / 1000) | round(2) }}'
        unit_of_measurement: 'kWh'
        attribute_templates:
          Index HP: >-
            {{ ((state_attr('sensor.wifinfo','TIC').HCHP | float(0)) / 1000)| round(2) }}
          Index HC: >-
            {{ ((state_attr('sensor.wifinfo','TIC').HCHC | float(0)) / 1000) | round(2) }}
        friendly_name: Global

bonjour, je me permets de rebondir sur ce sujet car je récupère mes infos de téléinfo via le json de mon wifinfo

template récupéré sur # GitHub - rene-d/wifinfo: Module Wi-Fi de téléinformation et adapté vu que je n’ai pas HC/HP

mon problème est que parfois, la récupération des infos doit déconner et au lieu de me retourner mon index, ça me retourne 0, de ce fait, par la suite le « cycle » fait que ça considère que j’ai consommé « index - ancien index » = « index - 0 » ce qui me fait n’importe quoi niveau data

Est-il possible de rajouter dans le template d’ignorer la valeur si c’est = 0 ?

Merci

Edit : google m’a aidé en fait je prends la valeur si c’est > 0 et sinon je reprends la valeur actuelle, ça devrait faire le boulot

value_template: '{{ (state_attr("sensor.teleinfo","BASE")|float(0))/1000 if (state_attr("sensor.teleinfo","BASE")|float(0))/1000 > 0 else states("sensor.teleinfo_energy") }}'
sensor:
  - platform: rest
    name: TeleInfo
    unique_id: energy.teleinfo
    resource: http://xx.xx.xx.xx/json
    username: XXXXXXXXXX
    password: XXXXXXXXXX
    authentication: basic
    json_attributes:
      - "timestamp"
      - "ADCO"
      - "OPTARIF"
      - "ISOUSC"
      - "BASE"
      - "PTEC"
      - "IINST"
      - "IMAX"
      - "PAPP"
      - "HHPHC"
      - "MOTDETAT"
    headers:
      User-Agent: Home Assistant
      Content-Type: application/json
    value_template: "{{ value_json['ADCO'] }}"
    device_class: energy

  - platform: template
    sensors:
      #
      # Power
      teleinfo_puissance:
        friendly_name: "Puissance"
        unique_id: energy.papp
        value_template: '{{ state_attr("sensor.teleinfo","PAPP") }}'
        unit_of_measurement: "VA"

      #
      # Intensité instantanée
      teleinfo_intensite:
        friendly_name: "Intensité"
        unique_id: energy.iinst
        value_template: '{{ state_attr("sensor.teleinfo","IINST")|int(0) }}'
        unit_of_measurement: "A"
      #
      # EnergyBase
      teleinfo_energy:
        friendly_name: "Index"
        unique_id: energy.base
        value_template: '{{ (state_attr("sensor.teleinfo","BASE")|float(0))/1000 }}'
        unit_of_measurement: "kWh"
      #
      # Periode Tarifaire
      teleinfo_periode_tarifaire:
        friendly_name: "Période"
        unique_id: energy.ptec
        value_template: '{{ (state_attr("sensor.teleinfo","PTEC")) |replace("..","") }}'
      #
        
utility_meter:
  energy_total_usage_daily:
    source: sensor.teleinfo_energy
    cycle: daily
  energy_total_usage_weekly:
    source: sensor.teleinfo_energy
    cycle: weekly
  energy_total_usage_monthly:
    source: sensor.teleinfo_energy
    cycle: monthly
  energy_total_usage_quarterly:
    source: sensor.teleinfo_energy
    cycle: quarterly
  energy_total_usage_yearly:
    source: sensor.teleinfo_energy
    cycle: yearly

Ton sensor a un valuer 0 par defaut si pas de valeur est présenté, je pense que ça peut arriver quand le json n’est pas dispo
Tu peux ajouter ça dans le sensor avec base…
Essaie ça (préf. autre sensor sans impacte) et teste le en changer le valeur dans le json manuellement vers 0 … et par enlever le json en total

availability: "{{ state_attr("sensor.teleinfo","BASE")|float > 0 }}