đŸ› ïž [dashboard & thĂšme] Version custom du theme Soft-UI (Yaml inclus)

Salut Ă  tous,

I) Intro

j’ai rĂ©cemment retapĂ© mon dashboard pour l’afficher sur une tablette dans ma cuisine.
Le cahier des charges Ă©tait assez simple:

  1. une interface homogÚne et cohérente (pas de cartes disparates)
  2. n’afficher que les infos et controles dont on a vraiment besoin sur cette tablette au mur (autant dire la pression des pneus de la voiture, le ping du routeur et la tempĂ©rature de la chaudiĂšre ne nous intĂ©ressent pas ici
)
  3. rester simple.

C’est encore un « work in progress Â» mais je pense que la majoritĂ© est lĂ .

Voici à quoi ressemble la page principale qui doit contenir la majorité des élements dont on a besoin quotidiennement:

en light mode:

et en dark mode:

le dashboard s’organise de la sorte:
C’est en anglais car j’avais partagĂ© avec la commu mondiale en premier lieu

Les autres vues sont tout aussi simples
la video surveillance:

Le suivi des consos:

Le menu extra (les trucs dont on se sert moins souvent mais qui restent utiles):

Et, la tablette Ă©tant dans la cuisine, un menu recettes qui n’est qu’un iframe d’une application de livre de recettes que j’hĂ©berge sur le serveur:

Enfin, Ă  quoi ca ressemble une fois dans la cuisine

II) Mise en place

Perso je suis parti de ce thĂšme dispo sur HACS:
image

Ensuite, j’ai pas mal customizĂ© le thĂšme et vous trouverez le code ICI
Vous pouvez remplacer le code d’origine du fichier soft-ui.yaml (dans le dossier thùmes) par mon code. Je vous invite aussi à faire vos propre modifications (changer les couleurs, les effets d’ombre
) :slight_smile:

Ensuite, pour comprendre comment mes cartes sont fichues, je vous ai mis tout le code de mon dashboard ICI

Il contient notamment les templates de mes boutons. Je ne peux pas tout dĂ©tailler mais voici quelques commentaires sur mon bouton lights. Il s’agit du bouton qui ressemble Ă  ca en mode ON/OFF
image

Je suis tout sauf un dĂ©veloppeur donc vous pardonnerez les horreurs que j’ai pu commettre.
Le code ci-dessous est commenté, je vous conseille de prendre ma version originale sans commentaire sur github.

button_card_templates: 
  light: #le nom de notre template
    size: 35% #la taille de l'icone
    show_state: true
    tap_action:
      haptic: heavy
      action: toggle
    styles:
      icon:
        - color: rgb(var(--my-grey),0.8) #la couleur de l'icone par defaut. Ici la variable var(--my-grey) correspond au gris que j'ai défini dans le fichier theme

      card: #les dimensions du bouton
        - width: 120px
        - height: 120px
        - margin: auto
      grid: #la dispo de l'image, du non et de l'etat dans le bouton
        - grid-template-areas: '"i" "n" "s"'
        - grid-template-columns: 1fr
        - grid-template-rows: 1fr min-content min-content
      img_cell: #mise en page de l'image
        - align-self: start
        - text-align: start
        - justify-content: start
        - padding-left: 15px
      name: #mise en forme du nom
        - justify-self: start
        - padding-left: 12px
        - font-weight: bold
        - text-transform: lowercase #alors oui j'aime bien en minuscule!!!!
        - letter-spacing: 0.2em #et oui je trouve qu'espacer les lettres c'est plus "stylé"
        - font-size: 17px
        - text-transform: lowercase
        - padding-bottom: 2px
      state:  #mise en forme de l'etat
        - justify-self: start
        - padding-left: 12px
        - font-weight: bold
        - text-transform: lowercase
        - letter-spacing: 0.2em
        - font-size: 12px
        - opacity: 0.6
        - padding-bottom: 5px
        - opacity: 0.6
    state: #style conditionnel en mode ON
      - value: 'on'
        styles:
          icon:
            - color: rgb(var(--my-orange)) # l'icone s'affiche en orange (défini dans une variable comme le gris)
          card:
            - background-color: rgba(var(--my-orange),0.2) # l'icone s'affiche en orange aussi avec un peu de transparence
            - box-shadow: var(--my-box-shadow) # je change l'effet d'ombre pour donner un effet "bouton appuyé. L'ombre est aussi dans une de mes variables dans le theme

    card_mod:
      class: soft-ui #par defaut, le bouton utilise la mise en forme de la class soft-ui définie dans le fichier theme (principalement l'ombre en mode off)
      style: |
        ha-card {
          --primary-text-color: rgb(var(--my-grey)); #par defaut tous les textes sont en gris
        }

