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

la différence se situe avec le nombre de lignes vides qui vont être générés par ton code.
Les tirets servent à indiquer qu’on est dans un même bloc.

ci-dessous tu vas trouver tout d’abord le résultat avec les tirets et encore en dessous sans les tirets.

Les fenêtres suivantes sont ouverts : dsSalonFenetre, dsSdB Porte



Les fenêtres suivantes sont ouverts : dsSalonFenetre, dsSdB Porte

N’hésite pas à me dire si je n’ai pas été assez clair

1 « J'aime »

J’utilise un groupe pour certaines fonctions mais sinon voici mon code pour avoir la liste des fenêtres ouvertes et leur nombre :

##### Opened windows number ##################################
  - name: "Opened windows number"
    unique_id: a50f776c-4d99-495e-89f4-29a252844e27
    icon: mdi:window-open-variant
    state: >
      {%- set ns = namespace(doorsensors=[]) -%}
      {%- set ns.doorsensors = states.binary_sensor 
        | selectattr('attributes.device_class', 'defined') 
        | selectattr('attributes.device_class', '==', 'window')
        | selectattr('state', 'eq', 'on') 
        | map(attribute='name') | list -%}
      {{ ns.doorsensors | count }}

##### Opened windows list ##################################
  - name: "Opened windows list"
    unique_id: 45469f44-7a14-48ac-9209-92699560a9be
    icon: mdi:window-open-variant
    state: >
      {%- set ns = namespace(doorsensors=[]) -%}
      {%- set ns.doorsensors = states.binary_sensor 
        | selectattr('attributes.device_class', 'defined') 
        | selectattr('attributes.device_class', '==', 'window')
        | selectattr('name', 'contains', 'Fenêtre')
        | selectattr('state', 'eq', 'on') 
        | map(attribute='name') | list -%}
      {%- if (ns.doorsensors | count > 0) -%}
        {{ ns.doorsensors | list | join('\n')}}
      {%- else -%}
        Toutes les fenêtres sont fermées
      {%- endif %}

A insérer dans Templates.yaml :wink:

Pour l’utilisation, j’ai un bouton qui change d’état suivant le nombre de fenêtres ouvertes. Voici son code :

type: custom:button-card
entity: sensor.opened_windows
show_icon: true
size: 40%
icon: |
  [[[
    var nb = (states['sensor.opened_windows'].state);
    if (nb == 0) return 'mdi:window-closed-variant';
    if (nb <= 2) return 'mdi:window-open-variant';
    else return 'mdi:weather-windy';
  ]]]
color: var(--primary-color)
name: Fenêtres
show_name: true
show_state: false
show_label: false
label: |
  [[[
    var nb = (states['sensor.opened_windows'].state);
    var result = nb + ' ouverte';
    if (nb > 1) result += 's';
    if (nb == 0) return 'Fermées';
    else return result;
  ]]]
state:
  - value: 0
    color: var(--disabled-text-color)
styles:
  name:
    - font-size: 14px
  label:
    - font-size: 12px

Et une carte conditionnelle pour afficher la liste des fenêtres ouvertes :

  - type: conditional
    conditions:
      - condition: numeric_state
        entity: sensor.opened_windows
        above: 0
    card:
      type: markdown
      content: '{{states(''sensor.opened_windows_list'')}}'
      title: ''

Voici le résultat :
Button1Ouverte
Button2ouvertes
ButtonAere
ButtonFermees

Je t’invite aussi à aller jeter un oeil du côté de la chaine YouTube de SmartHomeJunkie, il a des tutos pour le code et a fait des vidéos d’exemples appliqués…

1 « J'aime »