Dashboard - đŸŒ» Minimalist

Je pense que je passerais par un thermostat personnalisĂ© pour l’affichage.

Puis une automatisation, en mode queued sur changement de la consigne pour envoyer la consigne vers le thermostat réel.

A voir si avec un thermostat personnalisĂ©, la latence est toujours prĂ©sente. Si elle ne l’est pas autant partir directement sur l’automatisation en mode queue

Bonjour ami, pouvez-vous fournir le code de toute la carte que vous avez crĂ©Ă©e ? Parce que j’aime beaucoup ta carte

Bonsoir,

Pas besoin de partager le code, tu peux retrouver cette carte en utilisant « hacs » et installer la carte « simple thermostat » (catĂ©gorie frontend"). Tu peux aussi l’installer manuellement, tout est dĂ©crit sur la page github (recherche google "simple thermostat hacs).

Bonsoir

J’essaye d’installer le bouton retour, mais j’ai le message d’erreur suivant et je ne sais pas ce qu’il faut que je fasse pour corriger cette erreur.

Merci pour votre aide

J’ai mis ma conf dans le sujet :
https://forum.hacf.fr/t/simple-thermostat/8724/10

Bonjour Ă  tous !

J’ai dĂ©couvert HA il y a deux ans maintenant, et je m’éclate comme un gamin avec. Notamment avec l’aide de la communautĂ©, qu’elle soit française ou plus internationale, c’est incroyable tout ce qu’on peut faire !

Depuis quelques jours, j’ai dĂ©couvert ce « thĂšme » qui me plait beaucoup ; je suis donc en train de switcher mon ancien dashboard en « UI Minimalist ». J’ai commencĂ© par les cards plutĂŽt basiques, mais j’aborde maintenant des petites customisations et voici que je bloque


Les anciennes cards Ă  convertir
Avec l’aide de la communautĂ©, j’avais mis en place des cartes TempĂ©ratures qui visuellement et fonctionnellement me plaisaient beaucoup. Je souhaite donc adapter quelques chose qui s’en rapproche le plus possible, je ne suis pas convaincu par les exemples trouvĂ©s Ă  droite Ă  gauche


  • Le visuel
    image
Le code associé
type: entities
title: Salon
state_color: false
theme: transparent
entities:
  - entity: sensor.netatmo_air_quality_jouffroy_temperature
    name: Température
    type: custom:multiple-entity-row
    style: |
      .entity:not(.state)>div {
        color: var(--secondary-text-color);
      }
    state_header: Actuelle
    entities:
      - entity: sensor.stats_temp_salon_min
        name: Min
      - entity: sensor.stats_temp_salon_max
        name: Max
  - entity: sensor.netatmo_air_quality_jouffroy_humidity
    name: Humidité
  - entity: sensor.netatmo_air_quality_jouffroy_co2
    name: CO2
  - type: custom:swipe-card
    reset_after: 5
    parameters:
      roundLengths: true
      effect: coverflow
      speed: 650
      spaceBetween: 20
      threshold: 7
      coverflowEffect:
        rotate: 80
        depth: 300
        start_card: 1
    cards:
      - type: custom:hui-element
        card_type: horizontal-stack
        cards:
          - type: custom:mini-graph-card
            align_icon: state
            line_width: 3
            color_thresholds:
              - color: '#ef1d0f'
                value: 25
              - color: '#ef5a0f'
                value: 24
              - color: '#f0da11'
                value: 22
              - color: '#11f13a'
                value: 19
              - color: '#1da4f2'
                value: 15
            entities:
              - entity: sensor.netatmo_air_quality_jouffroy_temperature
                index: 0
            hour24: true
            more_info: false
            points_per_hour: 1
            show:
              labels: false
              name: false
          - type: custom:mini-graph-card
            align_icon: state
            entities:
              - entity: sensor.netatmo_air_quality_jouffroy_humidity
                index: 0
            hour24: true
            line_color: '#1da4f2'
            more_info: false
            name: Salon
            line_width: 3
            points_per_hour: 1
            show:
              labels: false
              name: false
      - type: custom:hui-element
        card_type: horizontal-stack
        cards:
          - type: custom:mini-graph-card
            align_icon: state
            entities:
              - entity: sensor.netatmo_air_quality_jouffroy_noise
                index: 0
            hour24: true
            line_color: '#ff0000'
            more_info: false
            name: Salon
            line_width: 3
            points_per_hour: 1
            show:
              labels: false
              name: false
          - type: custom:mini-graph-card
            align_icon: state
            entities:
              - entity: sensor.netatmo_air_quality_jouffroy_pressure
                index: 0
            hour24: true
            line_color: '#A700FF'
            more_info: false
            name: Salon
            line_width: 3
            points_per_hour: 1
            show:
              graph: bar
              labels: false
              name: false

