Carte thermomètre pour tableau de bord

Bonjour,

Je recherche une carte sympa et visuelle pour afficher une température.
Avez-vous vu ce type de représentation ou autres ?

Merci.

Bonjour,
il y a c’est carte qui ressemble un peu GitHub - custom-cards/canvas-gauge-card: The card makes it possible to use gauges from https://canvas-gauges.com/

image

exemple:

type: custom:canvas-gauge-card
entity: sensor.temperature_humidity_sensor_sejour_temperature
card_height: 323
gauge:
  type: linear-gauge
  height: 300
  width: 100
  borderShadowWidth: 0
  borderOuterWidth: 0
  borderMiddleWidth: 0
  borderInnerWidth: 0
  minValue: -20
  maxValue: 50
  valueBox: true
  majorTicks:
    - '-20'
    - '-10'
    - '0'
    - '10'
    - '20'
    - '30'
    - '40'
    - '50'
1 « J'aime »

Merci pour ton retour.
Sur le principe c’est ce je recherche, mais sur l’aspect (représentation) c’est un peu austère (pas fun).
Je vais voir si d’autres propositions vont se faire.

Bonne soirée.

Tu peu customiser la carte.
https://rawgit.com/Mikhus/canvas-gauges/master/examples/linear-component.html

1 « J'aime »

Tu peux faire un truc ressemblant avec button-card

Allez ! au boulot :wink:

Lol, pas le temps, d’autant que pour que ça soit sympa, il faudrait faire 10 custom_fields par degré celcius… (et de -30° C à 50°C, ça fait juste 800 custom_fields à se taper :grin:)

En fait, un custom_field par 1/2 degré suffirait (16 donc pour coloriser les cases de température et 17 pour les graduations).

En revanche faut oublier l’ombrage en fonction de la température…

ah beh oui, ta un sacré boulot avec tout ces custom_filed. ca prends pas 5min …

Merci pour vos réponses.

Je cherche pas une carte hyper sophistiquée.
Juste un thermomètre avec le mercure passant du bleu vers le rouge entre 0° (et négatif) et 30° (et plus).
Il y a pourtant des cartes disponibles pour les thermostats de chauffage et mesure de l’humidité, mais rien pour la température. Hormis le graphe basique par défaut.

image

Ta mini-graph-card ou tu peu customiser les couleurs .

image

:ok_hand:

Je vais essayer avec ce modèle.

Voilà ce que ça pourrait donner avec une button-card :

Le code est à retravailler pour le changement de couleur en cas de température inférieure à 10 °C :

