Custom:button-card 2 temperatur entitäten vergleichen und color setzen

Hi :slight_smile:
habe vieles versucht, doch leider gelingt es mir nicht die farbe in abhängikeit von 2 sensor temperaturen zu setzen.
die variablen sind ein anderer versuchter weg.
sobald ich die sensoren direkt einsetze ist entity sensor anzeige weg…
das template habe ich angelegt und wird auch in den entitäten mit dem richtigen wert angezeigt.

type: custom:button-card
entity: sensor.badezimmer_temperature
show_last_changed: false
show_name: true
show_label: true
show_icon: true
show_state: true
variables:
  ist: '= sensor.badezimmer_temperature'
  ziel: '= sensor.ziel_bad'
styles:
  card:
    - box-shadow: none
    - font-size: 17px
    - color:- color: |
        [[[
          if (sensor.badezimmer_temperature < sensor.ziel_bad) return 'orange'; 
          if (sensor.badezimmer_temperature > sensor.ziel_bad) return 'lightblue'; 
          else
          return 'lightgreen';
        ]]]  

hier noch das template

template:
   - sensor:
    # ziel temperatur badezimmer
      - name: "ziel_bad"
        unique_id: "ziel_bad_temp"
        unit_of_measurement: "°C"
        state_class: "measurement"
        device_class: "temperature"
        state: >
            {{ state_attr('climate.badezimmer', 'temperature') | float() }}

natürlich habe ich auch diverse versionen mit state state_attr und allen formen von klammern an allen möglichen stellen ausprobiert und bin echt am ende mit meinem latein.

ich würde mich freuen wenn jemand dazu ein idee hat.
lg. ehtron

btw. da es ein no-go ist, cross postings nicht auf beiden seiten zu nennen…
ich habe die frage auch ergebnisslos im shelly forum gestellt.
https://www.shelly-support.eu/forum/thread/23940-homeassistant-custom-button-card-von-der-automatisierung-ansprechen/?postID=247645#post247645

Du musst mit
states('sensor.xyz') < states('sensor.abc')
abfragen, den du willst ja den Status/Wert abfragen. Ggf. Muss noch ein | int angehängt werden.

hi : :slight_smile:
danke… wenn es doch nur so einfach wäre… habe diverse derartige konstruktionen durch…

- color: |
        [[[
          if states('sensor.badezimmer_temperature') < states('sensor.ziel_bad') return 'orange'; 
          if states('sensor.badezimmer_temperature') > states('sensor.ziel_bad') return 'lightblue'; 
          else
          return 'lightgreen';
        ]]]  

weiterhin keine anzeige… erst wenn ich die if sequenz wieder raus nehme.
daher habe ich auch mit den variablen experimentiert. wenn ich die nutze, wird die anzeige nicht beeinträchtigt.
funkt aber leider auch nicht :frowning:

evtl. hat jemand sowas schon funktonierend auf seinem system vorliegen.
danke für den input.
lg. ehtron :slight_smile:

Was wird dir unter Entwicklerwerkzeuge - Template ausgegeben, wenn du z. B.

{% if states('sensor.badezimmer_temperature') < states('sensor.ziel_bad') %}
kleiner
{% else %}
größer oder gleich
{% endif %}

eingibst?

Ergebnistyp: string

größer oder gleich

Dieses Template überwacht die folgenden Ereignisse, die einen Zustand ändern:

    Entität: sensor.badezimmer_temperature
    Entität: sensor.ziel_bad

mit string war ich auch am forsten… nur brachte es immer die info ohne " " also für mich als zahl… (fload)

mein template ergibt
Ergebnistyp: string

Ergebnistyp: string

template:
   - sensor:
    # ziel temperatur badezimmer
      - name: "ziel_bad"
        unique_id: "ziel_bad_temp"
        unit_of_measurement: "°C"
        state_class: "measurement"
        device_class: "temperature"
        state: >
            19.0

Dann versuch es mal so


styles:
  card:
    - color: >
        [[[
          if (states['sensor.badezimmer_temperature'].state < states['sensor.ziel_bad'].state)
            return "orange";
          if (states['sensor.badezimmer_temperature'].state > states['sensor.ziel_bad'].state)
            return "lightblue";
          return "lightgreen";
        ]]]
1 „Gefällt mir“

hi :slight_smile: :slight_smile:

ich bin begeistert… ich danke dir sehr… ich bin zwar der meinung dies konstruktion auch schon ausprobiert zu haben, aber…egal…
deine funktioniert wunderbar siehe bad rechts.

type: custom:button-card
entity: sensor.badezimmer_temperature
show_last_changed: false
show_name: false
show_label: true
show_icon: false
show_state: true
variables:
  ist: '= sensor.badezimmer_temperature'
  ziel: '= sensor.ziel_bad'
styles:
  card:
    - box-shadow: none
    - font-size: 17px
    - color: |
        [[[
          if (states['sensor.badezimmer_temperature'].state -0.2 > states['sensor.ziel_bad'].state)
            return "orange";
          if (states['sensor.badezimmer_temperature'].state +0.2 < states['sensor.ziel_bad'].state)
            return "lightblue";
          return "lightgreen";
        ]]]

die anmeldung hier hat sich gelohnt…
lg. ehtron.

1 „Gefällt mir“

Die variables können mMn wieder raus.

:pencil2: a danke dir. werde ich machen :slight_smile:

Nachtrag: Hi :smile:
hab das gelöst nochmal raus genommen.

ich hatte ja die werte um ±0.2° angepasst um den ok bereich zu vergrössern.
nur scheint es ein problem mit den komma stellen zu geben.

if (states['sensor.badezimmer_temperature'].state > states['sensor.ziel_bad'].state +0.2)

scheint bei temperatur vergleichen die .0 als eine ausgabe haben, nicht zu greifen.
gibt es da eine lösung?

:pencil2:by HeikoBauer: Zusammenführung Doppelpost.

Hast du es mal mit anderer Klammersetzung getestet?

if ( states['sensor.badezimmer_temperature'].state > (states['sensor.ziel_bad'].state +0.2) )

Edit: sonst mal mot float testen

if ( states['sensor.badezimmer_temperature'].state > (states['sensor.ziel_bad'].state | float(0)) +0.2)

hi :slight_smile:
mit float ist die anzeige weg. und mit diversen klammer änderungen keine verbässerung
z.b. ziel 20.0 und ist 19.7 lässt sich nicht sauber differenzieren.
vermute das die .werte nicht sauber verglichen werden.

vielen dank bisher, bin morgen wieder dabei

Teste deine Rechnung mal unter Entwicklerwerkzeuge - Template. Setz bei beiden Entitäten mal | float(0), also
if ( (states['sensor.badezimmer_temperature'].state | float(0)) > (states['sensor.ziel_bad'].state | float(0)) +0.2)

Hi :slight_smile:
der teufel seteckt wie immer im detail.
so funktioniert es genau wie gewünscht. ok (grün) bis jeweils ±0.2°

type: custom:button-card
entity: sensor.badezimmer_temperature
show_last_changed: false
show_name: false
show_label: true
show_icon: false
show_state: true
styles:
  card:
    - box-shadow: none
    - font-size: 17px
    - font-weight: bold
    - color: |
        [[[
          if (states['sensor.badezimmer_temperature'].state -0.2 > states['sensor.ziel_bad'].state)
            return "orange";
          if (states['sensor.badezimmer_temperature'].state < states['sensor.ziel_bad'].state -0.2)
            return "lightblue";
          return "lightgreen";
        ]]]

dir nochmals vielen dank und geruhsame festtage