Les avancées sur UI Minimalist
J’ai essayĂ©, tant bien que mal, d’opĂ©rer la transition, mais sans grand succĂšs


  • Le visuel
    image
Le code associé
      - type: 'custom:button-card'
        template: card_generic
        name: Salon
        show_label: false
        show_state: false
        show_name: false
        show_icon: false
        styles:
          card:
            - border-radius: var(--border-radius)
            - box-shadow: var(--box-shadow)
            - padding: 0px
        entity: sensor.netatmo_air_quality_jouffroy_temperature
        styles:
              grid:
                - grid-template-areas: '"item2 item2 item2 item2" "item3 item3 item3 item3"'
                - grid-template-rows: min-content min-content min-content min-content 
                - grid-template-columns: 1fr 1fr 1fr 1fr
                - row-gap: 7px
        custom_fields:
          item2:
            card:
              type: entities
              title: Salon
              state_color: false
              entities:
                - entity: sensor.netatmo_air_quality_jouffroy_temperature
                  name: Température
                  type: custom:multiple-entity-row
                  style: |
                    .entity:not(.state)>div {
                      color: var(--secondary-text-color);
                    }
                  state_header: Actuelle
                  entities:
                    - entity: sensor.stats_temp_salon_min
                      name: Min
                    - entity: sensor.stats_temp_salon_max
                      name: Max
                - entity: sensor.netatmo_air_quality_jouffroy_humidity
                  name: Humidité
                - entity: sensor.netatmo_air_quality_jouffroy_co2
                  name: CO2
          item3:
            card:
              type: custom:swipe-card
              reset_after: 5
              parameters:
                roundLengths: true
                effect: coverflow
                speed: 650
                spaceBetween: 20
                threshold: 7
                coverflowEffect:
                  rotate: 80
                  depth: 300
                  start_card: 1
              cards:
                - type: horizontal-stack
                  cards:
                    - type: custom:mini-graph-card
                      align_icon: state
                      line_width: 3
                      color_thresholds:
                        - color: '#ef1d0f'
                          value: 25
                        - color: '#ef5a0f'
                          value: 24
                        - color: '#f0da11'
                          value: 22
                        - color: '#11f13a'
                          value: 19
                        - color: '#1da4f2'
                          value: 15
                      entities:
                        - entity: sensor.netatmo_air_quality_jouffroy_temperature
                          index: 0
                      hour24: true
                      more_info: false
                      points_per_hour: 1
                      show:
                        labels: false
                        name: false
                    - type: custom:mini-graph-card
                      align_icon: state
                      entities:
                        - entity: sensor.netatmo_air_quality_jouffroy_humidity
                          index: 0
                      hour24: true
                      line_color: '#1da4f2'
                      more_info: false
                      name: Salon
                      line_width: 3
                      points_per_hour: 1
                      show:
                        labels: false
                        name: false
                - type: horizontal-stack
                  cards:
                    - type: custom:mini-graph-card
                      align_icon: state
                      entities:
                        - entity: sensor.netatmo_air_quality_jouffroy_noise
                          index: 0
                      hour24: true
                      line_color: '#ff0000'
                      more_info: false
                      name: Salon
                      line_width: 3
                      points_per_hour: 1
                      show:
                        labels: false
                        name: false
                    - type: custom:mini-graph-card
                      align_icon: state
                      entities:
                        - entity: sensor.netatmo_air_quality_jouffroy_pressure
                          index: 0
                      hour24: true
                      line_color: '#A700FF'
                      more_info: false
                      name: Salon
                      line_width: 3
                      points_per_hour: 1
                      show:
                        graph: bar
                        labels: false
                        name: false

