[Carte] Mise en forme de ma mushroom room-card et tuto

Quand je veux unifier des cartes, j’utilise souvent ça :

ça donnerai
image

type: custom:stack-in-card
cards:
  - type: custom:layout-card
    layout_type: grid
    layout:
      grid-template-columns: 25% 75%
      grid-template-rows: 30% 70%
      grid-template-areas: |
        "zone1 zoneV"
        "zone2 zoneV"
    cards:
      - type: entity
        view_layout:
          grid-area: zone1
        entity: light.led_cuisine
      - type: entity
        view_layout:
          grid-area: zoneV
        entity: light.led_plan
      - type: button
        entity: light.led_plan
        view_layout:
          grid-area: zone2

Oui, ça fait le taf (même s’il y a sans doute des trucs à bricoler dans le layout pour que tout prenne sa place) :
image

Mais le soucis de la stack-in card c’est qu’on perd l’interface et qu’on est obligé de tout faire en YAML. Hors de mon point de vue, tout l’intérêt des mushroom cards c’est l’interface…

Dans mes tests j’ai aussi joué avec card mod car je me suis rendu compte que si on ne met pas de stack-in, ça ne casse pas l’utilisation de l’interface. (et dans certains cas même avec Stack-in on garde l’utilisation de l’interface… J’avoue que j’ai pas tout compris du pourquoi…)

Bref j’ai réussi aussi à faire ça:
image

avec le code suivant :

J’ai deux problèmes:

  • soit à gauche l’icone déborde, mais la carte prend bien « toute sa place »
  • soit j’ai une place perdue à droite de la carte de droite
type: horizontal-stack
cards:
  - type: vertical-stack
    cards:
      - type: custom:mushroom-template-card
        entity: group.lumieres_salon
        icon: mdi:sofa
        icon_color: |
          {% if is_state(entity, 'on') %}
            #03A9F4
          {% else %}  
            grey
          {% endif %}
        primary: Salon
        secondary: '{{ states(''sensor.echo_jeanne_temperature'') }}°C'
        layout: horizontal
        tap_action:
          action: navigate
          navigation_path: /lovelace-smartphone/salon
        double_tap_action:
          action: navigate
          navigation_path: /lovelace-smartphone/salon
        hold_action:
          action: toggle
        badge_icon: |
          {% if is_state('cover.volet_du_salon_tv', 'closed') %}
            mdi:window-shutter
          {% else %}  
            mdi:window-shutter-open
          {% endif %}
        badge_color: |
          {% if is_state('cover.volet_du_salon_tv', 'closed') %}
            green
          {% else %}  
            grey
          {% endif %}
        card_mod:
          style:
            mushroom-state-info$: |
              .primary {
                font-size: 16px !important;
                position: relative;
                top: -50px;
                left: -155px;
                overflow: visible !important;
                white-space: normal !important;
              }
              .secondary {
                position: relative;
                overflow: visible !important;
                top: -52px;
                left: -155px;
              }
            mushroom-shape-icon$: |
              .shape {
                position: relative;
                left: -43px;
                top: 55px;
              }
            .: |
              :host {
                --mush-icon-size: 146px;
              }
            style: |
              mushroom-badge-icon {
                left: 60px;
                top: 25px;
              }
      - type: custom:mushroom-chips-card
        chips:
          - type: template
            entity: light.0x84ba20fffe4b2581
            tap_action:
              action: fire-dom-event
              browser_mod:
                service: browser_mod.popup
                data:
                  title: Lumières salon
                  content:
                    type: vertical-stack
                    cards:
                      - type: custom:mushroom-light-card
                        entity: light.0x84ba20fffe4b2581
                        name: Petite Lampe
                        use_light_color: true
                        show_brightness_control: true
                        show_color_temp_control: true
                        show_color_control: false
                        collapsible_controls: true
                      - type: custom:mushroom-light-card
                        entity: light.lampadaire
                        use_light_color: false
                        show_brightness_control: false
                        show_color_temp_control: false
                        show_color_control: false
                        collapsible_controls: true
                      - type: custom:mushroom-light-card
                        entity: light.elephants
                        use_light_color: false
                        show_brightness_control: false
                        show_color_temp_control: false
                        show_color_control: false
                        collapsible_controls: true
                      - type: custom:mushroom-light-card
                        entity: light.cerisier
                        use_light_color: false
                        show_brightness_control: false
                        show_color_temp_control: false
                        show_color_control: false
                        collapsible_controls: true
            icon: mdi:lightbulb
            hold_action:
              action: toggle
            icon_color: |-
              {% if is_state('light.0x84ba20fffe4b2581', 'on') %} 
               orange
              {% elif is_state('light.0x84ba20fffe4b2581', 'off') %} 
               grey
              {% else %}
               grey
              {% endif %}
          - type: conditional
            conditions:
              - entity: binary_sensor.echo_salon_mouvement
                state: 'on'
            chip:
              type: entity
              entity: binary_sensor.echo_salon_mouvement
              icon: mdi:motion-sensor
              icon_color: blue
              content_info: none
          - type: template
            entity: media_player.echo_jeanne
            icon: mdi:play-pause
            icon_color: blue
            tap_action:
              action: fire-dom-event
              browser_mod:
                service: browser_mod.popup
                data:
                  title: Echo salon
                  content:
                    type: custom:stack-in-card
                    cards:
                      - type: custom:mushroom-media-player-card
                        entity: media_player.echo_jeanne
                        icon: mdi:play
                        use_media_info: true
                        use_media_artwork: false
                        show_volume_level: false
                        media_controls:
                          - play_pause_stop
                          - previous
                          - next
                        volume_controls:
                          - volume_buttons
                          - volume_set
                        fill_container: false
        card_mod:
          style:
            .: |
              ha-card {
                width: 66px;
                margin-left: 76%;
                top: -170px;
                background: none;
                --chip-border-width: 0;
              }
    card_mod:
      style: |
        ha-card {
          height: 178px !important;
          width: 178px !important;
        }
  - type: custom:vertical-stack-in-card
    cards:
      - type: custom:mushroom-template-card
        entity: group.lumieres_salon
        icon: mdi:sofa
        icon_color: |
          {% if is_state(entity, 'on') %}
            #03A9F4
          {% else %}  
            grey
          {% endif %}
        primary: Salon
        secondary: '{{ states(''sensor.echo_jeanne_temperature'') }}°C'
        layout: horizontal
        tap_action:
          action: navigate
          navigation_path: /lovelace-smartphone/salon
        double_tap_action:
          action: navigate
          navigation_path: /lovelace-smartphone/salon
        hold_action:
          action: toggle
        badge_icon: |
          {% if is_state('cover.volet_du_salon_tv', 'closed') %}
            mdi:window-shutter
          {% else %}  
            mdi:window-shutter-open
          {% endif %}
        badge_color: |
          {% if is_state('cover.volet_du_salon_tv', 'closed') %}
            green
          {% else %}  
            grey
          {% endif %}
        card_mod:
          style:
            mushroom-state-info$: |
              .primary {
                font-size: 16px !important;
                position: relative;
                top: -50px;
                left: -155px;
                overflow: visible !important;
                white-space: normal !important;
              }
              .secondary {
                position: relative;
                overflow: visible !important;
                top: -52px;
                left: -155px;
              }
            mushroom-shape-icon$: |
              .shape {
                position: relative;
                left: -43px;
                top: 55px;
              }
            .: |
              :host {
                --mush-icon-size: 146px;
              }
            style: |
              mushroom-badge-icon {
                left: 60px;
                top: 25px;
              }
      - type: custom:mushroom-chips-card
        chips:
          - type: template
            entity: light.0x84ba20fffe4b2581
            tap_action:
              action: fire-dom-event
              browser_mod:
                service: browser_mod.popup
                data:
                  title: Lumières salon
                  content:
                    type: vertical-stack
                    cards:
                      - type: custom:mushroom-light-card
                        entity: light.0x84ba20fffe4b2581
                        name: Petite Lampe
                        use_light_color: true
                        show_brightness_control: true
                        show_color_temp_control: true
                        show_color_control: false
                        collapsible_controls: true
                      - type: custom:mushroom-light-card
                        entity: light.lampadaire
                        use_light_color: false
                        show_brightness_control: false
                        show_color_temp_control: false
                        show_color_control: false
                        collapsible_controls: true
                      - type: custom:mushroom-light-card
                        entity: light.elephants
                        use_light_color: false
                        show_brightness_control: false
                        show_color_temp_control: false
                        show_color_control: false
                        collapsible_controls: true
                      - type: custom:mushroom-light-card
                        entity: light.cerisier
                        use_light_color: false
                        show_brightness_control: false
                        show_color_temp_control: false
                        show_color_control: false
                        collapsible_controls: true
            icon: mdi:lightbulb
            hold_action:
              action: toggle
            icon_color: |-
              {% if is_state('light.0x84ba20fffe4b2581', 'on') %} 
               orange
              {% elif is_state('light.0x84ba20fffe4b2581', 'off') %} 
               grey
              {% else %}
               grey
              {% endif %}
          - type: conditional
            conditions:
              - entity: binary_sensor.echo_salon_mouvement
                state: 'on'
            chip:
              type: entity
              entity: binary_sensor.echo_salon_mouvement
              icon: mdi:motion-sensor
              icon_color: blue
              content_info: none
          - type: template
            entity: media_player.echo_jeanne
            icon: mdi:play-pause
            icon_color: blue
            tap_action:
              action: fire-dom-event
              browser_mod:
                service: browser_mod.popup
                data:
                  title: Echo salon
                  content:
                    type: custom:stack-in-card
                    cards:
                      - type: custom:mushroom-media-player-card
                        entity: media_player.echo_jeanne
                        icon: mdi:play
                        use_media_info: true
                        use_media_artwork: false
                        show_volume_level: false
                        media_controls:
                          - play_pause_stop
                          - previous
                          - next
                        volume_controls:
                          - volume_buttons
                          - volume_set
                        fill_container: false
        card_mod:
          style:
            .: |
              ha-card {
                width: 66px;
                margin-left: 76%;
                top: -170px;
                background: none;
                --chip-border-width: 0;
              }
    card_mod:
      style: |
        ha-card {
          height: 178px !important;
          width: 178px !important;
        }