type: custom:button-card
aspect_ratio: 1/2
custom_fields:
  reservoir:
    card:
      type: custom:button-card
      aspect_ratio: 1/1
      styles:
        card:
          - background-color: |
              [[[
                if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "10")
                  return "rgba(254,48,24,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "10")
                  return "rgba(1,144,223,1.0)";
              ]]]
          - border-radius: 50%
          - border: none
  valeur:
    card:
      type: custom:button-card
      entity: sensor.chambre_sous_sol_thermometre_temperature
      show_icon: false
      show_name: false
      show_state: true
      aspect_ratio: 1/1
      styles:
        card:
          - background-color: rgba(255,255,255,0.0)
          - border-radius: 50%
          - border: none
        state:
          - color: white
          - font-size: 1.4em
          - font-weight: bold
  depart_curseur:
    card:
      type: custom:button-card
      aspect_ratio: 1/1.2
      styles:
        card:
          - background-color: |
              [[[
                if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "10")
                  return "rgba(254,48,24,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "10")
                  return "rgba(1,144,223,1.0)";
              ]]]
          - border-radius: 0%
          - border: none
  curseur_0:
    card:
      type: custom:button-card
      aspect_ratio: 2/1.1
      styles:
        card:
          - background-color: |
              [[[
                if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "10")
                  return "rgba(254,48,24,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "-30" && states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "-25")
                  return "rgba(1,144,223,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "-30")
                  return "rgba(191,228,247,1.0)";
              ]]]
          - border-radius: 0%
          - border: none
  curseur_1:
    card:
      type: custom:button-card
      aspect_ratio: 2/1.1
      styles:
        card:
          - background-color: |
              [[[
                if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "10")
                  return "rgba(254,48,24,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "-25" && states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "-20")
                  return "rgba(1,144,223,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "-25")
                  return "rgba(191,228,247,1.0)";
              ]]]
          - border-radius: 0%
          - border: none
  curseur_2:
    card:
      type: custom:button-card
      aspect_ratio: 2/1.1
      styles:
        card:
          - background-color: |
              [[[
                if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "10")
                  return "rgba(254,48,24,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "-20" && states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "-15")
                  return "rgba(1,144,223,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "-20")
                  return "rgba(191,228,247,1.0)";
              ]]]
          - border-radius: 0%
          - border: none
  curseur_3:
    card:
      type: custom:button-card
      aspect_ratio: 2/1.1
      styles:
        card:
          - background-color: |
              [[[
                if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "10")
                  return "rgba(254,48,24,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "-15" && states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "-10")
                  return "rgba(1,144,223,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "-15")
                  return "rgba(191,228,247,1.0)";
              ]]]
          - border-radius: 0%
          - border: none
  curseur_4:
    card:
      type: custom:button-card
      aspect_ratio: 2/1.1
      styles:
        card:
          - background-color: |
              [[[
                if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "10")
                  return "rgba(254,48,24,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "-10" && states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "-5")
                  return "rgba(1,144,223,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "-10")
                  return "rgba(191,228,247,1.0)";
              ]]]
          - border-radius: 0%
          - border: none
  curseur_5:
    card:
      type: custom:button-card
      aspect_ratio: 2/1.1
      styles:
        card:
          - background-color: |
              [[[
                if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "10")
                  return "rgba(254,48,24,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "-5" && states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "0")
                  return "rgba(1,144,223,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "-5")
                  return "rgba(191,228,247,1.0)";
              ]]]
          - border-radius: 0%
          - border: none
  curseur_6:
    card:
      type: custom:button-card
      aspect_ratio: 2/1.1
      styles:
        card:
          - background-color: |
              [[[
                if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "10")
                  return "rgba(254,48,24,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "0" && states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "5")
                  return "rgba(1,144,223,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "0")
                  return "rgba(191,228,247,1.0)";
              ]]]
          - border-radius: 0%
          - border: none
  curseur_7:
    card:
      type: custom:button-card
      aspect_ratio: 2/1.1
      styles:
        card:
          - background-color: |
              [[[
                if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "10")
                  return "rgba(254,48,24,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "5" && states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "10")
                  return "rgba(1,144,223,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "5")
                  return "rgba(191,228,247,1.0)";
              ]]]
          - border-radius: 0%
          - border: none
  curseur_8:
    card:
      type: custom:button-card
      aspect_ratio: 2/1.1
      styles:
        card:
          - background-color: |
              [[[
                if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "10" && states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "15")
                  return "rgba(254,48,24,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "10")
                  return "rgba(254,204,197,1.0)";
              ]]]
          - border-radius: 0%
          - border: none
  curseur_9:
    card:
      type: custom:button-card
      aspect_ratio: 2/1.1
      styles:
        card:
          - background-color: |
              [[[
                if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "15" && states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "20")
                  return "rgba(254,48,24,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "15")
                  return "rgba(254,204,197,1.0)";
              ]]]
          - border-radius: 0%
          - border: none
  curseur_10:
    card:
      type: custom:button-card
      aspect_ratio: 2/1.1
      styles:
        card:
          - background-color: |
              [[[
                if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "20" && states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "25")
                  return "rgba(254,48,24,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "20")
                  return "rgba(254,204,197,1.0)";
              ]]]
          - border-radius: 0%
          - border: none
  curseur_11:
    card:
      type: custom:button-card
      aspect_ratio: 2/1.1
      styles:
        card:
          - background-color: |
              [[[
                if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "25" && states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "30")
                  return "rgba(254,48,24,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "25")
                  return "rgba(254,204,197,1.0)";
              ]]]
          - border-radius: 0%
          - border: none
  curseur_12:
    card:
      type: custom:button-card
      aspect_ratio: 2/1.1
      styles:
        card:
          - background-color: |
              [[[
                if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "30" && states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "35")
                  return "rgba(254,48,24,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "30")
                  return "rgba(254,204,197,1.0)";
              ]]]
          - border-radius: 0%
          - border: none
  curseur_13:
    card:
      type: custom:button-card
      aspect_ratio: 2/1.1
      styles:
        card:
          - background-color: |
              [[[
                if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "35" && states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "40")
                  return "rgba(254,48,24,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "35")
                  return "rgba(254,204,197,1.0)";
              ]]]
          - border-radius: 0%
          - border: none
  curseur_14:
    card:
      type: custom:button-card
      aspect_ratio: 2/1.1
      styles:
        card:
          - background-color: |
              [[[
                if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "40" && states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "45")
                  return "rgba(254,48,24,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "40")
                  return "rgba(254,204,197,1.0)";
              ]]]
          - border-radius: 0%
          - border: none
  curseur_15:
    card:
      type: custom:button-card
      aspect_ratio: 2/1.1
      styles:
        card:
          - background-color: |
              [[[
                if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "45" && states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "50")
                  return "rgba(254,48,24,1.0)";
                else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "45")
                  return "rgba(254,204,197,1.0)";
              ]]]
          - border-radius: 0%
          - border: none
  fond:
    card:
      type: custom:button-card
      styles:
        card:
          - background-color: rgba(255,255,255,0.0)
          - border: none
      tap_action:
        action: none
      hold_action:
        action: none
