Afficher uniquement la valeur absolue d'un sensor sur le dashboard

Bonjour,

Mon problème

Sur mon dashboard, je veux afficher la quantité d’électricité qui sort ou rentre dans le logement.
J’ai donc une pince ampèremétrique juste après le Linky, et actuellement la carte suivante :

type: custom:button-card
entity: sensor.general_power
name: |
  [[[
    if (states['sensor.general_power'].state > 0) return 'Acheté';
    else return 'Vendu';
  ]]]
show_state: true
color_type: card
color: auto
styles:
  card:
    - font-size: 16px
    - padding: 10px
    - background-color: |
        [[[
          if (states['sensor.general_power'].state < 0) return '#1565c0';
          else if (states['sensor.general_power'].state > 0) return '#FFA300';
          else return 'white';
        ]]]
    - color: |
        [[[
          if (states['sensor.general_power'].state < 0) return 'white';
          else return 'black';
        ]]]
  icon:
    - width: 24px
    - height: 24px

Toutefois, vu que l’électricité peut sortir du logement (lorsque les panneaux solaires produisent plus que ce que le logement consomme), la valeur affichée devient négative.
Comment faire en sorte de n’afficher que des valeurs positives, sans avoir besoin de créer un nouveau sensor qui fasse quelque chose du genre sensor.general_power * -1 ?

Salut,
tu peux utiliser state_display, et voir avec ce code ( a modifier suivant ton besoin) :

state_display: |
  [[[
    if (states['sensor.general_power'].state > 0)
    return states['sensor.general_power'].state; else return '0';
  ]]]

Justement, dans la partie else return '0'; je voudrais afficher la valeur absolue.
Et c’est surtout là-dessus que je bloque et que j’ai besoin de votre aide :wink:

Salut,

 return abs(states['sensor.general_power'].state); 

ça doit donner ce que tu veux

1 « J'aime »

je ne pourrais pas t’en dire plus, je suis nul en math , enfin sur une valeur absolue :joy:

Édit:
j’aurais appris un truc aujourd’hui, merci @Pulpy-Luke

En essayant avec ta proposition, j’ai ce code complet :

type: custom:button-card
entity: sensor.general_power
name: |
  [[[
    if (states['sensor.general_power'].state > 0) return 'Acheté';
    else return 'Vendu';
  ]]]
show_state: true
state_display: |
  [[[
    if (states['sensor.general_power'].state > 0)
      return states['sensor.general_power'].state;
    else 
      return abs(states['sensor.general_power'].state);
  ]]]
color_type: card
color: auto
styles:
  card:
    - font-size: 16px
    - padding: 10px
    - background-color: |
        [[[
          if (states['sensor.general_power'].state < 0) return '#1565c0';
          else if (states['sensor.general_power'].state > 0) return '#FFA300';
          else return 'white';
        ]]]
    - color: |
        [[[
          if (states['sensor.general_power'].state < 0) return 'white';
          else return 'black';
        ]]]
  icon:
    - width: 24px
    - height: 24px

Et l’erreur suivante est remonté :
ButtonCardJSTemplateError: ReferenceError: abs is not defined in 'if(states[sensor.gene...

Ok, il manque la libraire Math.
Par ailleurs pas besoin de garder le if, tu peux directement retourner la valeur absolue (c’est toujours positif)

type: custom:button-card
entity: sensor.general_power
name: |
  [[[
    if (states['sensor.general_power'].state > 0) return 'Acheté';
    else return 'Vendu';
  ]]]
show_state: true
state_display: |
  [[[
      return Math.abs(states['sensor.general_power'].state);
  ]]]
color_type: card
color: auto
styles:
  card:
    - font-size: 16px
    - padding: 10px
    - background-color: |
        [[[
          if (states['sensor.general_power'].state < 0) return '#1565c0';
          else if (states['sensor.general_power'].state > 0) return '#FFA300';
          else return 'white';
        ]]]
    - color: |
        [[[
          if (states['sensor.general_power'].state < 0) return 'white';
          else return 'black';
        ]]]
  icon:
    - width: 24px
    - height: 24px
2 « J'aime »

Merci pour l’aide.

J’étais initialement parti sur ce math.abs, mais je devais mal l’implémenter (mauvais endroit, …)

Pour que ça colle à mon besoin, j’ai arrondi à l’entier, et rajouté l’unité à la fin (W), ce qui donne ceci :

state_display: |
  [[[
      return Math.round(Math.abs(states['sensor.general_power'].state)) + ' W';
  ]]]
1 « J'aime »