Mais déjà, je garde l’interface graphique dans la plupart des cas… bon c’est pas encore 100% parfait, mais en tatonnant on progresse…

Je partait du postulat card-mod ou stack-in => pas d’éditeur visuel, mais c’est moins simple que ça…

Si tu restes uniquement sur l’idée de passer par des outils graphiques à un moment donné, tu seras forcement obligé de faire des compromis (que les cartes officielles et les quelques custom qui le supportent). Replacer ça par du cardmod, c’est à mon avis même pas plus simple, au contraire (et c’est pas plus graphique).
Et puis le YAML, tu en manipule(ra) partout, donc apprendre à faire sans l’UI c’est pas forcément un mal.

Je suis 100% d’accord avec toi. Ce n’est pas que je sois allergique au Yaml, mais naïvement sans doute je me dit que si mon code est compatible de l’interface graphique il sera plus facilement maintenable à long terme.

L’idée était donc d’essayer de concevoir mon dashboard de la façon la plus simple possible (aujourd’hui je suis sur 90% de mushroom) et de réserver les trucs subtils à quelques cartes particulières (la carte météo par exemple) pour limiter les interventions en cas d’incompatibilité sur une future MaJ.

Je me tâte même à tout basculer en Tile-card pour être quasi 100% cartes « basiques » mais il me manque la carte template pour sauter le pas…

Pour l’instant mon dasboard me va bien, mais il faut beaucoup scroller pour voir toutes les pièces, ensuite j’ai des sous-vues par pièces => d’où la recherche d’une carte de synthèse compacte par pièce.


1 « J'aime »

J’ai poussé encore un peu la réflexion sur le sujet et je vous tiens au courant de mes avancées sur le sujet…

J’ai fini par arriver à quelque chose qui me va, basé uniquement sur une mushroom template et une carte mushroom chips, fusionnées en stackin et modifiées avec card mod:

Sans card mod :
image

Avec card mod:
image
Je ne suis pas resté figé sur du carré pour pouvoir m’adapter à plusieurs largeur d’écran, mais c’est facilement modifiable avec card mod :
imageimage

L’exemple suivant pour la carte « salon »:

  • La plupart des comportements basiques de la carte template et des chips sont toujours pilotables via l’interface graphique (UI) malgré l’utilisation de card mod et du « stacking ». (Je n’ai toujours pas vraiment compris pourquoi des fois ça marche…)
  • La plupart des pop up sur les boutons sont gérés directement en YAML avec des fire-dom-event. Il serait possible de repasser en « full UI » avec des cartes pop up (disponibles avec browser_mod) mais ceci génèrerait un grand nombre de cartes pop-up (4 par cartes).
Fonctions détaillées

Ci dessous la description détaillée:

  • L’icone de la carte template (canapé) est grossie et déplacée via card mod. Cependant son comportement (icone et couleur) est entièrement pilotable via l’UI, en particulier sa couleur dépend de l’état des lumières dans la pièce (c’est géré par un template dans l’UI)
  • Le titre est fixe, mais est entièrement définissable dans l’UI c’est l’info principale de la carte template (il pourrait être dynamique puisque c’est une carte template).
  • L’info secondaire affiche via un template la température dans la pièce (contrôlé par l’UI)
  • le badge de l’icone permet d’afficher l’état des détecteurs de mouvements (icone et couleur gérés par un template dans l’UI de la carte template), puis est déplacé avec card mod, d’autre utilisations seraient possibles, mode de chauffage, etc…
  • L’appui court sur l’icone du canapé (en fait sur toute la carte…) est un raccourci vers une autre page dédiée à la pièce (controlé par l’UI)
  • L’appui long sur l’icone du canapé (en fait sur toute la carte…) fait basculer le group « light » de la pièce (controlé par l’UI)
  • La ligne de « chips » est transformée en colonne (largeur et position modifiée via card mod, pas de background ni de bordures)
  • L’appui court sur l’icone d’ampoule ouvre un pop-up (basé sur browser mod) avec toutes les lumières de la pièce (controlé en YAML)
  • L’appui long sur l’icone d’ampoule fait basculer la lumière principale de la pièce (controlé avec l’UI)
  • L’appui court sur l’icone de volet ouvre un pop-up (basé sur browser mod) avec tous les volets de la pièce (controlé en YAML)
  • L’appui long sur l’icone de volets fait basculer le groupe des volets de la pièce (controlé avec l’UI)
  • L’appui court sur l’icone media ouvre un pop-up (basé sur browser mod) avec un mini mediaplayer avec tous les raccourcis qui vont bien pour gérer l’amazon echo de la pièce et les raccourcis pour envoyer certains types de musique en multiroom (controlé en YAML)
  • L’appui court sur l’icone de fleur ouvre un pop-up (basé sur browser mod) avec toutes les info du capteur miflora (controlé en YAML)
  • je n’ai pas joué avec les double clics, mais ils sont bien entendu disponibles sur la carte (via le template) et sur les mini icones (via les chips)…

Aucune de mes pièce n’a pour le moment eu besoin de plus de 4 mini icones. Mais il est toujours possible de remplacer les chips « template » que j’ai utilisé" par des chips « conditionnal » histoire de n’afficher que les chips utiles…

Dans cette carte, la plupart des réglages restent ainsi disponibles avec l’interface graphique. La seule exception c’est la gestion des pop-ups, réalisé en YAML avec des fire-dom-event. j’aurai pu aussi soit simplifier ce point, soit faire des pop-up cards indépendantes…

J’ai arrêté mes tests là car ça répondait bien à mon besoin, et j’ai généralisé cette carte à mon dashboard…

Code

Le code, il utilise:

  • les mushroom cards (template et chips en basique, light et cover dans les pop ups)
  • card-mod
  • vertical stack-in-card
  • browser-mod ( facultatif, utilisé pour tous les pop up)
  • mini-media (facultatif, pour le pop up du media player)
  • cutom flower card (facultatif, pour le pop up du mi-flora)
