Nombre de lumières allumées

Bonjour,

J’ai un petit souci de comptage du nombre de lampes allumées…
voila le script

    sensors:
      lights_on_count:
        friendly_name: Number of lights on
        icon_template: mdi:lightbulb-on-outline
        value_template: >-
          {{ states.light | selectattr('state', 'eq', 'on')  | list | length }}

mais quand j’ai des lampes qui sont dans un groupe, la lampe allumée est comptée deux fois…
et j’ai quelques groupes:
light.groupe_ampoules_couloir
light.groupe_ampoules_technique
light.groupe_ampoules_salon
light.groupe_liseuses

y’aurait un moyen de retirer les groupes_* ???
ce sont des groupes créés dans zigbee2mqtt, avant que les groupes apparus en 2022.4 n’existent. d’ailleurs, ca change quelque chose ?

salut.

essayes avec ce code en l’adaptant.

sensors:
      lights_on_count:
        friendly_name: Number of lights on
        icon_template: mdi:lightbulb-on-outline
        value_template: >-
          {% set reject = ['light.groupe_ampoules_technique'] %}
          {{ states.light | rejectattr('entity_id', 'in', reject) | selectattr('state', 'eq', 'on')  | list | length }}
1 « J'aime »

Salut,

La proposition de @fredarro doit marcher.
Il y a aussi une autre possibilité, au même titre que states.light, on peut récupérer les éléments d’un groupe :

{% set couloir =expand('light.groupe_ampoules_couloir') %}
{{ couloir | selectattr('state', 'eq', 'on')  | list | count}}
1 « J'aime »

Bon, alors je suis parti sur ton idée @Pulpy-Luke , bosser sur les éléments d’une ou plusieurs listes.

      lights_on_count:
        friendly_name: Number of lights on
        icon_template: mdi:lightbulb-on-outline
        value_template: >
          {% set eclairages = expand(
          states.light.groupe_ampoules_technique_2,
          states.light.groupe_ampoules_couloir_2,
          states.light.groupe_ampoules_salon_2,
          states.light.groupe_liseuses_2,
          states.light.groupe_leds_chambre,
          ) %}
          {{ eclairages | selectattr('state','eq','on') | list | count }}

reste à penser à ajouter un groupe bateau pour y mettre les autres ampoules
et réussir à virer les groupes MQTT créés par Z2M…

Où est ce que je pourrais trouver des explication sur la syntaxe
machin | selectattr('state','eq','on') | list | count
bon, le « selectattr state eq on » et le pipe j’ai bien une petite idée, mais le reste, j’ai quand même besoin des commandes possibles… d’ailleurs, c’est quoi ce langage ? (c’est pas ironique, je me suis arrêté au basic sur mon Apple 2c et au C au siècle dernier et le shell -bourne et Korn- )…

comment avoir un mode debug, ou un affichage ou un log des valeurs du genre "set toto = expand(state.groupe) = on, off…

Ah oui tiens kornshell …

Bon plus sérieusement, tout ça c’est du Jinja2.
C’est pas si simple car les options sont nombreuses (parfois même avec des formes différentes pour faire la même chose !!
Le gros avantage quand même c’est que les mots (anglais) sont parlant : list pour faire la liste, count pour compter.
Il y a bien une référence avec pleins d’info, mais finalement le mieux c’est encore google
https://jinja.palletsprojects.com/en/3.1.x/templates/

Pour le débug (et pour beaucoup d’autres trucs) ==> Les outils de dev => modèles !!

Puisque tu es passé sur les groupes, il y a quelques trucs à savoir :

  • un nouveau format à base de template
  • un ancien format pur yaml

L’avantage du 2ème c’est que le groupe converse le typage et les attributs… Et qu’on peut faire des groupes de groupes

Super, merci pour ces précisions.

perso j’utilise ce code qui me donne entièrement satisfaction

          {{states.light
          | selectattr( 'state', 'eq', 'on')
          | rejectattr( 'entity_id', 'in', 'group')
          | list | length}}
1 « J'aime »

Ce sujet ne répondait pas au besoin ?

https://forum.hacf.fr/t/synthese-lumieres/4517?u=clemalex

Chez moi, ça me met le nombre d’ampoule allumée + le nombre de groupe d’ampoules allumé.
comme si la ligne rejectattr( 'entity_id', 'in', 'group') n’était pas prise en compte.

'core un mystère du Ninja2 :ninja: :smile:

2 « J'aime »

C’est un des cas de fonctionnement différents des groupes ‹ group › et des groupes ‹ template ›

  • Un groupe ‹ groupe › liste les entités et le(s) groupe(s) rattaché(s)
  • Un groupe ‹ template › ne liste que les entités issues de(s) groupe(s) et sous-groupe(s) rattaché(s)

@Clemalex
C’est très intéressant, il faut mettre comme friendly_name_template : C’est pas Versailles ici !!!

Ca récapitule tout, mais c’est peut être un poil overkill:
Dans mon tableau, je veux mettre que 2 caractères, de 0 à 99, juste le nombre d’ampoules allumé histoire de vérifier qu’on ne brûle pas d’électricité pour rien.

1 « J'aime »

@Pulpy-Luke

… 'pouvez répéter la question ??? (c) les inconnus.

Chez Micro$oft, on aurait dit : « It’s not a bug, it’s a feature »

va falloir que je fasse des essais de groupes, pour tirer les choses au clerc.

Je ferai un exemple concert ce soir :wink:

j’ai plusieurs groupes de lumières, aucune n’est comptée en double
mon code complet

template: 
# https://www.home-assistant.io/integrations/template/#configuration-variables
  - sensor:
      - name: nb_light_on
        state: >
          {{states.light
          | selectattr( 'state', 'eq', 'on')
          | rejectattr( 'entity_id', 'in', 'group')
          | list | length}}

image

C’est ce que dis @Pulpy-Luke juste au dessus.
j’ai créé des groupes en mode template:


et là ca marche pas.
je suppose que tu as créé tes groupes directement dans le configuration.yaml (ou en include) ?

Du coup j’ai pas besoin de répéter, tu as l’air d’avoir pigé :laughing:

Si si, je veux voir ton exemple concert !!! (pour la fête de la musique ?)

et vive les correcteurs d’orthographe qui pensent tout savoir.

1 « J'aime »

Bien vu. C’est ça de faire 2 trucs à 50% en parallèle

Je n’avais pas capté.
ce sont des « light » , pas des « group », normal qu’ils soient comptabilisés. ils faut donc les exclure un à un ou, si ils ont le même schéma de nom faire un regex sur celui-ci