Hello,
J’ai plusieurs erreurs liées a mes volets dans les journaux HA, je n’arrive pas a trouver un correctif:
TemplateError('ZeroDivisionError: division by zero') while processing template 'Template<template=({% set ns = namespace(total = 0, count = (states['cover.volets_suite_parentale'].attributes.entity_id | length)) %} {%- for volet in states['cover.volets_suite_parentale'].attributes.entity_id %} {% set ns.total = ns.total + (states[volet.replace("cover.volet_", "sensor.position_")].state | int) %} {%- endfor %} {{ ((ns.total / ns.count) | int) }}) renders=4>' for attribute '_attr_native_value' in entity 'sensor.group_volets_suite'
Template variable warning: 'homeassistant.util.read_only_dict.ReadOnlyDict object' has no attribute 'entity_id' when rendering '{% set ns = namespace(total = 0, count = (states['cover.volets_suite_parentale'].attributes.entity_id | length)) %} {%- for volet in states['cover.volets_suite_parentale'].attributes.entity_id %} {% set ns.total = ns.total + (states[volet.replace("cover.volet_", "sensor.position_")].state | int) %} {%- endfor %} {{ ((ns.total / ns.count) | int) }}'
Et enfin:
Error while processing template: Template<template=({% set ns = namespace(total = 0, count = (states['cover.volets_suite_parentale'].attributes.entity_id | length)) %} {%- for volet in states['cover.volets_suite_parentale'].attributes.entity_id %} {% set ns.total = ns.total + (states[volet.replace("cover.volet_", "sensor.position_")].state | int) %} {%- endfor %} {{ ((ns.total / ns.count) | int) }}) renders=2>
Voici le code pour calculer les % du groupe de volets de la suite parentale:
- platform: template
sensors:
group_volets_suite:
friendly_name: "Groupe Suite Parentale"
unit_of_measurement: "%"
value_template: >
{% set ns = namespace(total = 0, count = (states['cover.volets_suite_parentale'].attributes.entity_id | length)) %}
{%- for volet in states['cover.volets_suite_parentale'].attributes.entity_id %}
{% set ns.total = ns.total + (states[volet.replace("cover.volet_", "sensor.position_")].state | int) %}
{%- endfor %}
{{ ((ns.total / ns.count) | int) }}
Une idée de ce que je doit corriger svp? Merci.
Salut @Galadan , comme indiqué, impossible de faire une division par 0.
Donc tu fais un IF juste avant pour tester que ns.count > 0
1 « J'aime »
J’ai mis ça
{{ (ns.total / ns.count) if ns.count > 0 else 0 }}
ça semble bon pour cette erreur.
Me reste:
Template variable warning: 'homeassistant.util.read_only_dict.ReadOnlyDict object' has no attribute 'entity_id' when rendering '{% set ns = namespace(total = 0, count = (states['cover.volets_suite_parentale'].attributes.entity_id | length)) %} {%- for volet in states['cover.volets_suite_parentale'].attributes.entity_id %} {% set ns.total = ns.total + (states[volet.replace("cover.volet_", "sensor.position_")].state | int) %} {%- endfor %} {{ (ns.total / ns.count) if ns.count > 0 else 0 }}'
Ton algo n’est pas bon.
Count c’est le nombre de volets dans ton groupe cover.volets_suite_parentale
Donc si effectivement tu evites la division par 0 à la fin, il te reste quand même un souci avec la partie juste avant : ta boucle for :
{%- for volet in states['cover.volets_suite_parentale'].attributes.entity_id %}
Tu vas y chercher l’attribut entity_id, qui justement n’existe pas (comme ça remonte 0 juste avant à tous les coups ton groupe est vide)
Du point de vue mathématique, c’est étrange aussi : la somme des positions divisée par le nombre de volets ?
1 « J'aime »
En fait ce sensor est censé remonté le % d’ouverture des volets de ce groupe.
Je m’y prends surement mal ^^
Alors commence par regarder dans les outils de de, si le groupe existe bien et quels sont ses attributs
Par ex:
Merci de ton aide.
J’ai pas grand chose:
Les infos viennent de MQTT, voici les sensors des volets en indiv (si ça peu aider):
- platform: template
covers:
volet_baie_suite:
friendly_name: "Baie Chambre Parentale"
open_cover:
service: mqtt.publish
data_template:
topic: 'nodered/volet/baie_Suite/set'
payload: 'up'
close_cover:
service: mqtt.publish
data_template:
topic: 'nodered/volet/baie_Suite/set'
payload: 'down'
stop_cover:
service: mqtt.publish
data_template:
topic: 'nodered/volet/baie_Suite/set'
payload: 'stop'
set_cover_position:
service: mqtt.publish
data_template:
topic: 'nodered/volet/baie_Suite/set'
payload: "{{position}}"
Et un group:
- platform: group
name: Volets Suite Parentale
entities:
- cover.volet_baie_suite
- cover.volet_pano_p
- cover.volet_sdb_p
Par contre j’ai ces sensor qui recupere le % d’ouverture des volets:
- name: "position_pano_P"
state_topic: "nodered/volet/pano_P/get"
unit_of_measurement: '%'
Ok donc ton groupe est dans la catégorie sensor (il commence par sensor.xxxxxxxxxxx) et pas (cover.xxxxxxxxxxxx comme ton code), et tu n’as pris le bon nom non plus group_volets_suite_parentale versus volets_suite_parentale 
sensor:
- platform: group
name: Volets Suite Parentale
entities:
- cover.volet_baie_suite
- cover.volet_pano_p
- cover.volet_sdb_p
ce qu’il faut c’est group cover !
cover:
- platform: group
name: Volets Suite Parentale
entities:
- cover.volet_baie_suite
- cover.volet_pano_p
- cover.volet_sdb_p
Et pas certain qu’il soit obligatoire de passer pas une nouvelle entité pour récupérer la position. C’est déjà une info dispo dans les cover normalement
Je suis complètement paumé mdr
J’ai changé le nom du sensor qui devrait recupérer la valeur de position d’un groupe de volet pour m’y retrouver plus facilement:
sensors:
position_volets_chambres_amis:
friendly_name: "Position volets Chambres d'amis"
unit_of_measurement: "%"
value_template: >
{% set ns = namespace(total = 0, count = (states['cover.volets_chambres_d_amis'].attributes.entity_id | length)) %}
{%- for volet in states['cover.volets_chambres_d_amis'].attributes.entity_id %}
{% set ns.total = ns.total + (states[volet.replace("cover.volet_", "sensor.position_")].state | int) %}
{%- endfor %}
{{ (ns.total / ns.count) if ns.count > 0 else 0 }}
Donc le group de volets correspond à ça:
- platform: group
name: Volets Chambres d'Amis
entities:
- cover.volet_chambre_jardin
- cover.volet_chambre_terrasse
Et après, je suis perdu sur ce que je doit modifier ^^
Moi aussi j’essaye de suivre 
La bonne nouvelle c’est que le groupe est maintenant correct, il a ce qu’il faut pour ton calcul