type: custom:vertical-stack-in-card
cards:
  - type: custom:mushroom-template-card
    entity: group.lumieres_salon
    icon: mdi:sofa
    icon_color: |
      {% if is_state(entity, 'on') %}
        #03A9F4
      {% else %}  
        grey
      {% endif %}
    primary: Salon
    secondary: '{{ states(''sensor.echo_jeanne_temperature'') }}°C'
    layout: horizontal
    tap_action:
      action: navigate
      navigation_path: /lovelace-smartphone/salon
    double_tap_action:
      action: navigate
      navigation_path: /lovelace-smartphone/salon
    hold_action:
      action: toggle
    badge_icon: |
      {% if is_state('binary_sensor.echo_salon_mouvement', 'on') %}
        mdi:motion-sensor
      {% else %}  
        mdi:motion-sensor-off
      {% endif %}
    badge_color: |
      {% if is_state('binary_sensor.echo_salon_mouvement', 'on') %}
        orange
      {% else %}  
        grey
      {% endif %}
    card_mod:
      style:
        mushroom-state-info$: |
          .primary {
            font-size: 16px !important;
            position: relative;
            top: -50px;
            left: -155px;
            overflow: visible !important;
            white-space: normal !important;
          }
          .secondary {
            position: relative;
            overflow: visible !important;
            top: -52px;
            left: -155px;
          }
        mushroom-shape-icon$: |
          .shape {
            position: relative;
            left: -43px;
            top: 55px;
          }
        .: |
          :host {
            --mush-icon-size: 146px;
          }
        style: |
          mushroom-badge-icon {
            left: 60px;
            top: 25px;
          }
  - type: custom:mushroom-chips-card
    chips:
      - type: template
        entity: light.0x84ba20fffe4b2581
        tap_action:
          action: fire-dom-event
          browser_mod:
            service: browser_mod.popup
            data:
              title: Lumières salon
              content:
                type: vertical-stack
                cards:
                  - type: custom:mushroom-light-card
                    entity: light.0x84ba20fffe4b2581
                    name: Petite Lampe
                    use_light_color: true
                    show_brightness_control: true
                    show_color_temp_control: true
                    show_color_control: false
                    collapsible_controls: true
                  - type: custom:mushroom-light-card
                    entity: light.lampadaire
                    use_light_color: false
                    show_brightness_control: false
                    show_color_temp_control: false
                    show_color_control: false
                    collapsible_controls: true
                  - type: custom:mushroom-light-card
                    entity: light.elephants
                    use_light_color: false
                    show_brightness_control: false
                    show_color_temp_control: false
                    show_color_control: false
                    collapsible_controls: true
                  - type: custom:mushroom-light-card
                    entity: light.cerisier
                    use_light_color: false
                    show_brightness_control: false
                    show_color_temp_control: false
                    show_color_control: false
                    collapsible_controls: true
        icon: mdi:lightbulb
        hold_action:
          action: toggle
        icon_color: |-
          {% if is_state(entity, 'on') %} 
           orange
          {% elif is_state(entity, 'off') %} 
           grey
          {% else %}
           grey
          {% endif %}
      - type: template
        entity: cover.salon
        hold_action:
          action: toggle
        tap_action:
          action: fire-dom-event
          browser_mod:
            service: browser_mod.popup
            data:
              title: Volets du salon
              content:
                type: vertical-stack
                cards:
                  - type: custom:mushroom-cover-card
                    entity: cover.volet_du_salon_apero
                    name: Volet Apero
                    show_position_control: true
                    show_tilt_position_control: false
                    show_buttons_control: true
                  - type: custom:mushroom-cover-card
                    entity: cover.volet_du_salon_tv
                    name: Volet TV
                    show_position_control: true
                    show_tilt_position_control: false
                    show_buttons_control: true
        icon: |-
          {% if is_state(entity, 'open') %} 
           mdi:window-shutter-open
          {% elif is_state(entity, 'closed') %} 
           mdi:window-shutter
          {% else %}
           mdi:window-shutter-alert
          {% endif %}
        icon_color: |-
          {% if is_state(entity, 'open') %} 
           grey
          {% elif is_state(entity, 'closed') %} 
           grey
          {% else %}
           orange
          {% endif %}
      - type: template
        entity: media_player.echo_jeanne
        icon: mdi:play-pause
        icon_color: |-
          {% if is_state(entity, 'playing') %} 
            #03A9F4
          {% else %}
           grey
          {% endif %}
        tap_action:
          action: fire-dom-event
          browser_mod:
            service: browser_mod.popup
            data:
              title: Echo salon
              content:
                type: custom:stack-in-card
                cards:
                  - type: custom:mini-media-player
                    entity: media_player.echo_jeanne
                    source: full
                    volume_stateless: false
                    group: true
                    artwork: full-cover
                    tts:
                      platform: alexa
                      entity_id: media_player.echo_jeanne
                      type: announce
                    shortcuts:
                      hide_when_off: true
                      columns: 3
                      buttons:
                        - name: Playlist Jeanne
                          type: AMAZON_MUSIC
                          id: Playlist Jeanne
                        - name: RTL2
                          type: custom
                          id: joue la station RTL deux
                        - name: Pop- Rock
                          type: custom
                          id: joue du pop rock
                        - name: Rock
                          type: custom
                          id: joue du rock
                        - name: Musique douce
                          type: custom
                          id: joue de la musique douce
                        - name: Piano
                          type: custom
                          id: joue de la musique au piano
                        - name: Queen
                          type: custom
                          id: joue du Queen
                        - name: Vianney
                          type: custom
                          id: joue du Vianney
                        - name: Louane
                          type: custom
                          id: joue du Louane
                        - name: Playlist Jeanne
                          type: AMAZON_MUSIC
                          id: Playlist Jeanne sur le groupe rez_de_chaussee
                          icon: mdi:multicast
                        - name: RTL2
                          type: custom
                          id: >-
                            joue la station RTL deux sur le groupe
                            rez_de_chaussee
                          icon: mdi:multicast
                        - name: Pop- Rock
                          type: custom
                          id: joue du pop rock sur le groupe rez_de_chaussee
                          icon: mdi:multicast
                        - name: Rock
                          type: custom
                          id: joue du rock sur le groupe rez_de_chaussee
                          icon: mdi:multicast
                        - name: Musique douce
                          type: custom
                          id: >-
                            joue de la musique douce sur le groupe
                            rez_de_chaussee
                          icon: mdi:multicast
                        - name: Piano
                          type: custom
                          id: >-
                            joue de la musique au piano sur le groupe
                            rez_de_chaussee
                          icon: mdi:multicast
                        - name: Queen
                          type: custom
                          id: joue du Queen sur le groupe rez_de_chaussee
                          icon: mdi:multicast
                        - name: Vianney
                          type: custom
                          id: joue du Vianney sur le groupe rez_de_chaussee
                          icon: mdi:multicast
                        - name: Louane
                          type: custom
                          id: joue du Louane sur le groupe rez_de_chaussee
                          icon: mdi:multicast
      - type: template
        entity: plant.alocatia
        icon: mdi:flower
        icon_color: |-
          {% if is_state(entity, 'problem') %} 
           orange
          {% else %}
           grey
          {% endif %}
        tap_action:
          action: fire-dom-event
          browser_mod:
            service: browser_mod.popup
            data:
              title: Plante Marsupilami
              content:
                type: custom:mod-card
                card:
                  type: custom:flower-card
                  entity: plant.alocatia
                  show_bars:
                    - moisture
                    - temperature
                    - illuminance
                    - conductivity
    card_mod:
      style:
        .: |
          ha-card {
            width: 66px;
            margin-left: 80%;
            top: -170px;
            background: none;
            --chip-border-width: 0;
          }
card_mod:
  style: |
    ha-card {
      height: 178px ;

      margin-left: auto;
      margin-right: auto;
    }

Le rendu final en mode jour:

en en mode nuit:

2 « J'aime »

Nota: pour les allergiques à card mod, on peut arriver à quelque chose d’assez sympa et très « mushroom » sans card mod (je n’ai pas encore fait mon choix, je garde les deux versions en parallèle…) :

Mais en grid sur deux colonnes uniquement pour passer sur smartphone…
Je remet le code de la carte salon au cas où…

