Conversion string et float

Bonjour

Afin de lister les entity_id d’un groupe qui ont une batterie inferieur à 15% j’ai ce code :

 {% set thermo = states 
 | selectattr('entity_id', 'in', state_attr('group.thermo_batterie','entity_id')) 
 | selectattr('state', 'lessthan', '15') 
 | map(attribute='name') 
 | list %}
 {%- if thermo | length == 0 -%}
            OK
 {%- else -%}
            Pile thermo - de 15% : {{ thermo[:-1] | join(', ') }}{{', ' if thermo | length > 2 else ' '}}et {{ thermo[-1]}}
 {%- endif -%}

Le resultat est le suivant :

 Type de résultat: string
 
 Pile thermo - de 15% : Baro Zigbee Chambre C battery, Baro Zigbee Chambre E battery, Baro Zigbee Chambre Parents battery, Baro Zigbee Garage battery, Baro Zigbee Salle de Bain battery, et Baro Zigbee Salon battery

 Ce modèle écoute tous les événements de changement d'état.

mon problème c’est que aucun appareil n’a moins de 15% !

Ce code me retourne ce resultat parce que il compare des chaines de caracteres (le state de mes thermo zigbee est en string)

ca se confirme avec ce code (lessthan ‹ 100 ›)

{% set thermo = states 
 | selectattr('entity_id', 'in', state_attr('group.thermo_batterie','entity_id')) 
 | selectattr('state', 'lessthan', '100') 
 | map(attribute='name') 
 | list %}
 {%- if thermo | length == 0 -%}
             OK
 {%- else -%}
            Pile thermo - de 15% : {{ thermo[:-1] | join(', ') }}{{', ' if thermo | length > 2 else ' '}}et {{ thermo[-1]}}
 {%- endif -%}

j’ai le retour :

 Type de résultat: string
 
 OK

 Ce modèle écoute tous les événements de changement d'état.

j’ai cherché comment comparer des choses comparables mais sans succes

Si vous avez la solution je suis preneur !
merci

Il faut publier le code entre balise code c’est à dire: </>
Là, on ne peut pas lire ce que tu as fait.
Normalement pour passer de string a float il faut faire |float après avoir récupéré la chaine de caractères.

Là dans le cas d’une liste, le plus facile c’est d’insérer une conversion (comme le |float de @golfvert) mais pas exactement pareil
Genre

{% set thermo2f = list(map(float, thermo ))%}

Après il faut revoir l’ordre : extraction/map/test/list

Hello

je comprend pas trop ce que souhaite faire @Mulinet
un membre ou Mulinet peux m’ éclairé ?

Là son code retourne toutes les batteries… Pas uniquement celle <15%

merci @Pulpy-Luke
Simple et compréhensible la réponse :+1:

cela ne ferais pas l’affaire ?

2 « J'aime »

Si ça pourrait marcher… J’ai juste cru comprendre dans un autre sujet qu’il avait déjà un bout de code…

Peu être ce post là Remontée les capteurs avec moins de 15% de batterie

1 « J'aime »

C’est le meme probleme que moi en effet