Est-ce que l’un d’entre vous saurait m’aider Ă  rendre tout ceci plus « UI Minimalist-compatible » ? Je vous avoue ĂȘtre un peu Ă  court d’idĂ©es, j’arrive au bout de mes compĂ©tences sur HA


Merci Ă  vous !

PS: je vais Ă©galement poster un message sur le forum officiel HA, si j’obtiens des rĂ©ponses je pourrai vous les donner si cela vous intĂ©resse !

2 « J'aime »

Hello Clemalex,

Je cherche Ă  intĂ©grer une carte camĂ©ra (avec vue live), qui fonctionnait trĂšs bien avant UI Minimalist. J’ai essayĂ© avec tes templates intĂ©grĂ©s en mode custom card comme cela doit ĂȘtre fait aujourd’hui avec ce thĂšme, ou mĂȘme en les mettant « en dur » dans ma vue
 Rien Ă  faire !

Saurais-tu pourquoi ils ne semblent plus fonctionner ?

Merci !

Finalement, aprĂšs quelques heures passĂ©es Ă  m’arracher les cheveux, j’ai atterri sur un rĂ©sultat qui me convient :
image

1 « J'aime »

Hello,

Tu pourrais partager ton code stp :slight_smile: ?

Merci!

1 « J'aime »

Hello,

Comment récupÚres-tu le niveau de bruit et le CO2 ?
je cherche exactement ce type d’info :smiley:

merci !

Hello !

J’ai ces infos grñce au Netatmo Healthy Home Coach :wink:

1 « J'aime »

Hello Galadan,

Je tùche de poster ça ce soir ! Pas évident depuis le téléphone :sweat_smile:

Re,

Voici le code utilisé :

        - type: custom:button-card
          show_icon: false
          show_name: false
          show_label: false
          styles:
            grid:
              - grid-template-areas: "'item1 item1' 'item2 item2' 'item3 item3'"
              - grid-template-columns: 1fr 1fr
              - grid-template-rows: "min-content min-content min-content"
              - row-gap: 5px
            card:
              - border-radius: var(--border-radius)
              - box-shadow: var(--box-shadow)
              - padding: 10px
          custom_fields:
            item1:
              card:
                type: custom:button-card
                template: card_title
                name: Salon
                label: '[[[ return "Il fait actuellement " + states["sensor.netatmo_air_quality_jouffroy_temperature"].state + "°C dans le salon." ]]]'
            item2:
              card:
                type: custom:button-card
                template: list_2_items
                custom_fields:
                  item1:
                    card:
                      type: custom:button-card
                      template: card_generic 
                      entity: sensor.netatmo_air_quality_jouffroy_noise
                      icon: "mdi:volume-high"
                      styles:
                        icon:
                          - color: "rgba(var(--color-pink),0.8)"
                        img_cell:
                          - background-color: "rgba(var(--color-pink),.05)"
                        card:
                          - box-shadow: none
                  item2:
                    card:
                      type: custom:button-card
                      template: card_generic
                      entity: sensor.netatmo_air_quality_jouffroy_co2
                      icon: "mdi:molecule-co2"
                      styles:
                        icon:
                          - color: "rgba(var(--color-green),0.8)"
                        img_cell:
                          - background-color: "rgba(var(--color-green),.05)"
                        card:
                          - box-shadow: none
            item3:
              card:
                type: horizontal-stack
                cards:
                  - type: custom:button-card
                    template: card_graph
                    variables:
                      ulm_card_graph_color: "var(--google-red)"
                      ulm_card_graph_name: Température
                      ulm_card_graph_entity: sensor.netatmo_air_quality_jouffroy_temperature
                  - type: custom:button-card
                    template: card_graph
                    variables:
                      ulm_card_graph_color: "var(--google-blue)"
                      ulm_card_graph_name: Humidité
                      ulm_card_graph_entity: sensor.netatmo_air_quality_jouffroy_humidity

En revanche, je ne suis qu’un bidouilleur, j’imagine qu’il est loin d’ĂȘtre clean et pourrait ĂȘtre optimisĂ© :wink:

1 « J'aime »

Salut,

J’ai crĂ©er une pop-up pour amĂ©liorĂ© la carte « personne » en m’inspirant de la config de l’excellent @matt8707.