Code
type: custom:vertical-stack-in-card
cards:
  - type: custom:mushroom-template-card
    entity: group.lumieres_salon
    icon: mdi:sofa
    icon_color: |
      {% if is_state(entity, 'on') %}
        #03A9F4
      {% else %}  
        grey
      {% endif %}
    primary: Salon
    secondary: '{{ states(''sensor.echo_jeanne_temperature'') }}°C'
    layout: horizontal
    tap_action:
      action: navigate
      navigation_path: /lovelace-smartphone/salon
    double_tap_action:
      action: navigate
      navigation_path: /lovelace-smartphone/salon
    hold_action:
      action: toggle
    badge_icon: |
      {% if is_state('binary_sensor.echo_salon_mouvement', 'on') %}
        mdi:motion-sensor
      {% else %}  
        mdi:motion-sensor-off
      {% endif %}
    badge_color: |
      {% if is_state('binary_sensor.echo_salon_mouvement', 'on') %}
        orange
      {% else %}  
        grey
      {% endif %}
  - type: custom:mushroom-chips-card
    chips:
      - type: template
        entity: plant.alocatia
        icon: mdi:flower
        icon_color: |-
          {% if is_state(entity, 'problem') %} 
           orange
          {% else %}
           grey
          {% endif %}
        tap_action:
          action: fire-dom-event
          browser_mod:
            service: browser_mod.popup
            data:
              title: Plante Marsupilami
              content:
                type: custom:mod-card
                card:
                  type: custom:flower-card
                  entity: plant.alocatia
                  show_bars:
                    - moisture
                    - temperature
                    - illuminance
                    - conductivity
      - type: template
        entity: media_player.echo_jeanne
        icon: mdi:play-pause
        icon_color: |-
          {% if is_state(entity, 'playing') %} 
            #03A9F4
          {% else %}
           grey
          {% endif %}
        tap_action:
          action: fire-dom-event
          browser_mod:
            service: browser_mod.popup
            data:
              title: Echo salon
              content:
                type: custom:stack-in-card
                cards:
                  - type: custom:mini-media-player
                    entity: media_player.echo_jeanne
                    source: full
                    volume_stateless: false
                    group: true
                    artwork: full-cover
                    tts:
                      platform: alexa
                      entity_id: media_player.echo_jeanne
                      type: announce
                    shortcuts:
                      hide_when_off: true
                      columns: 3
                      buttons:
                        - name: Playlist Jeanne
                          type: AMAZON_MUSIC
                          id: Playlist Jeanne
                        - name: RTL2
                          type: custom
                          id: joue la station RTL deux
                        - name: Pop- Rock
                          type: custom
                          id: joue du pop rock
                        - name: Rock
                          type: custom
                          id: joue du rock
                        - name: Musique douce
                          type: custom
                          id: joue de la musique douce
                        - name: Piano
                          type: custom
                          id: joue de la musique au piano
                        - name: Queen
                          type: custom
                          id: joue du Queen
                        - name: Vianney
                          type: custom
                          id: joue du Vianney
                        - name: Louane
                          type: custom
                          id: joue du Louane
                        - name: Playlist Jeanne
                          type: AMAZON_MUSIC
                          id: Playlist Jeanne sur le groupe rez_de_chaussee
                          icon: mdi:multicast
                        - name: RTL2
                          type: custom
                          id: >-
                            joue la station RTL deux sur le groupe
                            rez_de_chaussee
                          icon: mdi:multicast
                        - name: Pop- Rock
                          type: custom
                          id: joue du pop rock sur le groupe rez_de_chaussee
                          icon: mdi:multicast
                        - name: Rock
                          type: custom
                          id: joue du rock sur le groupe rez_de_chaussee
                          icon: mdi:multicast
                        - name: Musique douce
                          type: custom
                          id: >-
                            joue de la musique douce sur le groupe
                            rez_de_chaussee
                          icon: mdi:multicast
                        - name: Piano
                          type: custom
                          id: >-
                            joue de la musique au piano sur le groupe
                            rez_de_chaussee
                          icon: mdi:multicast
                        - name: Queen
                          type: custom
                          id: joue du Queen sur le groupe rez_de_chaussee
                          icon: mdi:multicast
                        - name: Vianney
                          type: custom
                          id: joue du Vianney sur le groupe rez_de_chaussee
                          icon: mdi:multicast
                        - name: Louane
                          type: custom
                          id: joue du Louane sur le groupe rez_de_chaussee
                          icon: mdi:multicast
      - type: template
        entity: cover.salon
        hold_action:
          action: toggle
        tap_action:
          action: fire-dom-event
          browser_mod:
            service: browser_mod.popup
            data:
              title: Volets du salon
              content:
                type: vertical-stack
                cards:
                  - type: custom:mushroom-cover-card
                    entity: cover.volet_du_salon_apero
                    name: Volet Apero
                    show_position_control: true
                    show_tilt_position_control: false
                    show_buttons_control: true
                  - type: custom:mushroom-cover-card
                    entity: cover.volet_du_salon_tv
                    name: Volet TV
                    show_position_control: true
                    show_tilt_position_control: false
                    show_buttons_control: true
        icon: |-
          {% if is_state(entity, 'open') %} 
           mdi:window-shutter-open
          {% elif is_state(entity, 'closed') %} 
           mdi:window-shutter
          {% else %}
           mdi:window-shutter-alert
          {% endif %}
        icon_color: |-
          {% if is_state(entity, 'open') %} 
           grey
          {% elif is_state(entity, 'closed') %} 
           grey
          {% else %}
           orange
          {% endif %}
      - type: template
        entity: light.0x84ba20fffe4b2581
        tap_action:
          action: fire-dom-event
          browser_mod:
            service: browser_mod.popup
            data:
              title: Lumières salon
              content:
                type: vertical-stack
                cards:
                  - type: custom:mushroom-light-card
                    entity: light.0x84ba20fffe4b2581
                    name: Petite Lampe
                    use_light_color: true
                    show_brightness_control: true
                    show_color_temp_control: true
                    show_color_control: false
                    collapsible_controls: true
                  - type: custom:mushroom-light-card
                    entity: light.lampadaire
                    use_light_color: false
                    show_brightness_control: false
                    show_color_temp_control: false
                    show_color_control: false
                    collapsible_controls: true
                  - type: custom:mushroom-light-card
                    entity: light.elephants
                    use_light_color: false
                    show_brightness_control: false
                    show_color_temp_control: false
                    show_color_control: false
                    collapsible_controls: true
                  - type: custom:mushroom-light-card
                    entity: light.cerisier
                    use_light_color: false
                    show_brightness_control: false
                    show_color_temp_control: false
                    show_color_control: false
                    collapsible_controls: true
        icon: mdi:lightbulb
        hold_action:
          action: toggle
        icon_color: |-
          {% if is_state(entity, 'on') %} 
           orange
          {% elif is_state(entity, 'off') %} 
           grey
          {% else %}
           grey
          {% endif %}
    alignment: end

1 « J'aime »

Suite à quelques questions en MP, je me permet une petite mise à jour…

Finalement j’utilise les versions « mushroom » plus que la tuile carrée type « minimalist »


J’ai remis un peu de cardmod pour avoir des espacements plus jolis sur la ligne de chips…

J’ai remarqué que tant qu’on reste en stack in vertical, on conserve le mode graphique et on n’est pas obligé de passer en full YAML:

Le code

Il y a des pop up sur tous les chips, bien sur on peut largement simplifier… Le code utilise les dépendances suivantes (facultative pour la plupart…):

  • les mushroom cards (template et chips en basique, light et cover dans les pop ups)
  • card-mod
  • vertical stack-in-card
  • browser-mod ( facultatif, utilisé pour tous les pop up)
  • mini-media (facultatif, pour le pop up du media player)
  • cutom flower card (facultatif, pour le pop up du mi-flora)