Voila! notre template light est créé dans le fichier raw de configuration.

Maintenant on peut ajouter une carte et le code sera aussi simple que ca:

type: custom:button-card #bah oui, on a créé un template pour ce type de carte
template: light #le nom du template
entity: entity.entity #l'entité que vous souhaitez controler (doit etre ON/OFF)
icon: mdi:icon# l'icone de votre choix
name: nom #le nom de votre choix

Dans le fichier dashboard.yaml sur githib, vous verrez que, hormis le template frame (mes cadres) et title (mes titres), tous les autre sont des dérivés de ce template light.
Certains ont des petits badges, d’autres ne sont pa des boolĂ©ens mais dans l’ensemble c’est toujours la mĂȘme chose!

Je suis dĂ©solĂ© de pas pouvoir faire une doc plus dĂ©taillĂ©e mais j’essaierai de rĂ©pondre aux questions s’il y en a.

22 « J'aime »

On imagine le temps passĂ© a rĂ©gler les petits dĂ©tails et l’implication pour que cela reste pratique et agrĂ©able a utilisĂ©, rien que pour cela c’est superbe.

Pour organiser tes lignes de codes je te laisse ce post

3 « J'aime »

Merci @Felix62 , c’est justement ce que je cherchais!!!

C’est beaucoup de bidouillage ce que j’ai fait et je pense que cette Decluttering-card va grandement amerliorer la maintenabilitĂ© de l’ensemble!

A nouveau merci pour l’astuce

Vraiment excellent boulot !

Wow magnifique merci pour le partage ainsi que les explications :ok_hand:

super idée, merci @ mathgoy

grace a toi, je suis en train d’écrire mon thĂšme :
je suis passé de ça :
image
à ça pour tester :slight_smile:
image
et je dois passer a ça lors d’un clic :
image
aprùs, dans le thùme, il y a plus de chose a mettre d’aprùs ce que j’ai vu, mais j’ai des nuits a passer dessus :slight_smile:

1 « J'aime »

bien joué ca rend bien!

petite astuce supplĂ©mentaire si tu cherches des ombres sympas et pretes a l’emploi:

bibliothùque d’effets d’ombre

PS: Tu viens de tomber dans le terrier du lapin blanc :smiley:
Perso j’ai pas encore vu le fond


3 « J'aime »

Perso effectivement la card decluterring peut ĂȘtre pas mal mais pour au final revenir a la mĂȘme chose que si tu faisais tous le code de la button caard dans la card elle mĂȘme

Pour les dĂ©butants cela peut commencer Ă  ĂȘtre compliquer car doivent aller voir dans plusieurs fichiers pour au final trouver la config custom de la card

Merci pour le partage @mathgoy :wink:

1 « J'aime »

Le 25 ou 63 dans l’url que @mathgoy a envoyer serais pas mal pour faire l’effet de bouton enfoncer :slight_smile:

Un seul mot:

Magnifique !!!

TrĂšs bon boulot.
Je vais aller pĂȘcher quelques petits trucs.
Vraiment sympa :blush:
Continue comme ça et merci à toi pour le partage.

1 « J'aime »

Je crois que le 25 c’est celui que j’ai pris

Sinon, Question: avec la carte decluttering, je peux aller utiliser la carte dans un autre dashboard?

Par exemple, je vais commencer un dashboard mobile et j’aimerais rĂ©utiliser mes « assets Â»
Je pourrais récupérer les memes boutons dans ce dashboard différent?

oui, pas de pb, c’est aussi ce que je fais entre le dashboard mobile et celui de la tablette

1 « J'aime »

Salut,
tu peu partager les box-shadow , stp?

Merci pour ce partage @mathgoy .

oui, bien sur, les voici :

  ha-card-box-shadow: "inset -4px -4px 5px #b38888, inset 4px 4px 5px #ffffff"
  ha-card-box-pressed: "inset -4px -4px 5px #ffffff, inset 4px 4px 5px #b38888"
2 « J'aime »

La sidebar ne s’affiche pas sur mobile et c’est trĂšs bien comme ça. Mais du coup, on n’a plus accĂšs au menu de navigation. Comment vous gĂ©rez ça de votre cotĂ© ?

J’aurai voulu afficher une card spĂ©ciale sur mobile mais je ne trouve pas comment faire.

Salut,
Tu peu utiliser c’est carte GitHub - zanna-37/hass-swipe-navigation: ↔ Swipe through Home Assistant Dashboard views on mobile.
en balayant a gauche ou droite pour changer de page.