ezgif-2-073ed63820

Le code du template :

custom_card_person:
  template: 
    - "icon_info_bg"
    - "popup_custom_card_person"
  triggers_update: "all"
  variables:
    ulm_card_person_use_entity_picture: false
    ulm_card_person_zone1: ""
    ulm_card_person_zone2: ""
  label: >
    [[[
      var location = states[variables.ulm_card_person_entity].state
      if (location != "not_home"){
        return (location == "home") ? "Présent" : location;
      } else{
        return "Absent"
      }
    ]]]
  name: "[[[ return states[variables.ulm_card_person_entity].attributes.friendly_name ]]]"
  entity: "[[[ return variables.ulm_card_person_entity; ]]]"
  icon: "mdi:face-man"
  show_entity_picture: "[[[ return variables.ulm_card_person_use_entity_picture ]]]"
  entity_picture: "[[[ return variables.ulm_card_person_use_entity_picture != false ? states[variables.ulm_card_person_entity].attributes.entity_picture : null ]]]"
  styles:
    icon:
      - color: "rgba(var(--color-theme),0.9)"
      - width: >
          [[[
            if (variables.ulm_card_person_use_entity_picture == true){
              return "42px";
            } else {
              return "20px";
            }
          ]]]
    custom_fields:
      notification:
        - border-radius: "50%"
        - position: "absolute"
        - left: "38px"
        - top: "8px"
        - height: "16px"
        - width: "16px"
        - border: "2px solid var(--card-background-color)"
        - font-size: "12px"
        - line-height: "14px"
        - background-color: >
            [[[
              if (states[variables.ulm_card_person_entity].state !== 'home') {
                return "rgba(var(--color-green),1)";
              } else {
                return "rgba(var(--color-blue),1)";
              }
            ]]]
  custom_fields:
    notification: >
      [[[
        if (states[variables.ulm_card_person_entity].state !== 'home') {
          if (states[variables.ulm_card_person_entity].state === states[variables.ulm_card_person_zone1]?.attributes?.friendly_name) {
            var icon = states[variables.ulm_card_person_zone1].attributes.icon !== null ? states[variables.ulm_card_person_zone1].attributes.icon : 'mdi:help-circle'
            return '<ha-icon icon="' + icon + '" style="width: 10px; height: 10px; color: var(--primary-background-color);"></ha-icon>';
          } else if (states[variables.ulm_card_person_entity].state === states[variables.ulm_card_person_zone2]?.attributes?.friendly_name) {
            var icon = states[variables.ulm_card_person_zone2].attributes.icon !== null ? states[variables.ulm_card_person_zone2].attributes.icon : 'mdi:help-circle'
            return '<ha-icon icon="' + icon + '" style="width: 10px; height: 10px; color: var(--primary-background-color);"></ha-icon>';
          } else {
            return '<ha-icon icon="mdi:home-minus" style="width: 10px; height: 10px; color: var(--primary-background-color);"></ha-icon>';
          }
        } else {
          return '<ha-icon icon="mdi:home-variant" style="width: 10px; height: 10px; color: var(--primary-background-color);"></ha-icon>';
        }
      ]]]

button_find_my_phone:
  icon: mdi:volume-high
  size: 1.4em
  styles:
    grid:
      - grid-template-areas: '"i n"'
      - grid-column-gap: 0.3em
    name:
      - font-size: 1.06em
      - letterspacing: 0.015em
    card:
      - color: "rgba(var(--color-blue),1)"
      - background: "rgba(var(--color-blue),0.2"
      - border-radius: 0.6em
      - padding: 1em 1.4em
      - width: max-content
      - font-size: 1.06em
      - font-weight: 500
      - letter-spacing: 0.015em
      - box-shadow: none
    icon:
      - color: "rgba(var(--color-blue),1)"