type: custom:vertical-stack-in-card
cards:
  - type: custom:mushroom-template-card
    entity: group.lumieres_salon
    icon: mdi:sofa
    icon_color: |
      {% if is_state(entity, 'on') %}
        #03A9F4
      {% else %}  
        grey
      {% endif %}
    primary: Salon
    secondary: '{{ states(''sensor.echo_jeanne_temperature'') }}°C'
    layout: horizontal
    tap_action:
      action: navigate
      navigation_path: /lovelace-smartphone/salon
    double_tap_action:
      action: navigate
      navigation_path: /lovelace-smartphone/salon
    hold_action:
      action: toggle
    badge_icon: |
      {% if is_state('binary_sensor.echo_salon_mouvement', 'on') %}
        mdi:motion-sensor
      {% else %}  
        mdi:motion-sensor-off
      {% endif %}
    badge_color: |
      {% if is_state('binary_sensor.echo_salon_mouvement', 'on') %}
        orange
      {% else %}  
        grey
      {% endif %}
  - type: custom:mushroom-chips-card
    chips:
      - type: template
        entity: plant.alocatia
        icon: mdi:flower
        icon_color: |-
          {% if is_state(entity, 'problem') %} 
           orange
          {% else %}
           grey
          {% endif %}
        tap_action:
          action: fire-dom-event
          browser_mod:
            service: browser_mod.popup
            data:
              title: Plante Marsupilami
              content:
                type: custom:mod-card
                card:
                  type: custom:flower-card
                  entity: plant.alocatia
                  show_bars:
                    - moisture
                    - temperature
                    - illuminance
                    - conductivity
                  battery_sensor: sensor.alocasia_zebrina_battery
      - type: template
        entity: media_player.echo_jeanne
        icon: mdi:play-pause
        icon_color: |-
          {% if is_state(entity, 'playing') %} 
            #03A9F4
          {% else %}
           grey
          {% endif %}
        tap_action:
          action: fire-dom-event
          browser_mod:
            service: browser_mod.popup
            data:
              title: Echo salon
              content:
                type: custom:stack-in-card
                cards:
                  - type: custom:mini-media-player
                    entity: media_player.echo_jeanne
                    source: full
                    volume_stateless: false
                    group: true
                    artwork: full-cover
                    tts:
                      platform: alexa
                      entity_id: media_player.echo_jeanne
                      type: announce
                    shortcuts:
                      hide_when_off: true
                      columns: 3
                      buttons:
                        - name: Playlist Jeanne
                          type: AMAZON_MUSIC
                          id: Playlist Jeanne
                        - name: RTL2
                          type: custom
                          id: joue la station RTL deux
                        - name: Pop- Rock
                          type: custom
                          id: joue du pop rock
                        - name: Rock
                          type: custom
                          id: joue du rock
                        - name: Musique douce
                          type: custom
                          id: joue de la musique douce
                        - name: Piano
                          type: custom
                          id: joue de la musique au piano
                        - name: Queen
                          type: custom
                          id: joue du Queen
                        - name: Vianney
                          type: custom
                          id: joue du Vianney
                        - name: Louane
                          type: custom
                          id: joue du Louane
                        - name: Playlist Jeanne
                          type: AMAZON_MUSIC
                          id: Playlist Jeanne sur le groupe rez_de_chaussee
                          icon: mdi:multicast
                        - name: RTL2
                          type: custom
                          id: >-
                            joue la station RTL deux sur le groupe
                            rez_de_chaussee
                          icon: mdi:multicast
                        - name: Pop- Rock
                          type: custom
                          id: joue du pop rock sur le groupe rez_de_chaussee
                          icon: mdi:multicast
                        - name: Rock
                          type: custom
                          id: joue du rock sur le groupe rez_de_chaussee
                          icon: mdi:multicast
                        - name: Musique douce
                          type: custom
                          id: >-
                            joue de la musique douce sur le groupe
                            rez_de_chaussee
                          icon: mdi:multicast
                        - name: Piano
                          type: custom
                          id: >-
                            joue de la musique au piano sur le groupe
                            rez_de_chaussee
                          icon: mdi:multicast
                        - name: Queen
                          type: custom
                          id: joue du Queen sur le groupe rez_de_chaussee
                          icon: mdi:multicast
                        - name: Vianney
                          type: custom
                          id: joue du Vianney sur le groupe rez_de_chaussee
                          icon: mdi:multicast
                        - name: Louane
                          type: custom
                          id: joue du Louane sur le groupe rez_de_chaussee
                          icon: mdi:multicast
        hold_action:
          action: navigate
          navigation_path: /lovelace-smartphone/echo
      - type: template
        entity: cover.salon
        hold_action:
          action: toggle
        tap_action:
          action: fire-dom-event
          browser_mod:
            service: browser_mod.popup
            data:
              title: Volets du salon
              content:
                type: vertical-stack
                cards:
                  - type: custom:mushroom-cover-card
                    entity: cover.volet_du_salon_apero
                    name: Volet Apero
                    show_position_control: true
                    show_tilt_position_control: false
                    show_buttons_control: true
                  - type: custom:mushroom-cover-card
                    entity: cover.volet_du_salon_tv
                    name: Volet TV
                    show_position_control: true
                    show_tilt_position_control: false
                    show_buttons_control: true
        icon: |-
          {% if is_state(entity, 'open') %} 
           mdi:window-shutter-open
          {% elif is_state(entity, 'closed') %} 
           mdi:window-shutter
          {% else %}
           mdi:window-shutter-alert
          {% endif %}
        icon_color: |-
          {% if is_state(entity, 'open') %} 
           grey
          {% elif is_state(entity, 'closed') %} 
           grey
          {% else %}
           orange
          {% endif %}
      - type: template
        entity: light.0x84ba20fffe4b2581
        tap_action:
          action: fire-dom-event
          browser_mod:
            service: browser_mod.popup
            data:
              title: Lumières salon
              content:
                type: vertical-stack
                cards:
                  - type: custom:mushroom-light-card
                    entity: light.0x84ba20fffe4b2581
                    name: Petite Lampe
                    use_light_color: true
                    show_brightness_control: true
                    show_color_temp_control: true
                    show_color_control: false
                    collapsible_controls: true
                  - type: custom:mushroom-light-card
                    entity: light.prise_lampadaire
                    use_light_color: false
                    show_brightness_control: false
                    show_color_temp_control: false
                    show_color_control: false
                    collapsible_controls: true
                  - type: custom:mushroom-light-card
                    entity: light.prise_elephants
                    use_light_color: false
                    show_brightness_control: false
                    show_color_temp_control: false
                    show_color_control: false
                    collapsible_controls: true
                  - type: custom:mushroom-light-card
                    entity: light.prise_cerisier
                    use_light_color: false
                    show_brightness_control: false
                    show_color_temp_control: false
                    show_color_control: false
                    collapsible_controls: true
                  - type: custom:mushroom-light-card
                    entity: light.prise_tradfri
                    use_light_color: false
                    show_brightness_control: false
                    show_color_temp_control: false
                    show_color_control: false
                    collapsible_controls: true
        icon: mdi:lightbulb
        hold_action:
          action: toggle
        icon_color: |-
          {% if is_state(entity, 'on') %} 
           orange
          {% elif is_state(entity, 'off') %} 
           grey
          {% else %}
           grey
          {% endif %}
    alignment: end
    card_mod:
      style:
        style: |
          ha-card {
            padding-top: 0px;
            margin-top: -8px;
            padding-bottom: 8px;
            padding-left: 8px;
            padding-right: 8px;
          }

J’ai fait d’autres tests qui peuvent intéresser car on a là aussi un rendu très « mushroom » :

image

Cependant ici, avec le stackin horizontal, on perd la capacité à passer par l’interface graphique et on passe en full YAML, ce qui est dommage car l’idée de mushroom est justement de rester graphique.

le code
  • les mushroom cards (template et chips en basique, light et cover dans les pop ups)
  • card-mod
  • vertical stack-in-card
  • browser-mod ( facultatif, utilisé pour tous les pop up)
  • mini-media (facultatif, pour le pop up du media player)
  • cutom flower card (facultatif, pour le pop up du mi-flora)
