Je souhaite faire un truc tout bête dans un template mais je ne trouve pas la syntaxe correcte…
J’ai un template power general et je veux additionner toutes mes entités mais en vérifiant avant que chaque entité est un nombre pour ne pas bloquer le template ou les calculs sous-jacents…
Mon code qui marche pas
state: >
{% set state = 0 |float %}
# cave a vin
{% set state_temp = states('sensor.wallplug_cave_a_vin_electric_consumption_w') %}
{% if is_number(state_temp) %}
{% state += state_temp |float %}
{% endif %}
# congel garage
{% set state_temp = states('sensor.wallplug_congel_garage_power') %}
{% if is_number(state_temp) %}
{% state += state_temp |float %}
{% endif %}
# frigo garage
{% set state_temp = states('sensor.wallplug_frigo_power') %}
{% if is_number(state_temp) %}
{% state += state_temp |float %}
{% endif %}
# lave linge
{% set state_temp = states('sensor.wallplug_lave_linge_power') %}
{% if is_number(state_temp) %}
{% set state += state_temp |float %}
{% endif %}
# lave vaisselle
{% set state_temp = states('sensor.wallplug_lave_vaisselle_power') %}
{% if is_number(state_temp) %}
{% set state += state_temp |float %}
{% endif %}
# seche linge
{% set state_temp = states('sensor.wallplug_seche_linge_power') %}
{% if is_number(state_temp) %}
{% set state += state_temp |float %}
{% endif %}
# four
{% set state_temp = states('sensor.rt2_t7_puissance_four') %}
{% if is_number(state_temp) %}
{% set state += state_temp |float %}
{% endif %}
# plaque induction
{% set state_temp = states('sensor.rt2_t2_puissance_plaque_induction') %}
{% if is_number(state_temp) %}
{% set state += state_temp |float %}
{% endif %}
{{state}}
state: >
{% set state = 0 | float %}
# cave a vin
{% set state_temp = states('sensor.wallplug_cave_a_vin_electric_consumption_w') %}
{% if is_number(state_temp) %}
{% set state = state + state_temp | float %}
{% endif %}
# congel garage
{% set state_temp = states('sensor.wallplug_congel_garage_power') %}
{% if is_number(state_temp) %}
{% set state = state + state_temp | float %}
{% endif %}
# frigo garage
{% set state_temp = states('sensor.wallplug_frigo_power') %}
{% if is_number(state_temp) %}
{% set state = state + state_temp | float %}
{% endif %}
# lave linge
{% set state_temp = states('sensor.wallplug_lave_linge_power') %}
{% if is_number(state_temp) %}
{% set state = state + state_temp | float %}
{% endif %}
# lave vaisselle
{% set state_temp = states('sensor.wallplug_lave_vaisselle_power') %}
{% if is_number(state_temp) %}
{% set state = state + state_temp | float %}
{% endif %}
# seche linge
{% set state_temp = states('sensor.wallplug_seche_linge_power') %}
{% if is_number(state_temp) %}
{% set state = state + state_temp | float %}
{% endif %}
# four
{% set state_temp = states('sensor.rt2_t7_puissance_four') %}
{% if is_number(state_temp) %}
{% set state = state + state_temp | float %}
{% endif %}
# plaque induction
{% set state_temp = states('sensor.rt2_t2_puissance_plaque_induction') %}
{% if is_number(state_temp) %}
{% set state = state + state_temp | float %}
{% endif %}
{{ state }}
Pourquoi ne pas utiliser une entrée/helper? Tu peux utiliser « Combiner l’état de plusieurs capteurs ». Paramètres > Appareils et services Onglet Entrées
Pour ce coup oui !!! Pas pensé
Mais j’en ai un autre à faire avec addition et soustraction…
EDIT : Du coup il faut vraiment que je vérifie, pour ne pas avoir d’erreur au démarrage de HA, le template étant évalué avant la mise à jour des capteurs « sources ». J’ai une erreur « unknown » dans certains au démarrage…
availability: "{{ states('sensor.xxxxxxxxx') not in ['unknown', 'unavailable', 'none'] }}"
pour plusieurs entités:
availability: "{{ states('sensor.0x54ef4410004ea988_energy')|is_number and states('sensor.0x54ef4410005647e8_energy')|is_number and states('sensor.0xa4c138b1bfb7f7ef_energy')|is_number }}"
Euh oui pour le float. Mais si on a un état « unknown » ou autre texte, il fait quoi ?
Le float(0) renvoie 0 en cas d’autre chose qu’un nombre.
Du coup ça peut fausser les historiques…
Je préfererais faire le check is_number sur chaque valeur et ne pas évaluer ou aditionner si ce n’est pas un nombre…
Oui c’est bien ce que je dis et c’est bien la cas ici => une simple addition
Après il n’y a rien d’obligatoire mais faire un template avec 5 x le combo set/is_number/if/somme, je trouve ça un peu lourd
Là effectivement on peut discuter… des moyennes sur un nombre de valeurs variables, j’ai aussi du mal : comparer la moyenne obtenu avec 3 valeurs et obtenue avec 5 valeurs dans le même template, je ne suis pas certain que ce soit pertinent. Et puis quand tout le monde est à 0 ou unknown, ça ne veut carrément plus rien dire si on les exclues
OK
C’est lourd mais du coup je préfère checker comme ça. Au moins pas de sujet et les capteurs sous jacents ne sont pas rafraichis tant que le capteur n’es pas available
availability: "{{ states('sensor.piscine_puissance') | is_number and
states('sensor.electromenager_puissance') | is_number and
states('sensor.eclairage_puissance') | is_number and
states('sensor.domotique_puissance') | is_number and
states('sensor.eau_chaude_puissance') | is_number and
states('sensor.chauffage_puissance') | is_number
}}"
Non ! Heuresement
Mais quand des templates sont basées sur des entités provenant d’intégration, il peut arriver que les intégrations fournissent au démarrage ou dans certains cas des valeurs éronnées ou des unvailable… Au moins c’est propre avec la propriété availability