Probleme de valeur de template qui double

Bonjour,

J’ai un template qui me sert a calculer ma consommation d’electricité en euros (merci a l’auteur de ce tuto : Redirecting...). Elle est plutôt efficace car je n’ai que quelques centimes de difference par rapport au module Energy de HA.

Mais le problème est que régulièrement au reboot de HA cette entité double ou atteint une valeur que je ne comprend pas.

Ma configuration


[center]## System Information

version core-2024.11.3
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.12.4
os_name Linux
os_version 6.6.54-haos
arch x86_64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
HACS Data ok
GitHub API Calls Remaining 5000
Installed Version 2.0.1
Stage running
Available Repositories 1548
Downloaded Repositories 57
Home Assistant Cloud
logged_in true
subscription_expiration 11 novembre 2025 à 01:00
relayer_connected true
relayer_region eu-central-1
remote_enabled true
remote_connected true
alexa_enabled true
google_enabled false
cloud_ice_servers_enabled true
remote_server eu-central-1-15.ui.nabu.casa
certificate_status ready
instance_id 015be20c62b34338a102a0c8ef176524
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 13.2
update_channel stable
supervisor_version supervisor-2024.11.4
agent_version 1.6.0
docker_version 27.2.0
disk_total 468.7 GB
disk_used 26.0 GB
healthy true
supported true
host_connectivity true
supervisor_connectivity true
ntp_synchronized true
virtualization
board generic-x86-64
supervisor_api ok
version_api ok
installed_addons Terminal & SSH (9.15.0), Samba share (12.3.2), File editor (5.8.0), Zigbee2MQTT (1.42.0-2), Mosquitto broker (6.4.1), Samba Backup (5.2.0), SAIC MQTT Gateway (Python) (0.6.3), ESPHome Device Compiler (2024.11.2)
Dashboards
dashboards 4
resources 40
views 46
mode storage
Recorder
oldest_recorder_run 24 novembre 2024 à 10:20
current_recorder_run 3 décembre 2024 à 02:48
estimated_db_size 1997.13 MiB
database_engine sqlite
database_version 3.45.3
Xiaomi Miot Auto
component_version 0.7.25
can_reach_server ok
can_reach_spec ok
logged_accounts 0
total_devices 0
[/center]

Bonjour,
il faudrait nous montrer ton template. Je n’ai pas Facebook !

Un exemple:

      - name: 'Energie PC mois € hp+hc'
        unique_id: energy_pc_cout_mois
        unit_of_measurement: "€"
        state: "{{ (((states('sensor.energie_mensuelle_pc_hp')|float(0))*states('input_number.box_prix_hp')|float(0)) + ((states('sensor.energie_mensuelle_pc_hc')|float(0))*states('input_number.box_prix_hc')|float(0))) |round(3) }}"
        availability: "{{ states('sensor.energie_mensuelle_pc_hp')|is_number and states('sensor.energie_mensuelle_pc_hc')|is_number and states('input_number.box_prix_hp')|is_number and states('input_number.box_prix_hc')|is_number }}"

Il te faudrait utiliser l’option availability, pour éviter ce genre de problème.

Le voici :

        {% set hp = states('sensor.consommation_edf_hp') | float(default=0) | round(2) %}
        {% set hc = states('sensor.consommation_edf_hc') | float(default=0) | round(2) %}
        {% set chp = states('input_number.prix_achat_heures_pleines') | float(default=0) | round(5) %}
        {% set chc = states('input_number.prix_achat_heures_creuses') | float(default=0) | round(5) %}
        {% set abo = states('sensor.cout_abonnement_edf_journalier_2_cost') | float(default=0) | round(5) %}
        {{((hc*chc) + (hp*chp) + (abo)) | round(2) }}

Merci.

Il te faudrait adapter ton template pour vérifier si l’entité est unknow ou unavailable.3

            {% if states('sensor.other') in ('unknown','unavailable') %}
            {{ None }}
            {% else %}
            {{ states('sensor.other') }}
            {% endif %}