popup_custom_card_person:
  tap_action:
    action: fire-dom-event
    browser_mod:
      command: popup
      title: "[[[ return states[variables.ulm_card_person_entity].attributes.friendly_name ]]]"
      style:
        $: >
          *{
            --secondary-background-color: none;
          }
          .mdc-dialog__surface{
            border-radius: 20px !important;
          }
        hui-vertical-stack-card:
          $: >
            button-card {
              align-self: center;
              padding: 0.2em 0 2.3em 0;
            }
            hui-entities-card{
              padding: 0.8em 1.4em;
            }
          $hui-entities-card$: >
            ha-card{
              box-shadow: none;
            }
          $hui-history-graph-card$: >
            .content {
              padding: 0 2.4em !important;
            }
            ha-card{
              box-shadow: none;
            }
          $hui-glance-card$: >
            ha-card{
              box-shadow: none;
            }
          $hui-map-card:
            $: >
              mwc-icon-button {
                color: rgba(var(--color-blue),1);
              }
            $ha-map:
              $: >
                .leaflet-control-attribution {
                  display: none;
                }
                .leaflet-touch .leaflet-control-layers, .leaflet-touch .leaflet-bar {
                  border: 2px solid rgba(var(--color-blue),0.4) !important;
                }
                .leaflet-bar a {
                  background-color: rgba(var(--color-blue),0.2) !important;
                  color: rgba(var(--color-blue),1) !important;
                }
                .leaflet-bar a:first-child {
                  border-bottom: 2px solid rgba(var(--color-blue),0.4) !important;
                }
                .leaflet-pane.leaflet-tile-pane {
                  filter: contrast(95%);
                }
      card:
        type: vertical-stack
        cards:
          - type: entities
            entities:
              - entity: "[[[ return variables.ulm_card_person_entity; ]]]"
                secondary_info: last-changed

          - type: history-graph
            entities:
              - entity: "[[[ return variables.ulm_card_person_entity; ]]]"

          - type: glance
            show_state: false
            entities:
              - entity: "[[[ return variables.ulm_card_person_wifi_tracker; ]]]"
                name: WiFi
                icon: mdi:wifi
                style: &state >
                  state-badge{
                    color: {{ 'rgba(var(--color-blue),1)' if is_state(config.entity, 'home') }};
                    filter: {{ 'opacity(100%)' if is_state(config.entity, 'home') else 'opacity(40%)'}};
                  }

              - entity: "[[[ return variables.ulm_card_person_gps_tracker; ]]]"
                name: GPS
                icon: mdi:map-marker
                style: *state

          - type: custom:button-card
            template: button_find_my_phone
            entity: "[[[ return variables.ulm_card_person_findmy_script; ]]]"
            name: "Trouver mon téléphone"
            tap_action:
              action: toggle

          - type: map
            aspect_ratio: 12x10
            default_zoom: 16
            entities: "[[[ return [variables.ulm_card_person_gps_tracker]; ]]]"

Le code de la carte :

- type: custom:button-card
  template: custom_card_person
  variables:
    ulm_card_person_entity: person.samg23
    ulm_card_person_wifi_tracker: device_tracker.wifi_oneplus_6t
    ulm_card_person_gps_tracker: device_tracker.oneplus_6t
    ulm_card_person_findmy_script: script.find_my_oneplus_6t
    ulm_card_person_use_entity_picture: true
    ulm_card_person_zone1: zone.work
    ulm_card_person_zone2: zone.sport
6 « J'aime »

Faut faire un PR sur GitHub pour en faire profiter tout le monde :slight_smile:

Je ne sais pas comment faire

Salut,

  • tu te connecte avec un compte sur github
  • tu fork (via l’icĂŽne en haut Ă  droite) le repo
  • tu crĂ©e une nouvelle branche sur ton interface GitHub
  • tu modifie les fichiers que tu a besoin.
    Puis ça te proposera de faire un merge request
1 « J'aime »

Comment puis-je remplacer la valeur service ci-dessous par une valeur qui prenne en compte l’equipement de l’utilisateur connectĂ© ?

tap_action:
action: call-service
service: notify.mobile_app_iphone_de_moi

J’essayerai de faire quelque chose comme ca :

tap_action:
  action: call-service
  service: >
    [[[
      if (user.name == "John"){
        return "notify.mobile_app_iphone_de_john";
      } else if (user.name == "Mark"){
        return "notify.mobile_app_iphone_de_mark";
      }
    ]]]
  

ok, je vais voir avec ça. En effet ça pourrait marcher, je n’ai pas les reflexes de codes! En tout cas pas encore!