Maintenant affiche :
- les 2 entités cover du groupe (pour voir ce que ça contient :
cover.volet_chambre_jardin
et cover.volet_chambre_terrasse
- les 2 entités qui sont en principe la récupération de la position:
sensor.position_volet_chambre_jardin
et sensor.position_volet_chambre_terrasse
idem pour chambre terrasse
ok donc en principe le template position_volets_chambres_amis fonctionne
J’ai encore ce message:
Template variable warning: 'homeassistant.util.read_only_dict.ReadOnlyDict object' has no attribute 'entity_id' when rendering '{% set ns = namespace(total = 0, count = (states['cover.volets_suite_parentale'].attributes.entity_id | length)) %} {%- for volet in states['cover.volets_suite_parentale'].attributes.entity_id %} {% set ns.total = ns.total + (states[volet.replace("cover.volet_", "sensor.position_")].state | int) %} {%- endfor %} {{ (ns.total / ns.count) if ns.count > 0 else 0 }}'
Logique tu as corrigé…

alors que
non non, j’ai pas le message pour chambre d’amis mais pour tous les autres lol alors que j’ai le meme code…
attends je le remet j’ai du zapper un truc:
- platform: template
sensors:
position_volets_chambres_amis:
friendly_name: "Position volets Chambres d'amis"
unit_of_measurement: "%"
value_template: >
{% set ns = namespace(total = 0, count = (states['cover.volets_chambres_d_amis'].attributes.entity_id | length)) %}
{%- for volet in states['cover.volets_chambres_d_amis'].attributes.entity_id %}
{% set ns.total = ns.total + (states[volet.replace("cover.volet_", "sensor.position_")].state | int) %}
{%- endfor %}
{{ (ns.total / ns.count) if ns.count > 0 else 0 }}
- platform: template
sensors:
position_volets_suite:
friendly_name: "Position volets Suite Parentale"
unit_of_measurement: "%"
value_template: >
{% set ns = namespace(total = 0, count = (states['cover.volets_suite_parentale'].attributes.entity_id | length)) %}
{%- for volet in states['cover.volets_suite_parentale'].attributes.entity_id %}
{% set ns.total = ns.total + (states[volet.replace("cover.volet_", "sensor.position_")].state | int) %}
{%- endfor %}
{{ (ns.total / ns.count) if ns.count > 0 else 0 }}
C’est pas le code qui est faux (enfin si mais c’est pas grave)
Tu as corrigé le groupe cover.volets_chambre_d_amis
qui sert pour le calcul de position_volets_chambres_amis
Corrige les autres groupes …
ben oui mais le truc c’est que j’ai corrigé les autres groupes en même temps ^^
Je vois pas ce que je doit toucher…
Voici les autres groupes de volets:
- platform: group
name: all_covers
entities:
- cover.volet_chambre_jardin
- cover.volet_chambre_terrasse
- cover.volet_baie_suite
- cover.volet_pano_p
- cover.volet_sdb_p
- cover.volet_entree
- cover.volet_cuisine
- cover.volet_fixe_terrasse
- cover.volet_fixe_jardin
- cover.volet_baie_3m
- cover.volet_baie_2m
- platform: group
name: Volets Chambres d'Amis
entities:
- cover.volet_chambre_jardin
- cover.volet_chambre_terrasse
- platform: group
name: Volets Suite Parentale
entities:
- cover.volet_baie_suite
- cover.volet_pano_p
- cover.volet_sdb_p
- platform: group
name: Volets Salon
entities:
- cover.volet_entree
- cover.volet_cuisine
- cover.volet_fixe_terrasse
- cover.volet_fixe_jardin
- cover.volet_baie_3m
- cover.volet_baie_2m
- platform: group
name: Volets Coté Terrasse
entities:
- cover.volet_entree
- cover.volet_chambre_terrasse
- cover.volet_fixe_terrasse
- cover.volet_baie_suite
- cover.volet_baie_3m
- platform: group
name: Volets Coté Jardin
entities:
- cover.volet_chambre_jardin
- cover.volet_cuisine
- cover.volet_pano_p
- cover.volet_fixe_jardin
- cover.volet_sdb_p
- cover.volet_baie_2m
Alors redémarre HA pour tout resynchroniser
J’ai fait 3 fois et toujours pareil…
Alors copie le code dans les outils de dev => modèles pour décomposer
{% set ns = namespace(total = 0, count = (states['cover.volets_suite_parentale'].attributes.entity_id | length)) %}
##debug
{{ns.total}}
{{ns.count}}
##calcul
{%if count > 0 %}
{%- for volet in states['cover.volets_suite_parentale'].attributes.entity_id %}
{% set ns.total = ns.total + (states[volet.replace("cover.volet_", "sensor.position_")].state | int(default=0)) %}
{%- endfor %}
{{ ns.total / ns.count }}
{% else %}
0
{% endif %}