Synthèse des fenêtres ouvertes (Je n'y arrive pas)

Salut,
Ci-dessous le code récupéré sur le forum pour la synthèse des lumières allumées.
Je cherche à transposer celui-ci pour avoir la synthèse de mes fenêtres ouvertes
Chacune d’entre elle est équipée d’un capteur de mon alarme ring qui sont nommés tous de la même manière pour le début, à savoir binary_sensor.ring_fenetre…
J’ai bien essayé en remplaçant le ‹ light › par ‹ binary_sensor.ring_fenetre › partout mais je n’obtiens aucun résultat

{% set domain = 'light' %}
          {% set state = 'on' %}
          {# Définition du `namespace` afin de pouvoir récupérer la valeur définie dans la boucle #}
          {% set light = namespace(is_light=0, is_on=0) %}
          {%- set entities = (states[domain]| map(attribute='entity_id') | list ) -%}
          {%- for entity in entities -%}
            {% if not ( is_state_attr(entity,'type','browser_mod') or is_state(entity,'unavailable')) %}
              {% set light.is_light = light.is_light + 1 %}
              {% if is_state(entity,'on') %}
                {% set light.is_on = light.is_on + 1 %}
              {%- endif %}
            {%- endif %}
          {%- endfor -%}
          Fenêtres ouvertes: {{light.is_on}}/{{light.is_light}}

Merci par avance à ceux ou celles qui pourront me filer un coup de main .
@+ Martipit

on peut voir ton code qui ne marche pas ?
et pour tester du code tu peux passer pour les outils developpeurs > template pour t’aider a debugguer

mais deja dans {% set domain = 'light' %} il faut le remplacer par ton domaine et c’est {% set domain = 'sensor' %}

Hello,

Pour faire ça j’ai créé un groupe qui comprend tout les capteurs que je veux surveiller (binary_sensor.synthese_ouverture_peripherique) puis utilise le code suivant :

service: notify.mobile_app_pixel_7
data:
  title: Ouvrants ouverts
  message: >
    {% set capteurs = expand('binary_sensor.synthese_ouverture_peripherique') %}
    {% set ouverts = capteurs | selectattr('state', 'equalto', 'on') | map(attribute='name') | list %}
    {% if ouverts | length > 0 %}
      Les capteurs suivants sont ouverts : {{ ouverts | join(', ') }}.
    {% else %}
      Tous les capteurs sont fermés.
    {% endif %}

A adapter selon tes besoins.

Bonjour,
Et si tu souhaites plutôt le nombre de fenêtres ouvertes, j’avais mis un exemple pour des lumières dans ce post, remplacer ‹ unavailable › par ‹ on ›:
Notification coupure de courant ou courant rétabli - Entraide Home Assistant - Home Assistant Communauté Francophone (hacf.fr)
Bob

Salut Idaho947,
J’ai aussi un groupe mais c’est trop fastidieux à gérer lorsqu’il y a des ajouts et des retraits de sensor. il faut reprendre le groupe ajouter ou supprimer alors qu’en faisant comme la synthèse je j’ai donné pour les lampes, il y a juste à bien nommer les sensor au départ.

Bonjour, tu enlèves ou ajoutes souvent des fenêtres ? :grin:

1 « J'aime »

Saut Bob,

Toi aussi tu passe par un groupe mais la gestion en cas de changement d’appareil, d’ajout ou de retrait il faut reprendre le groupe alors qu’avec la synthèse light que j’ai communiqué si on arrive a faire comme je voudrais, tu n’a rien à faire si ce n’estbien nommer ton appareil

bonjour, je suis dans une maison en cours de rénovation et oui il y a des changements régulier et des ajouts de sensor ou des retrait ou modif de nom assez régulièrement.

Je suis passé par un groupe parce que des fois dans la synthèse tu te retrouves avec des périphériques que tu ne veux pas voir. Par exemple les capteurs de la veranda ou de bâtiments externe.
Avec le groupe tu regardes ce que tu veux.

j’entend bien mais comme je le dis si on peut faire la synthèse à partir d’une partie du nom de l’entité, par exemple tous les sensors pour les fenêtres sont nommées RING - Fenêtre_NomPiece. En récupérant du coup le ‹ binary_sensor.ring_fenêtre › dans le domain ca devrait pouvoir le faire. Je ne sais pas c’est pour cela que je voulais m’inspirer de la synthèse light.

1 « J'aime »

Oui, je passe aussi par les groupes qui sont faciles à gérer en mode graphique dans les entrées.
Je nomme mes capteurs et périphériques avec logique, les ID des entités aussi dès l’installation, ensuite ça n’a plus de raison, surtout pas même à mon avis.
Peut être peux-tu le faire autrement, avec les étiquettes / catégories…
EDIT - Labels : Templating - Home Assistant (home-assistant.io)
Je n’ai pas mon HA sous la main en mode PC pour tester ton code.
Bob

oui j’ai vu passer un truc avec les étiquettes je vais voir ce que je peux faire de ce côté là.

peut-etre voir aussi du coté du device_class avec window

1 « J'aime »

Hello,

Tu peux essayer de lister tout tes binary_sensor qui ont un device_class de « door », « window » ou « opening ».

Essaye ça dans l’outil développement de modèle:

{% for state in (states.binary_sensor
  | selectattr('attributes.device_class', 'in', ['door', 'window', 'opening'])
  ) %}
   - {{ state_attr(state.entity_id, 'friendly_name') }}: {{ state_attr(state.entity_id, 'device_class') }} => {{ state.state }}
{% endfor %} 

Est ce que :

 {% set sensors = states.binary_sensor | selectattr('entity_id', 'search', '^binary_sensor.ring_fenetre') | selectattr('state', 'eq', 'on') | map(attribute='entity_id') | list %}
            {% if sensors | length > 0 %}
              Les capteurs suivants sont ouverts : {{ sensors | join(', ') }}
            {% else %}
              Aucun capteur d'ouverture n'est actuellement ouvert.
            {% endif %}

Fonctionne ?

Oui j’ai effectivement la liste des appareils Ring fenêtres qui sont ouverts.

1 « J'aime »

Bonjour,
j’utilise ce blueprint pour connaître la disponibilité de mes devices, peut-être que ça peut t’aider:

Bonjour,

…et passer par une carte filtre d’entité en y incluant tous les capteurs des fenêtres à surveiller et qui n’afficherait que celles qui sont ouvertes, ce ne serait pas envisageable?

{% set sensors = states.binary_sensor | selectattr('entity_id', 'search', '^binary_sensor.ds') | selectattr('state', 'eq', 'on') | map(attribute='name') | list -%}
{%- if sensors | length > 0 -%}
Les fenêtres suivantes sont ouverts : {{ sensors | join(', ') }}
{%- else -%}
Aucune fenêtre n'est actuellement ouverte.
{%- endif %}

j’ai fait des modifications mineurs surtout pour rendre le rendu plus propre

1 « J'aime »

Hello,

Afin de progresser, peux tu expliquer tes modifications ? Notamment l’ajout des tirets. Merci pour tes conseils.