Custom carte cover de mushroom / template

De mémoire (en pleine réunion familiale), ça compte tout ce qui n’est pas 100 ou 0 comme partiel. Quand l’état fini en *ing, c’est que ça bouge

Alors dans mon cas de figure j’ai pas d’état *ing
Des qu’il monte ou descende les volets passent en open ou closed. C’est qu’une fois arrêté que l’info position est envoyée.
Voilà pourquoi je veux tester si différents de 0 et de 100 alors je suis en partiel.

Le soucie c’est que je ne sais pas faire le ET dans ce nouveau langage pour moi.

Jete un œil plus précis sur le code à l’occasion…
C’est juste une histoire de somme/soustraction…
Si tu connais le nombre total de volets, ceux à 0 et ceux à 100…le reste c’est ceux partiels…

Bon et bien j’ai pu obtenir ceci

avec ceci :

type: custom:mushroom-template-card
primary: Volets de la maison
multiline_secondary: true
secondary: >-
  {% set all = expand('cover.vr_maison'|lower) -%} {% set positions = all |
  map(attribute='attributes.current_position')|list-%} {% set moving = all |
  selectattr('state', 'in', ['open','closed'])|list|count -%} {% set open =  
  positions | reject("!=",100) |list |count -%} {% set closed = positions |  
  reject("!=",0) |list |count -%} {% set other = positions|list|count - open -  
  closed -%} Fermés = {{ closed }} / Partiels = {{ other }} / Ouverts = {{ open
  }} {% if moving >0 -%} {% endif %}
icon: mdi:window-shutter
icon_color: green
badge_icon: ''
layout: horizontal
fill_container: true

Par contre dès que je mets ceci (suppression de la partie moving), ça plante :
image

type: custom:mushroom-template-card
primary: Volets de la maison
multiline_secondary: true
secondary: >-
  {% set all = expand('cover.vr_maison'|lower) -%} {% set positions = all |
  map(attribute='attributes.current_position')|list-%}  {% set open =  
  positions | reject("!=",100) |list |count -%} {% set closed = positions |  
  reject("!=",0) |list |count -%} {% set other = positions|list|count - open -  
  closed -%} Fermés = {{ closed }} / Partiels = {{ other }} / Ouverts = {{ open
  }}  {% endif %}
icon: mdi:window-shutter
icon_color: green
badge_icon: ''
layout: horizontal
fill_container: true

Si tu laisse un endif sans le if c’est normal que ça râle un peu

Oh punaise :man_facepalming: le boulet

Pour compter le nombre de porte ou fenêtre ouverte j’ai produit ceci :

{%set group = state_attr('group.grp_fenetres_rdc','entity_id')%}
Fermées = {{states | selectattr('entity_id','in', group )|selectattr('state','eq','off') | list |count}} / Ouvertes = {{states | selectattr('entity_id','in', group )|selectattr('state','eq','on') | list |count}}

Cela semble bien fonctionner dans le testeur de modèle :
image

Sur la carte Mushroom aussi :
image

Code carte Mushroom Template
  - type: custom:mushroom-template-card
    icon: mdi:door-closed
    primary: Fenêtre RdC
    multiline_secondary: true
    secondary: >-
      {%set group = state_attr('group.grp_fenetres_rdc','entity_id')%} Fermées =
      {{states | selectattr('entity_id','in', group
      )|selectattr('state','eq','off') | list |count}} / Ouvertes = {{states |
      selectattr('entity_id','in', group )|selectattr('state','eq','on') | list
      |count}}
    icon_color: green
    badge_icon: ''
    layout: horizontal
    fill_container: true

Je n’arrive pas encore à mettre ce résultat en pastille sur l’icone par exemple (rouge et le nombre de fenêtre ouverte et si tout est fermé alors pastille verte avec le nombre total de fenêtre total du groupe)
Mais est-ce que c’est optimisé à vos yeux ?

Je souhaite reproduire l’opération pour mes portes, lumières, mvt etc…
Donc autant que ce soit le plus propre possible :slight_smile:

Merci

La seule optimisation que je vois c’est de faire le calcul uniquement des états ouverts OU fermés …
Q TOTAL - Q OUVERTE = Q FERMEE
La quantité totale étant connue par le nombre de membres du groupe. Même groupe que sur lequel tu filtre les états ouverts/fermés

Alors voici ce que j’ai refait du coup

{%set group = state_attr('group.grp_fenetres_rdc','entity_id')%}
{%set total = states | selectattr('entity_id','in', group )| list |count%}
{%set ouverte = states | selectattr('entity_id','in', group )|selectattr('state','eq','on') | list |count%}
Fermées = {{total - ouverte}} / Ouvertes = {{ouverte}}
1 « J'aime »

tu peux aller un peu plus loin, tu as 2 fois

 states | selectattr('entity_id','in', group )

donc en factorisant, tu gagnes encore un peu en vitesse

hummm, alors là je n’ai pas encore vu ce genre d’usage
En français je comprends bien en pratique codage c’est autre chose :slight_smile:
Je vais chercher ça

C’est le même principe qu’en français/maths

{%set group = state_attr('group.grp_fenetres_rdc','entity_id')%}
{%set statesall = states | selectattr('entity_id','in', group )%}
{%set total = statesall | list |count%}
{%set ouverte = statesall | selectattr('state','eq','on') | list |count%}
Fermées = {{total - ouverte}} / Ouvertes = {{ouverte}}

Tu peux aussi voir si expand('group.grp_fenetres_rdc') ne simplifie pas encore un peu le truc, en donnant directement la liste et les états de tes ouvrants rdc

Ok c’est bien en créant un ligne de plus c’était ma 1ère idée et oui du coup à la lecture c’est plus simple encore.

Je vais regarder aussi le sujet expand('group.grp_fenetres_rdc') ensuite comme pour les volets roulants.

J’ai déjà créé un groupe via entrée > créer une entrée > groupe mais aussi en groupe via group.yaml
donc je vais tester tout ceci

Top comme présentation. Tu pourrais partager ton code complet pour ce dashboard pour que je te copie quelques passages stp ? Merci :blush:

@RDMCH a qui tu demandes le partage ?

Je pensais à l’auteur @Pulpy-Luke pour l’avoir dans sa version finale :slight_smile:

ça ?

Alors pour ma part je partage avec ceci en plus pour mon groupe fenêtre (test)

{% set all = expand('group.grp_fenetres_rdc')| list -%}
{% set closed1 = all | selectattr('state','eq','off')|list|count%}
{% set open1 = all | selectattr('state','eq','on')|list|count%}
Fermées : {{closed1}} / ouvertes : {{open1}}

Mais bon je n’arrive toujours pas à mettre le nombre de fenêtre ouverte sur une pastille !
Je dois passer à coté d’une évidence encore :crazy_face:
image

Salut @jerome6994

Je crois (selon la doc) que le badge ne peut contenir que des icônes, donc ça laisse une possibilité de tricher.

On peut obtenir ça :

mush-badge

Avec ce code :

type: custom:mushroom-template-card
primary: Ouvrants
secondary: |
  {% set all = expand('group.ouvrants')| list -%}
  {% set closed1 = all | selectattr('state','eq','off')|list|count%}
  {% set open1 = all | selectattr('state','eq','on')|list|count%}
  Fermés : {{closed1}} / ouverts : {{open1}}
icon: |
  {% if is_state('group.ouvrants', 'on') %} 
    mdi:door-open
  {% else %}
    mdi:door-closed
  {% endif %}
icon_color: |
  {% if is_state('group.ouvrants','on') %}
    red
  {% else %}
    green
  {% endif %}
badge_icon: |-
  {% set all = expand('group.ouvrants')| list -%} 
  {% set open1 = all | selectattr('state','eq','on')|list|count%}
  {% if open1 == 1 %}
    mdi:numeric-1
  {% elif open1 == 2 %}
    mdi:numeric-2
  {% elif open1 == 3 %}
    mdi:numeric-3
  {% elif open1 == 4 %}
    mdi:numeric-4
  {% elif open1 == 5 %}
    mdi:numeric-5
  {% elif open1 == 6 %}
    mdi:numeric-6
  {% elif open1 == 7 %}
    mdi:numeric-7
  {% elif open1 == 8 %}
    mdi:numeric-8
  {% else %}
    none
  {% endif %}
badge_color: |
  {% set all = expand('group.ouvrants')| list -%} 
  {% set open1 = all | selectattr('state','eq','on')|list|count%}
  {% if open1 == 0 %}
    green
  {% else %}
    red
  {% endif %}
card_mod:
  style: |
    :host {
      --mush-badge-icon-size: 0.95em;
    }

Le « card_mod » de fin c’est juste pour augmenter la taille de l’icône dans la pastille.

C’est pas le code idéal mais ça fonctionne :wink:

Une autre soluce, utilise les icones numériques
icon: '{{''mdi:numeric-''+states(''sensor.nombre_occupants'')+''-circle''}}'
Evidement ça limite pour les valeurs de 0 à 9

1 « J'aime »