En regardant son configurationyaml, la partie sidebar-card:

sidebar:
  digitalClock: true
  date: true
  dateFormat: dddd D MMMM
  hideTopMenu: false
  width:
    desktop: 12
    mobile: 0
    tablet: 12

hideTopMenu est sur false, alors que sur les screenshot ou le vois pas :stuck_out_tongue:
avec hideTopMenu sur false tu devrais avoir le menu de haut partout, pc ou mobile mais pas de sidebar sur mobile.

1 « J'aime »

J’ai cachĂ© tous les menus chez moi :

  hideTopMenu: true
  hideHassSidebar: true

et je voulais utiliser uniquement les liens de navigations de la sidebar. C’est peut ĂȘtre pas une super idĂ©e car je ne peux plus naviguer en mobile.

J’ai vu qu’il utilise aussi le mode kiosk qui fait pareil si j’ai bien compris.

Oui, avec kiosk mode tu peu cacher pas mal de chose dans HA.

hide_header:1 Boolean false Hides only the header.
hide_sidebar: Boolean false Hides only the sidebar.
hide_menubutton:1 Boolean false Hides only the sidebar menu icon.
hide_overflow: Boolean false Hides the top right overflow menu.
hide_notifications Boolean false Hide the notifications entry-point.
hide_account: Boolean false Hides the account icon.
hide_search: Boolean false Hides the search icon.
hide_assistant: Boolean false Hides the assistant icon.
hide_edit_dashboard Boolean false Hides the Edit dashboard button inside the top right overflow menu.
hide_refresh Boolean false Hides the Refresh button inside the top right overflow menu in lovelace yaml mode.
hide_unused_entities Boolean false Hides the Unused entities button inside the top right overflow menu in lovelace yaml mode.
hide_reload_resources Boolean false Hides the Reload resources button inside the top right overflow menu in lovelace yaml mode.
hide_dialog_header_history Boolean false Hides the History icon in the header of more-info dialogs.
hide_dialog_header_history Boolean false Hides the History icon in the header of more-info dialogs.
hide_dialog_header_action_items Boolean false Hides all the action items from the header of more-info dialogs.
hide_dialog_header_settings2 Boolean false Hides the Settings icon in the header of more-info dialogs.
hide_dialog_header_overflow2 Boolean false Hides the top right overflow menu in the header of more-info dialogs.
hide_dialog_history Boolean false Hides the History section in the more-info dialogs.
hide_dialog_logbook Boolean false Hides the Logbook section in the more-info dialogs.
hide_dialog_attributes Boolean false Hides the Attributes section in the more-info dialogs.
hide_dialog_media_actions Boolean false Hides the actions block in the more-info dialogs of media-player entities.
hide_dialog_update_actions Boolean false Hides the actions block in the more-info dialogs of update entities.
hide_dialog_timer_actions Boolean false Hides the actions block in the more-info dialogs of timer entities.
hide_dialog_climate_actions Boolean false Hides the actions block in the more-info dialogs of climate entities.
hide_dialog_history_show_more Boolean false Hides the Show more link in the History section of more-info dialogs.
hide_dialog_logbook_show_more Boolean false Hides the Show more link in the Logbook section of more-info dialogs.

Bon sinon pour mettre du responsive dans le sidebar, il faut faire des choses comme ça :

sidebar:
  digitalClock: true
  date: true
  dateFormat: dddd D MMMM
  hideTopMenu: true
  hideHassSidebar: false
  width:
    desktop: 15
    mobile: 0
    tablet: 23
  breakpoints:
    mobile: 699
    tablet: 1300
  style: |
    h1.digitalClock {
      font-size: 30px !important;
      line-height: 15px !important;
    }
    h2.date {
      font-size: 20px !important;
    }
    .sidebarMenu li {
      font-size: 15px !important;
      line-height: 20px !important;
    }

    @media screen and (max-width: 1700px) {
      h1.digitalClock {
        display: none !important;
      }
      h2.date {
        display: none !important;
      }
    }
    
    @media screen and (max-width: 1200px) {
      .sidebarMenu {
        margin-top: 0 !important;
        margin-bottom: 0 !important;
      }
      
      .sidebarMenu li {
        font-size: 10px !important;
        line-height: 15px !important;
      }
      .sidebar-inner {
        padding: 2px !important;
      }
    }

Les instructions @media screen... permettent de mettre du code css dependant de la largeur de l’écran.
Donc, je cache la clock et la date sur un Ă©cran moins de 1700, et je change le style du menu sur un Ă©cran < 1200px.

Comme ça j’ai un menu en mode mobile paysage et plus rien en mode mobile portrait.

2 « J'aime »