type: custom:vertical-stack-in-card
horizontal: true
cards:
  - type: custom:mushroom-template-card
    entity: group.lumieres_salon
    icon: mdi:sofa
    icon_color: |
      {% if is_state(entity, 'on') %}
        #03A9F4
      {% else %}  
        grey
      {% endif %}
    primary: Salon
    secondary: '{{ states(''sensor.echo_jeanne_temperature'') }}°C'
    layout: horizontal
    tap_action:
      action: navigate
      navigation_path: /lovelace-smartphone/salon
    double_tap_action:
      action: navigate
      navigation_path: /lovelace-smartphone/salon
    hold_action:
      action: toggle
    badge_icon: |
      {% if is_state('binary_sensor.echo_salon_mouvement', 'on') %}
        mdi:motion-sensor
      {% else %}  
        mdi:motion-sensor-off
      {% endif %}
    badge_color: |
      {% if is_state('binary_sensor.echo_salon_mouvement', 'on') %}
        orange
      {% else %}  
        grey
      {% endif %}
  - type: custom:mushroom-chips-card
    chips:
      - type: template
        entity: plant.alocatia
        icon: mdi:flower
        icon_color: |-
          {% if is_state(entity, 'problem') %} 
           orange
          {% else %}
           grey
          {% endif %}
        tap_action:
          action: fire-dom-event
          browser_mod:
            service: browser_mod.popup
            data:
              title: Plante Marsupilami
              content:
                type: custom:mod-card
                card:
                  type: custom:flower-card
                  entity: plant.alocatia
                  show_bars:
                    - moisture
                    - temperature
                    - illuminance
                    - conductivity
                  battery_sensor: sensor.alocasia_zebrina_battery
      - type: template
        entity: media_player.echo_jeanne
        icon: mdi:play-pause
        icon_color: |-
          {% if is_state(entity, 'playing') %} 
            #03A9F4
          {% else %}
           grey
          {% endif %}
        tap_action:
          action: fire-dom-event
          browser_mod:
            service: browser_mod.popup
            data:
              title: Echo salon
              content:
                type: custom:stack-in-card
                cards:
                  - type: custom:mini-media-player
                    entity: media_player.echo_jeanne
                    source: full
                    volume_stateless: false
                    group: true
                    artwork: full-cover
                    tts:
                      platform: alexa
                      entity_id: media_player.echo_jeanne
                      type: announce
                    shortcuts:
                      hide_when_off: true
                      columns: 3
                      buttons:
                        - name: Playlist Jeanne
                          type: AMAZON_MUSIC
                          id: Playlist Jeanne
                        - name: RTL2
                          type: custom
                          id: joue la station RTL deux
                        - name: Pop- Rock
                          type: custom
                          id: joue du pop rock
                        - name: Rock
                          type: custom
                          id: joue du rock
                        - name: Musique douce
                          type: custom
                          id: joue de la musique douce
                        - name: Piano
                          type: custom
                          id: joue de la musique au piano
                        - name: Queen
                          type: custom
                          id: joue du Queen
                        - name: Vianney
                          type: custom
                          id: joue du Vianney
                        - name: Louane
                          type: custom
                          id: joue du Louane
                        - name: Playlist Jeanne
                          type: AMAZON_MUSIC
                          id: Playlist Jeanne sur le groupe rez_de_chaussee
                          icon: mdi:multicast
                        - name: RTL2
                          type: custom
                          id: >-
                            joue la station RTL deux sur le groupe
                            rez_de_chaussee
                          icon: mdi:multicast
                        - name: Pop- Rock
                          type: custom
                          id: joue du pop rock sur le groupe rez_de_chaussee
                          icon: mdi:multicast
                        - name: Rock
                          type: custom
                          id: joue du rock sur le groupe rez_de_chaussee
                          icon: mdi:multicast
                        - name: Musique douce
                          type: custom
                          id: >-
                            joue de la musique douce sur le groupe
                            rez_de_chaussee
                          icon: mdi:multicast
                        - name: Piano
                          type: custom
                          id: >-
                            joue de la musique au piano sur le groupe
                            rez_de_chaussee
                          icon: mdi:multicast
                        - name: Queen
                          type: custom
                          id: joue du Queen sur le groupe rez_de_chaussee
                          icon: mdi:multicast
                        - name: Vianney
                          type: custom
                          id: joue du Vianney sur le groupe rez_de_chaussee
                          icon: mdi:multicast
                        - name: Louane
                          type: custom
                          id: joue du Louane sur le groupe rez_de_chaussee
                          icon: mdi:multicast
        hold_action:
          action: navigate
          navigation_path: /lovelace-smartphone/echo
      - type: template
        entity: cover.salon
        hold_action:
          action: toggle
        tap_action:
          action: fire-dom-event
          browser_mod:
            service: browser_mod.popup
            data:
              title: Volets du salon
              content:
                type: vertical-stack
                cards:
                  - type: custom:mushroom-cover-card
                    entity: cover.volet_du_salon_apero
                    name: Volet Apero
                    show_position_control: true
                    show_tilt_position_control: false
                    show_buttons_control: true
                  - type: custom:mushroom-cover-card
                    entity: cover.volet_du_salon_tv
                    name: Volet TV
                    show_position_control: true
                    show_tilt_position_control: false
                    show_buttons_control: true
        icon: |-
          {% if is_state(entity, 'open') %} 
           mdi:window-shutter-open
          {% elif is_state(entity, 'closed') %} 
           mdi:window-shutter
          {% else %}
           mdi:window-shutter-alert
          {% endif %}
        icon_color: |-
          {% if is_state(entity, 'open') %} 
           grey
          {% elif is_state(entity, 'closed') %} 
           grey
          {% else %}
           orange
          {% endif %}
      - type: template
        entity: light.0x84ba20fffe4b2581
        tap_action:
          action: fire-dom-event
          browser_mod:
            service: browser_mod.popup
            data:
              title: Lumières salon
              content:
                type: vertical-stack
                cards:
                  - type: custom:mushroom-light-card
                    entity: light.0x84ba20fffe4b2581
                    name: Petite Lampe
                    use_light_color: true
                    show_brightness_control: true
                    show_color_temp_control: true
                    show_color_control: false
                    collapsible_controls: true
                  - type: custom:mushroom-light-card
                    entity: light.prise_lampadaire
                    use_light_color: false
                    show_brightness_control: false
                    show_color_temp_control: false
                    show_color_control: false
                    collapsible_controls: true
                  - type: custom:mushroom-light-card
                    entity: light.prise_elephants
                    use_light_color: false
                    show_brightness_control: false
                    show_color_temp_control: false
                    show_color_control: false
                    collapsible_controls: true
                  - type: custom:mushroom-light-card
                    entity: light.prise_cerisier
                    use_light_color: false
                    show_brightness_control: false
                    show_color_temp_control: false
                    show_color_control: false
                    collapsible_controls: true
        icon: mdi:lightbulb
        hold_action:
          action: toggle
        icon_color: |-
          {% if is_state(entity, 'on') %} 
           orange
          {% elif is_state(entity, 'off') %} 
           grey
          {% else %}
           grey
          {% endif %}
    alignment: end
    style: |
      ha-card {
        padding-top: 15px;
        padding-bottom: 15px;
        margin-left: -50px;
        padding-left: -150px;
        padding-right: 15px;
      }


Et pour finir pour ceux qui veulent jouer avec cardmod pour modifier des cartes mushroom, je suis tombé sur cet excellent post sur le forum anglophone, qui liste TOUTES les modifications possibles sur les cartes mushroom… une mine d’or:

2 « J'aime »

Le dashboard complet utilise principalement ce modèle de cartes et d’autres cartes mushroom template, voir ma presentation:

Puis de nombreuses sous vues par pièces ou par sujet accessible via les clic simples ou doubles suivant les cas.

1 « J'aime »

Petit tutoriel pas à pas pour ajouter une room card simplifiée:

N’ayez pas peur de tenter d’ajouter une telle carte à votre dashboard…
Avec cette version simplifiée, vous pouvez tenter, même débutants.

Tout y est faisable en interface graphique, pas besoin de mettre les doigts dans le YAML…

Ceci permet d’obtenir la carte suivante:

La carte simple:
image

La carte améliorée avec card_mod en faisant l’étape 3 en plus:
image

Une variante horizontale en prenant le code de l’étape 5 (avec card mod):
image

Dont le comportement sera le suivant une fois configurée:

  • Si la piece est « utilisée » (ex lumière allumée) l’icone canapé sera bleue (grise sinon)
  • Si on clique sur le canapé (en fait sur toute la moitié haute de la carte), on ouvre un raccourci vers une sous vue dédiée au salon (à définir par ailleurs bien sûr…)
  • Si on reste appuyé sur le canapé (en fait toute la partie du haut) on bascule (toggle) l’entité (ex la lumière) que l’on a lié à l’icone canapé
  • Si le capteur de mouvement détecte un mouvement, le petit badge a coté du canapé sera orange (gris sinon)
  • Le capteur de temperature indiquera la temperature de la pièce (à la place de unknown °C)
  • Les icones et couleurs des 3 boutons changerons en fonction de l’état de l’entité associée (media player, volet, lumière)
  • L’appui sur un des 3 bouton lancera un pop-up (la page « more info » de l’entité utilisée, média player, volet ou lumière)
  • l’appui long sur le bouton volet ou lumière changera l’état de celui ci (action toggle).

Coté dépendances, la carte utilise les ressources suivantes qu’il faut installer avant (via HACS par exemple, c’est le plus simple):

Il n’y a besoin de rien de plus. Il n’y a plus qu’à suivre la procédure pas à pas ci dessous :

1: Ajouter cette carte à votre dashboard

intégrer la carte brute

C’est simple, copiez le code ci dessous.

type: custom:vertical-stack-in-card
cards:
  - type: custom:mushroom-template-card
    entity: light.votre_lumière
    icon: mdi:sofa
    icon_color: |
      {% if is_state(entity, 'on') %}
        blue
      {% else %}  
        grey
      {% endif %}
    primary: Salon
    secondary: '{{ states('sensor.votre_capteur_temperature') }}°C'
    layout: horizontal
    tap_action:
      action: navigate
      navigation_path: /votre_url_salon
    double_tap_action:
      action: navigate
      navigation_path: /votre_url_salon
    hold_action:
      action: toggle
    badge_icon: |
      {% if is_state('binary_sensor.votre_capteur_mouvement', 'on') %}
        mdi:motion-sensor
      {% else %}  
        mdi:motion-sensor-off
      {% endif %}
    badge_color: |
      {% if is_state('binary_sensor.votre_capteur__mouvement', 'on') %}
        orange
      {% else %}  
        grey
      {% endif %}
  - type: custom:mushroom-chips-card
    chips:
      - type: template
        entity: media_player.votre_media_player
        icon: mdi:play-pause
        icon_color: |-
          {% if is_state(entity, 'playing') %} 
            green
          {% else %}
           grey
          {% endif %}
        tap_action:
          action: more-info
      - type: template
        entity: cover.votre_volet_salon
        hold_action:
          action: toggle
        tap_action:
          action: more-info
        icon: |-
          {% if is_state(entity, 'open') %} 
           mdi:window-shutter-open
          {% elif is_state(entity, 'closed') %} 
           mdi:window-shutter
          {% else %}
           mdi:window-shutter-alert
          {% endif %}
        icon_color: |-
          {% if is_state(entity, 'open') %} 
           grey
          {% elif is_state(entity, 'closed') %} 
           grey
          {% else %}
           orange
          {% endif %}
      - type: template
        entity: light.votre_lumiere
        icon: mdi:lightbulb
        tap_action:
          action: more-info
        hold_action:
          action: toggle
        icon_color: |-
        {% if is_state(entity, 'on') %} 
         orange
        {% elif is_state(entity, 'off') %} 
         grey
        {% else %}
         grey
        {% endif %}
    alignment: end

Dans votre dashboard, cliquez sur les 3 points en haut et faites « modifier le dashboard »:
image

Cliquez sur ajouter une carte, et sélectionnez la carte « manuel » tout en bas.

Remplacez type: ' ' par le code que vous venez de copier, sauvegardez la carte (cliquez « Enregistrer ») et passez à l’étape suivante, « vos réglages »…

2: Configurer la carte avec vos entités

Faites vos réglages

Cliquez sur la carte nouvellement ajoutée et faites « modifier »:
image
Ceci va ouvrir l’interface graphique suivante:

Note: il y a parfois un effet curieux et l’interface graphique n’est pas disponible, pas de panique!


Vous pouvez bien sûr modifier le YAML directement en cliquant sur ‹ afficher l’éditeur de code › … Mais on peut aussi récupérer l’interface normale:

  • Cliquez sur annuler ou enregistrer.
  • Cliquez sur ‹ + ajouter une carte ›
  • ajoutez une carte « pile horizontale » par exemple
  • Cliquez alors sur annuler
  • revenez modifier votre room card.

Comme par magie l’interface graphique est disponible. Je ne comprends pas ce phénomène qui est relativement nouveau chez moi…

Etape A la carte mushroom template: la partie haute de la carte

En cliquant sur l’onglet 1 on peut modifier toute la partie haute de la carte:
image

  • en premier l’entité (à la place de light.votre_lumière) qui sera ensuite nommée entity dans le reste de la carte et pilotera le changement de couleur de l’icone canapé (bleu si ‹ on › dans l’exemple) moi j’y met la lumière de la pièce, on peut aussi y mettre un groupe de lumières le cas échéant. Entité à mettre dans la partie entourée en rouge ci dessus.
  • puis dans l’ordre tous les items de la carte mushroom template:
  • l’icône principale (ici mdi:sofa)
  • sa couleur (bleu si l’entité est on, gris sinon)
  • l’info principale (ici Salon, mais libre à vous de mettre ce que vous voulez, voire l’étape 4…)
  • l’info secondaire (ici mettre votre capteur de température à la place de sensor.votre_capteur_temperature, vous pouvez ajouter un capteur d’humidité en utilisant le même type de template, supprimer cette information ou mettre ce que vous voulez, voir l’étape 4 pour plus de renseignements…)
  • puis le badge (mini icône capteur de mouvement dans ce cas, où il faut remplacer binary_sensor.votre_capteur_mouvement par la bonne entité pour gérer la couleur et l’icone)
  • enfin le comportement en cas de clic sur cette partie de la carte (ici lien vers la page « votre url salon », url à remplacer par exemple par la sous vue du dashboard dédiée à la pièce considérée), dans mushroom, on peut définir un comportement différent en simple clic, double clic et clic long.
  • en cas d’appui long il est spécifié « toggle » ce qui fera basculer l’état de l’entité liée dans l’encadré rouge (la lumière dans l’exemple)

Etape B la ligne de mushroom chips: les 3 boutons en bas de la carte

En cliquant sur l’onglet 2 on accède au réglage de la barre de chips (les boutons) :


Pour régler chaque bouton (média player, volet et lumière) il faudra appuyer sur le petit crayon à coté du chip concerné, exemple avec la lumière (le troisième):
image

  • Et là encore il suffit de mettre votre lumière à la place de l’entité au début (ou un groupe de lumières le cas échéant, à la place de light.votre_lumière comme pour la partie A, entouré en rouge ci dessus…)
  • puis éventuellement de modifier l’icone, sa couleur, etc…
  • c’est là aussi que vous pouvez modifier les comportement sur les appui boutons (simple clic, clic long et double clic). Par défaut j’ai mis toggle sur appui long (si on reste appuyé on bascule l’éclairage) et « more info » pour les autres pour faire un genre de pop up…

Il suffit ensuite de recommencer le même réglage avec les autres chips pour les volets et le média-player
Libre à vous d’ajouter d’autres chips sur le même modèle (pour un chauffage par exemple), de les modifier ou d’en supprimer…

3: Améliorer l’esthétique

Petit bonus de mise en page avec Card_mod

Si vous avez installé card_mod, vous pouvez ajouter le code ci dessous à la fin de l’onglet 2 (en cliquant sur les accolades : {} pour passer localement (et temporairement) en YAML)

card_mod:
  style:
    style: |
      ha-card {
        padding-right: 15px;
        padding-left: 15px;
        padding-bottom: 15px;
      }

puis cliquer sur « Enregistrer ».
Note: si vous remodifiez la carte ultérieurement, l’interface graphique reste disponible, même si vous êtes passé temporairement en mode YAML, pas d’angoisse…

ou sinon vous copiez-collez le code complet avec card_mod à l'étape 1
type: custom:vertical-stack-in-card
cards:
  - type: custom:mushroom-template-card
    entity: light.votre_lumière
    icon: mdi:sofa
    icon_color: |
      {% if is_state(entity, 'on') %}
        blue
      {% else %}  
        grey
      {% endif %}
    primary: Salon
    secondary: '{{ states('sensor.votre_capteur_temperature') }}°C'
    layout: horizontal
    tap_action:
      action: navigate
      navigation_path: /votre_url_salon
    double_tap_action:
      action: navigate
      navigation_path: /votre_url_salon
    hold_action:
      action: toggle
    badge_icon: |
      {% if is_state('binary_sensor.votre_capteur_mouvement', 'on') %}
        mdi:motion-sensor
      {% else %}  
        mdi:motion-sensor-off
      {% endif %}
    badge_color: |
      {% if is_state('binary_sensor.votre_capteur__mouvement', 'on') %}
        orange
      {% else %}  
        grey
      {% endif %}
  - type: custom:mushroom-chips-card
    chips:
      - type: template
        entity: media_player.votre_media_player
        icon: mdi:play-pause
        icon_color: |-
          {% if is_state(entity, 'playing') %} 
            green
          {% else %}
           grey
          {% endif %}
        tap_action:
          action: more-info
      - type: template
        entity: cover.votre_volet_salon
        hold_action:
          action: toggle
        tap_action:
          action: more-info
        icon: |-
          {% if is_state(entity, 'open') %} 
           mdi:window-shutter-open
          {% elif is_state(entity, 'closed') %} 
           mdi:window-shutter
          {% else %}
           mdi:window-shutter-alert
          {% endif %}
        icon_color: |-
          {% if is_state(entity, 'open') %} 
           grey
          {% elif is_state(entity, 'closed') %} 
           grey
          {% else %}
           orange
          {% endif %}
      - type: template
        entity: light.votre_lumiere
        icon: mdi:lightbulb
        tap_action:
          action: more-info
        hold_action:
          action: toggle
        icon_color: |-
          {% if is_state(entity, 'on') %} 
           orange
          {% elif is_state(entity, 'off') %} 
           grey
          {% else %}
           grey
          {% endif %}
    alignment: end
    card_mod:
      style:
        style: |
          ha-card {
            padding-right: 15px;
            padding-left: 15px;
            padding-bottom: 15px;
          }

Grâce à Card_mod, les chips ne seront plus collés au bord (espace de 15pixel), ce qui est plus joli…
image

Il ne vous reste plus qu’à refaire tout ça pour faire d’autres pieces que le salon, en changeant le nom, l’icone et les entités associées bien sûr…

4: Pour aller un peu plus loin, un petit mot sur les templates JINJA2:

Mushroom template utilise le template Jinja2

Il s’agit de la syntaxe qui va être utilisée pour piloter la carte mushroom template et les mushroom chips.
Basiquement les syntaxes les plus utilisées ici seront de deux types :

Les structures "textuelles" :
{{ states('sensor.votre_capteur_temperature') }}°C

Cette structure vous permet de transformer en texte ce qui va se trouver entre double accolades, donc par exemple {{ states('sensor.votre_capteur_temperature') }}°C donnera la valeur (en texte) de states('sensor.votre_capteur_temperature') (c’est à dire l’état de l’entité, ou encore dans l’exemple la temperature de votre capteur) suivi du texte « °C ». Cette syntaxe permet ainsi de modifier un texte avec des valeurs de capteurs (comme par exemple dans l’info secondaire de la carte.
Ainsi si vous voulez afficher température et humidité sous la forme « 18°C / 55% » il vous faut taper la syntaxe:

{{ states('sensor.votre_capteur_temperature') }}°C / {{ states('sensor.votre_capteur_humidite') }}%

Ce qui est entre doubles accolades sera « calculé » par HA, le reste sera juste le texte que vous avez tapé.

Les structures conditionnelles:

Par exemple

{% if is_state(entity, 'on') %} 
orange
{% elif is_state(entity, 'off') %} 
grey
{% else %}
grey
{% endif %}

Dans ce cas on va tester des blocs conditionnels (tout ce qui sera entre les {% et %}):

{% if condition1 %} 
message1 
{% else %} 
message2 
{% endif %}

Si la condition 1 est vraie, on affichera le texte qui suit les accolades (message1 ici) sinon le texte qui suit les accolades de {% else %} donc ici message2.
On n’affichera donc que le texte qui correspond aux conditions (message1 ou message2 dans l’exemple ci dessus). C’est cette syntaxe qui est utilisée pour choisir par exemple la couleur ou l’icone dans les templates.

La condition peut être faite de plusieurs façon équivalentes (entity correspond à l’entité qui a été liée dans la carte, c’est un raccourci offert par la carte mushroom…) il sera donc complètement equivalent d’écrire :

{% if is_state(entity, 'on') %} 
{% if is_state('sensor.entity_id', 'on') %} 
{% if states(entity) == 'on' %} 
{% if states('sensor.entity_id') == 'on' %} 

Astuce à utiliser sans retenue: vous pouvez tester vos syntaxes en allant les taper dans « outils de développement » / onglet « modèles »:

5: Variante horizontale

Petit bonus suivant vos préférences

Cette variante Horizontale se configure de la même façon avec les étapes 1 et 2 (et eventuellement 4) mais avec le look suivant:
image
Il faut avoir card_mod installé:

le code complet à utiliser à l'étape 1
type: custom:vertical-stack-in-card
cards:
  - type: horizontal-stack
    cards:
      - type: custom:mushroom-template-card
        entity: light.votre_lumière
        icon: mdi:sofa
        icon_color: |
          {% if is_state(entity, 'on') %}
            yelow
          {% else %}  
            grey
          {% endif %}
        primary: Salon Simplicfié
        secondary: '{{ states(''sensor.votre_capteur_temperature'') }}°C'
        layout: horizontal
        tap_action:
          action: navigate
          navigation_path: /votre_url_salon
        double_tap_action:
          action: navigate
          navigation_path: /votre_url_salon
        hold_action:
          action: toggle
        badge_icon: |
          {% if is_state('binary_sensor.votre_capteur_mouvement', 'on') %}
            mdi:motion-sensor
          {% else %}  
            mdi:motion-sensor-off
          {% endif %}
        badge_color: |
          {% if is_state('binary_sensor.votre_capteur__mouvement', 'on') %}
            orange
          {% else %}  
            grey
          {% endif %}
        card_mod:
          style:
            style: |
              ha-card {
                margin-right: -12px;
                padding-right: 0px;
              }
      - type: custom:mushroom-chips-card
        chips:
          - type: template
            entity: media_player.votre_media_player
            icon: mdi:play-pause
            icon_color: |-
              {% if is_state(entity, 'playing') %} 
                green
              {% else %}
               grey
              {% endif %}
            tap_action:
              action: more-info
          - type: template
            entity: cover.votre_volet_salon
            hold_action:
              action: toggle
            tap_action:
              action: more-info
            icon: |-
              {% if is_state(entity, 'open') %} 
               mdi:window-shutter-open
              {% elif is_state(entity, 'closed') %} 
               mdi:window-shutter
              {% else %}
               mdi:window-shutter-alert
              {% endif %}
            icon_color: |-
              {% if is_state(entity, 'open') %} 
               grey
              {% elif is_state(entity, 'closed') %} 
               grey
              {% else %}
               orange
              {% endif %}
          - type: template
            entity: light.votre_lumiere
            icon: mdi:lightbulb
            hold_action:
              action: toggle
            icon_color: |-
              {% if is_state(entity, 'on') %} 
               orange
              {% elif is_state(entity, 'off') %} 
               grey
              {% else %}
               grey
              {% endif %}
        alignment: end
        card_mod:
          style:
            style: |
              ha-card {
                padding-top: 12px;
                margin-top: 0px;
                padding-bottom: 12px;
                margin-left: -12px
                padding-left: 0px;
                padding-right: 8px;
              }

Note 1: à l’étape 2, les onglets de réglage 1 et 2 sont juste un cran plus bas, Le reste des réglages (étapes 2 et 4) est identique.

.
Note 2: la répartition des deux cartes de bases est de 50/50 par défaut
image
Si vous êtes génés par celà, en particulier quand les colones sont étroites, il suffit dans le code YAML de la carte de modifier:

  • margin-right: -12px dans la carte template, en mettant une valeur négative plus grande (par exemple -62px), vous autorisez le texte à déborder (de 50 px) sur la partie des chips.
  • margin-left: -12px dans la carte chips, en mettant une valeur plus grande (par exemple -62px), vous autorisez les chips à déborder (de 50px) sur la carte template.

N’hésitez pas à faire plusieurs essais de valeurs (-24px, -50px, -100px…) et a changer la taille de la fenêtre pour voir comment celà se comporte suivant les tailles des colones.
Le réglage actuel (-12px) assure l’absence de recouvrement, mais attention, si vous allez trop loin, il peut finir pas y avoir superposition du texte et des chips:
image

[mis à jour 12/04/2024]

3 « J'aime »

Salut, merci pour le code de cette carte, par contre pour moi c’est en mode yaml dès le départ avec les deux exemples, que ce soit avec card-mod ou pas, une idée ? Merci

L’éditeur visuel n’est pas pris en charge pour cette configuration:

  • Cannot read properties of undefined (reading ‹ bind ›)

Vous pouvez toujours modifier votre configuration en YAML.

Salut @Xek
Sans ton code et où tu l’as mis, c’est compliqué de deviner le souci

Salut, le code c’est celui de BBE du message juste au dessus du mien :wink:

Tu as essayé d’enregistrer la carte, sortir puis la modifier?

Chez moi ça marche comme ça.

Autre question, tu as bien installé mushroom et stack in ?

Oui oui mais rien a faire, pas d’éditeur visuel

J’ai bien

stack in card
vertical stack in card
card mod
mushroom

Probablement les entité génériques que j’ai mis qui posent problème.

Essaie en renommant toutes les entités dans le YAML…

Si ça ne marche pas j’essaierai de refaire une version du code qui marche, mais chez moi il me semblait que ça marchait…

[edit] chez moi j’ai eu un petit souci temporaire, mais apres un refresh de la page, ça marche…

c’est déjà fait et ça ne vient pas de là, :wink: j’ai mis toute mes entités, cela fonctionne bien mais impossible d’avoir l’interface graphique, du coup c’est pas simple de rajouter d’autre entité, bizarre

essaie un refresh de la page du navigateur, voire de vider le cache.

Je viens de tester avec le code ci dessus, et initialement comme toi, puis apres refresh de chrome c’était ok.

J’allais justement répondre après avoir testé un refresh et vidé le cache, c’est OK :slight_smile: merci

on va commencer à s’amuser :slight_smile:

1 « J'aime »

Bon bricolage !

Et montre nous ce que tu auras fait pour nous donner des idées !