styles:
  card:
    - background-color: |
        [[[
          if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "10")
            return "rgba(254,204,197,1.0)";
          else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "10")
            return "rgba(191,228,247,1.0)";
        ]]]
  custom_fields:
    fond:
      - background-image: |
          [[[
            if (states['sensor.chambre_sous_sol_thermometre_temperature'].state > "10")
              return "url(/local/images/temp_pos.png)";
            else if (states['sensor.chambre_sous_sol_thermometre_temperature'].state <= "10")
              return "url(/local/images/temp_neg.png)";
          ]]]
      - position: absolute
      - left: 0
      - top: 0
      - width: 100%
      - height: 100%
      - background-size: cover
      - background-position: center
      - opacity: 0.7
    reservoir:
      - position: absolute
      - left: 38.9%
      - top: 76.5%
      - width: 22.8%
    valeur:
      - position: absolute
      - left: 38.9%
      - top: 76.5%
      - width: 22.8%
    depart_curseur:
      - position: absolute
      - left: 44.2%
      - top: 72.1%
      - width: 12%
    curseur_0:
      - position: absolute
      - left: 44.2%
      - top: 68.2%
      - width: 12%
    curseur_1:
      - position: absolute
      - left: 44.2%
      - top: 65%
      - width: 12%
    curseur_2:
      - position: absolute
      - left: 44.2%
      - top: 61.1%
      - width: 12%
    curseur_3:
      - position: absolute
      - left: 44.2%
      - top: 58%
      - width: 12%
    curseur_4:
      - position: absolute
      - left: 44.2%
      - top: 54.1%
      - width: 12%
    curseur_5:
      - position: absolute
      - left: 44.2%
      - top: 51%
      - width: 12%
    curseur_6:
      - position: absolute
      - left: 44.2%
      - top: 47%
      - width: 12%
    curseur_7:
      - position: absolute
      - left: 44.2%
      - top: 43.8%
      - width: 12%
    curseur_8:
      - position: absolute
      - left: 44.2%
      - top: 40%
      - width: 12%
    curseur_9:
      - position: absolute
      - left: 44.2%
      - top: 36.7%
      - width: 12%
    curseur_10:
      - position: absolute
      - left: 44.2%
      - top: 32.9%
      - width: 12%
    curseur_11:
      - position: absolute
      - left: 44.2%
      - top: 29.7%
      - width: 12%
    curseur_12:
      - position: absolute
      - left: 44.2%
      - top: 25.8%
      - width: 12%
    curseur_13:
      - position: absolute
      - left: 44.2%
      - top: 22.5%
      - width: 12%
    curseur_14:
      - position: absolute
      - left: 44.2%
      - top: 18.6%
      - width: 12%
    curseur_15:
      - position: absolute
      - left: 44.2%
      - top: 15.5%
      - width: 12%