Merci j’essayerais de rajouter cette ligne à la fin.

Du coup j’ai recreer mon code directement en yaml dans file editor et je le verifie avec modele mais d’ou viens le « NONE » ?

  - sensor:
      - name: cout energy total jour HPHC
        unit_of_measurement: €
        state_class: total_increasing
        unique_id: cout_energy_total_jour_hphc
        state: >-
          {% set hp = states('sensor.consommation_edf_hp') | float(default=0) | round(2) %}
          {% set hc = states('sensor.consommation_edf_hc') | float(default=0) | round(2) %}
          {% set chp = states('input_number.prix_achat_heures_pleines') | float(default=0) | round(5) %}
          {% set chc = states('input_number.prix_achat_heures_creuses') | float(default=0) | round(5) %}
          {% set abo = states('sensor.cout_abonnement_edf_journalier_2_cost') | float(default=0) | round(5) %}
          {{((hc*chc) + (hp*chp) + (abo)) | round(2) }}
          {% if states('sensor.cout_energy_total_jour_hphc') in ('unknown','unavailable') %}
            {{ None }}
            {% else %}
            {{ states('sensor.cout_energy_total_jour_hphc') }}
            {% endif %}

et l’entité est a inconnu :

Je ne comprend pas ou est mon erreur
Merci.

Par template en YAML, utilise availability:. ta juste a mettre les entités que tu utilises dans le template. Quand tu reboot, les entités peuvent mettre du temps avant d’afficher la bonne valeur, avec availability, ca evite ce souci.

availability: "{{ states('sensor.energie_mensuelle_pc_hp')|is_number and states('sensor.energie_mensuelle_pc_hc')|is_number and states('input_number.box_prix_hp')|is_number and states('input_number.box_prix_hc')|is_number }}"

supprime ce code:

          {% if states('sensor.cout_energy_total_jour_hphc') in ('unknown','unavailable') %}
            {{ None }}
            {% else %}
            {{ states('sensor.cout_energy_total_jour_hphc') }}
            {% endif %}

Du coup

  - sensor:
      - name: cout energy total jour HPHC
        unit_of_measurement: "€"
        state_class: total_increasing
        unique_id: cout_energy_total_jour_hphc
        state: >-
          {% set hp = states('sensor.consommation_edf_hp') | float(default=0) | round(2) %}
          {% set hc = states('sensor.consommation_edf_hc') | float(default=0) | round(2) %}
          {% set chp = states('input_number.prix_achat_heures_pleines') | float(default=0) | round(5) %}
          {% set chc = states('input_number.prix_achat_heures_creuses') | float(default=0) | round(5) %}
          {% set abo = states('sensor.cout_abonnement_edf_journalier_2_cost') | float(default=0) | round(5) %}
          {{((hc*chc) + (hp*chp) + (abo)) | round(2) }}
        availability: "{{ states('sensor.energie_mensuelle_pc_hp')|is_number and states('sensor.energie_mensuelle_pc_hc')|is_number and states('input_number.box_prix_hp')|is_number and states('input_number.box_prix_hc')|is_number }}"

Du coup je suis en false, normale ?

oui, tu utilises met entité, il faut les changer par les tiennes dans availability :wink:

je t’ai fait le code :wink:

availability: "{{ states('sensor.consommation_edf_hp')|is_number and states('sensor.consommation_edf_hc')|is_number and states('input_number.prix_achat_heures_pleines')|is_number and states('input_number.prix_achat_heures_creuses')|is_number and states('sensor.cout_abonnement_edf_journalier_2_cost')|is_number }}"

Ha l’idiot :smiley:
En tout merci de ton aide. Je vais laisser passer quelques jours pour voir comment cela évolue.

1 « J'aime »

Je viens d’apprendre le availability qui m’a tellement manqué tout ce temps. Ca simplifie de beaucoup les templates.

Merci @WarC0zes

1 « J'aime »

Moi aussi j’en apprend tout les jours avec Home Assistant :stuck_out_tongue: