# \[jinja2\] Incrément dans un for

**URL:** <https://forum.hacf.fr/t/jinja2-increment-dans-un-for/47948>\
**Category:** Entraide Home Assistant\
**Tags:** aide, jinja\
**Created:** [Septembre 19, 2024, 7:54 UTC](https://forum.hacf.fr/t/jinja2-increment-dans-un-for/47948 "2024-09-19T19:54:32Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![dvergar](https://forum.hacf.fr/user_avatar/forum.hacf.fr/dvergar/32/74166_2.png) [@dvergar](https://forum.hacf.fr/u/dvergar)\
**Post date:** [Septembre 19, 2024, 7:54 UTC](https://forum.hacf.fr/t/jinja2-increment-dans-un-for/47948/1 "2024-09-19T19:54:32Z")

</div>

Bonjour,

Je suis confronté à un problème en jinja2 et notemment les incrémentations dans une boucle.  
J’ai plusieurs capteurs [(ceux-ci)](https://www.zigbee2mqtt.io/devices/TS0203.html) et j’aimerai qu’une valeur (x) soit incrémentée à chaque fois qu’un capteur passe du statut false à true.  
Voici ce que les capteurs exposent :

```auto
{
    "battery": 100,
    "battery_low": false,
    "contact": true,
    "last_seen": "2024-09-20T08:58:04+02:00",
    "linkquality": 72,
    "tamper": false,
    "voltage": 3000
}

```

c’est l’attribut «&nbsp;_contact_&nbsp;» qui m’intéresse et _{{ states(‹&nbsp;binary\_sensor.capteur\_a\_contact&nbsp;›) }}_ affiche «&nbsp;_on_&nbsp;» donc j’ajoute «&nbsp;_| bool_&nbsp;» pour obtenir un booléen.

De ce que j’ai pu lire, le code suivant ne fonctionne pas car on ne peut pas extraire directement une valeur depuis une boucle.

```auto
{# x == nombre de capteurs #}
{% set x = 0 %}
{% set a = states('binary_sensor.capteur_a_contact') | bool %}
{% set b = states('binary_sensor.capteur_b_contact') | bool %}
{% set c = states('binary_sensor.capteur_c_contact') | bool %}
{% set capteurs = [a, b, c] %}
{% for cap in capteurs %}
  {% if cap %}
  {% set count = x + 1 %}
  {% endif %}
{% endfor %}
{{ x }}

```

Ici, x est toujours égal à 0.

Comment est-ce que je peux améliorer ce code pour que x ait la bonne valeur svp ?

---

<div class="post-metadata">

**Author:** ![Giga77](https://forum.hacf.fr/user_avatar/forum.hacf.fr/giga77/32/113727_2.png) [@Giga77](https://forum.hacf.fr/u/Giga77)\
**Post date:** [Septembre 19, 2024, 7:56 UTC](https://forum.hacf.fr/t/jinja2-increment-dans-un-for/47948/2 "2024-09-19T19:56:23Z")

</div>

Salut

T’as essayé ça :

```auto
{# x == nombre de capteurs #}
{% set x = 0 %}
{% set a = states('binary_sensor.capteur_a') | bool %}
{% set b = states('binary_sensor.capteur_b') | bool %}
{% set c = states('binary_sensor.capteur_c') | bool %}
{% set capteurs = [a, b, c] %}
{% for cap in capteurs %}
  {% if cap %}
  {% set x = x + 1 %}
  {% endif %}
{% endfor %}
{{ x }}

```

---

<div class="post-metadata">

**Author:** ![Pulpy-Luke](https://forum.hacf.fr/user_avatar/forum.hacf.fr/pulpy-luke/32/137426_2.png) [@Pulpy-Luke](https://forum.hacf.fr/u/Pulpy-Luke)\
**Post date:** [Septembre 19, 2024, 8:07 UTC](https://forum.hacf.fr/t/jinja2-increment-dans-un-for/47948/3 "2024-09-19T20:07:16Z")

</div>

Salut

L’idée c’est de compter le nombre de binary\_sensor à l’état on ?  
Si oui, en très court

```auto
{{ expand('binary_sensor.capteur_a','binary_sensor.capteur_b','binary_sensor.capteur_c')
  | selectattr('state','eq','true') |list| count }} 

```

---

<div class="post-metadata">

**Author:** ![dvergar](https://forum.hacf.fr/user_avatar/forum.hacf.fr/dvergar/32/74166_2.png) [@dvergar](https://forum.hacf.fr/u/dvergar)\
**Post date:** [Septembre 20, 2024, 7:20 UTC](https://forum.hacf.fr/t/jinja2-increment-dans-un-for/47948/4 "2024-09-20T07:20:36Z")

</div>

Hello,

Ce que tu m’as donné ne fonctionne pas.  
Je pense que je n’avais pas fourni assez d’informations.

J’ai modifié le post initial pour ajouter ce qu’il manque 🙂

---

<div class="post-metadata">

**Author:** ![Pulpy-Luke](https://forum.hacf.fr/user_avatar/forum.hacf.fr/pulpy-luke/32/137426_2.png) [@Pulpy-Luke](https://forum.hacf.fr/u/Pulpy-Luke)\
**Post date:** [Septembre 20, 2024, 7:23 UTC](https://forum.hacf.fr/t/jinja2-increment-dans-un-for/47948/5 "2024-09-20T07:23:54Z")

</div>

> [@dvergar](#):
>
> c’est l’attribut « _contact_ » qui m’intéresse et _{{ states(‹ binary\_sensor.capteur\_a\_contact ›) }}_ affiche « _on_ » donc j’ajoute « _| bool_ » pour obtenir un booléen.

L’accès aux attributs ne marche pas comme ça il faut utiliser  
`states('binary_sensor.capteur_a','contact')`

Par ailleurs, que donne ton capteur dans les outils dev ? Il doit y avoir un état, et pas uniquement l’attribut

---

<div class="post-metadata">

**Author:** ![dvergar](https://forum.hacf.fr/user_avatar/forum.hacf.fr/dvergar/32/74166_2.png) [@dvergar](https://forum.hacf.fr/u/dvergar)\
**Post date:** [Septembre 20, 2024, 7:47 UTC](https://forum.hacf.fr/t/jinja2-increment-dans-un-for/47948/6 "2024-09-20T07:47:27Z")

</div>

si tu parles de l’onglet console dev dans Z2M, ça donne ça

```auto
const {battery, iasZoneAlarm, commandsOnOff, commandsLevelCtrl} = require('zigbee-herdsman-converters/lib/modernExtend');

const definition = {
    zigbeeModel: ['TS0203'],
    model: 'TS0203',
    vendor: '_TZ3000_6zvw8ham',
    description: 'Automatically generated definition',
    extend: [battery(), iasZoneAlarm({"zoneType":"generic","zoneAttributes":["alarm_1","alarm_2","tamper","battery_low"]}), commandsOnOff(), commandsLevelCtrl()],
    meta: {},
};

module.exports = definition;

```

---

<div class="post-metadata">

**Author:** ![Pulpy-Luke](https://forum.hacf.fr/user_avatar/forum.hacf.fr/pulpy-luke/32/137426_2.png) [@Pulpy-Luke](https://forum.hacf.fr/u/Pulpy-Luke)\
**Post date:** [Septembre 20, 2024, 7:53 UTC](https://forum.hacf.fr/t/jinja2-increment-dans-un-for/47948/7 "2024-09-20T07:53:50Z")

</div>

Par du tout (il s'agit des entité donc purement HA), regarde là en bas à gauche, en fonction de l'affichage :  
 ![image](https://forum.hacf.fr/uploads/default/original/3X/c/9/c9d606a2f5609cbff61335192971acbf9c628f83.png) ou là

 ![image](https://forum.hacf.fr/uploads/default/original/3X/1/4/14d64597c94cd3adcefb99b98e34f37f966188e9.png)

ce qui donne

 ![image](https://forum.hacf.fr/uploads/default/original/3X/9/f/9f85784ebc212e692d9f66dfbea74fd42e1d7043.png)  
Et partage les 3 colonnes (entité/état/attributs)

---

<div class="post-metadata">

**Author:** ![dvergar](https://forum.hacf.fr/user_avatar/forum.hacf.fr/dvergar/32/74166_2.png) [@dvergar](https://forum.hacf.fr/u/dvergar)\
**Post date:** [Septembre 20, 2024, 8:17 UTC](https://forum.hacf.fr/t/jinja2-increment-dans-un-for/47948/8 "2024-09-20T08:17:14Z")

</div>

ok, autant pour moi  
voici ce que ça donne pour un capteur

 ![image](https://forum.hacf.fr/uploads/default/original/3X/3/c/3c7eeb6c5f774974a07126423bc67f2fba33dfd5.png)

j'ai essayé ceci, mais ça m'affiche toujours 0 alors que les capteur cuisine et A sont ouverts, le capteur ouverture est fermé

```auto
{{ expand('binary_sensor.capteur_cuisine','binary_sensor.capteur_A', 'binary_sensor.capteur_ouverture')
  | selectattr('door','eq','true') |list| count }}

```

---

<div class="post-metadata">

**Author:** ![Pulpy-Luke](https://forum.hacf.fr/user_avatar/forum.hacf.fr/pulpy-luke/32/137426_2.png) [@Pulpy-Luke](https://forum.hacf.fr/u/Pulpy-Luke)\
**Post date:** [Septembre 20, 2024, 8:23 UTC](https://forum.hacf.fr/t/jinja2-increment-dans-un-for/47948/9 "2024-09-20T08:23:28Z")

</div>

Ok, donc il faut prendre le nom affiché dans la 1ere colonne, donc

- binary\_sensor.capteur\_cuisine\_contact
- comme la liste est figée, pas besoin de filtrer sur le type door
- par contre il faut bien son etat quand même

Donc ça c’est plus cohérent

```auto
{{ expand('binary_sensor.capteur_cuisine_contact')
  | selectattr('state','eq','on') |list| count }}

```

Et tu ajoutes ensuite les autres noms

---

<div class="post-metadata">

**Author:** ![dvergar](https://forum.hacf.fr/user_avatar/forum.hacf.fr/dvergar/32/74166_2.png) [@dvergar](https://forum.hacf.fr/u/dvergar)\
**Post date:** [Septembre 20, 2024, 8:25 UTC](https://forum.hacf.fr/t/jinja2-increment-dans-un-for/47948/10 "2024-09-20T08:25:26Z")

</div>

Ça marche nickel, merci beaucoup 🙂