Les deux images de fond :

Ah oui effectivement c’est un gros boulot de codage !
Merci @anon41081891

Une nouvelle version avec du code beaucoup plus compact :

image

Le code :

type: custom:button-card
aspect_ratio: 1/1
custom_fields:
  fond:
    card:
      type: custom:button-card
      aspect_ratio: 1/2
      styles:
        card:
          - background-color: |
              [[[
                if (states['input_number.temperature'].state > "0")
                  return "rgba(255,151,138,1.0)";
                else if (states['input_number.temperature'].state <= "0")
                  return "rgba(127,199,239,1.0)";
              ]]]
          - background-image: |
              [[[
                if (states['input_number.temperature'].state > "0")
                  return "url(/local/images/temp_pos.png)";
                else if (states['input_number.temperature'].state <= "0")
                  return "url(/local/images/temp_neg.png)";
              ]]]
          - background-size: cover
          - background-position: center
          - border-radius: 0%
          - border: none
  value_bar:
    card:
      type: custom:button-card
      styles:
        card:
          - background-color: |
              [[[
                if (states['input_number.temperature'].state > "0")
                  return "rgba(254,204,197,1.0)";
                else if (states['input_number.temperature'].state <= "0")
                  return "rgba(191,228,247,1.0)";
              ]]]
          - width: 40px
          - height: |
              [[[
                if (states['input_number.temperature'].state > "0") 
                  return Math.round(193 - states['input_number.temperature'].state * 3.45) + "px";
                else if (states['input_number.temperature'].state <= "0")
                  return Math.round(193 + Math.abs(states['input_number.temperature'].state) * 3.45) + "px";
              ]]]
          - border-radius: 0%
          - border: none
  value_text:
    card:
      type: custom:button-card
      entity: input_number.temperature
      show_name: false
      show_icon: false
      show_state: false
      show_label: true
      label: |
        [[[ return states['input_number.temperature'].state + "°" ]]]
      styles:
        card:
          - background-color: transparent
          - border-radius: 0%
          - border: none
        label:
          - font-size: 1.8em
          - font-weight: bold
          - color: white
  thermometre:
    card:
      type: custom:button-card
      aspect_ratio: 1/2
      styles:
        card:
          - background-color: transparent
          - background-image: url(/local/images/thermometer.png)
          - background-size: cover
          - background-position: center
          - border-radius: 0%
          - border: none
styles:
  card: null
  custom_fields:
    fond:
      - position: absolute
      - left: 5%
      - top: 5%
      - width: 45%
      - opacity: 1
    value_bar:
      - position: absolute
      - left: 76px
      - top: 48px
      - opacity: 1
    value_text:
      - position: absolute
      - left: 9.4%
      - top: 76%
      - width: 100px
      - height: 100px
      - opacity: 1
    thermometre:
      - position: absolute
      - left: 5%
      - top: 5%
      - width: 45%
      - opacity: 1

Image du thermomètre :

Températures négatives :

Températures positives :

1 « J'aime »