Iconfarbe eines Schalters abhängig vom Stromverbrauch wechseln

Moin zusammen.
Ich habe sehr viele Threads zu dem Thema wechselbare Iconfarbe gelesen, aber bisher nicht das richtige gefunden. Mit Hilfe eines Shelly kann ich meine Kaffeemaschine ein- und ausschalten. Da es sich um eine E61 Brühgruppe handelt, möchte ich auf meinem Dashboard sehen, ob die Kaffeemaschine vorgeheizt ist. Meine Idee war nun das Logo des Schalters, der die Kaffeemaschine ein- und ausschaltet, entsprechend einzufärben. Der Schalter schaltet also einen Entität (switch.kaffeemaschine_switch_0) und die Farbe soll auf Grundlage einer anderen Entität des Shelly (sensor.kaffeemaschine_switch_0_power) verändert werden.
Nach dem Einschalten der Maschine zieht diese > 1000W, sobald sie vorgeheizt ist, fällt der Stromverbrauch auf 1-2W. Mein Plan ist also das Logo des Schalters bei einem Verbrauch von 1-10W grün und bei einem Verbrauch >10W orange einzufärben. Unter 1W ist der Schalter logischerweise aus, da die Maschine im Standby mind. 1W verbraucht. Hier soll der Schalter die übliche ausgegraute Farbe haben. Ist das so umsetzbar? Wäre für Tipps dankbar.

So habe ich es versucht…

          - show_name: true
            show_icon: true
            type: button
            tap_action:
              action: toggle
            icon: mdi:coffee-maker
            theme: Graphite
            entity: switch.kaffeemaschine_switch_0
            name: Kaffeemaschine
	        card_mod:
              style: |
                :host {
                  {% if ( states.sensor.kaffeemaschine_switch_0_power.state | float > 0 ) %}
                  --card-mod-icon-color: green;
                  {% if ( states.sensor.kaffeemaschine_switch_0_power.state | float > 10 ) %}
                  --card-mod-icon-color: orange;
                  {% else %}
                  --card-mod-icon-color: grey;
                  {% endif %}
                 }

Bei mir funktioniert es so:

card_mod:
  style:
    ha-state-icon $ ha-icon $: |
      ha-svg-icon {
        color: green;
      }

Musst du entsprechend mit deinen if ergänzen

1 „Gefällt mir“

Also, Dein Tipp ist schon einmal super! Ohne die “if” Geschichte funktioniert es auch… Aber ich bekomme die Bedingungen einfach nicht integriert… Habe es so probiert, was mache ich falsch?

          - show_name: true
            show_icon: true
            type: button
            tap_action:
              action: toggle
            icon: mdi:coffee-maker
            theme: Graphite
            entity: switch.kaffeemaschine_switch_0
            name: Kaffeemaschine
            card_mod:
              style:
                ha-state-icon $ ha-icon $: |
                  ha-svg-icon {
                    {% if ( states.sensor.kaffeemaschine_switch_0_power.state | float > 0 ) %}
                      color: green;
                    {% if ( states.sensor.kaffeemaschine_switch_0_power.state | float > 10 ) %}
                      color: red;
                    {% else %}
                      color: white;
                    {% endif %}
                  }

Mir fällt auf, dass der | fehlt
style: |

Ach vergiss das. Habe gesehen, dass du ja noch eine Ebene hast.

Was gibt dir
{{ states.sensor.kaffeemaschine_switch_0_power.state }}
unter Entwicklerwerkzeuge → Template aus?

Das zweite if muss elif heißen.

Und du musst > 10 zuerst abfragen. Weil > 0 ist ja alles. Dann greift der elif und else nicht.

1 „Gefällt mir“

Das “elif” war ein guter Tipp! Jetzt wird das Icon grün, sobald ich den Schalter einschalte und bleibt weiß im ausgeschalteten Zustand. Wie frage ich denn “> 10” nochmals ab? Habe auch mal versucht “> 10” als erstes abzufragen und erst als zweites “> 0”, dann wird das Icon nach dem Einschalten kurz rot und dann nach wenigen Sekunden grün-

Das wäre richtig. Bist du denn sicher, dass der Wert > 10 bleibt?

Jetzt funktioniert es mit der neuen Ordnung plötzlich so wie gewollt. Vielleicht reagiert der Sensor manchmal schneller, als die Maschine in den Heizmodus wechseln kann… Auch das Nachheizen, wenn sie zuerst mit > 1000W, später mit < 10W und dann wieder mit > 10W aufheizt, wird korrekt dargestellt.

Edit: habe gerade festgestellt, dass die Maschine beim Aufheizen nicht während des kompletten Vorgangs > 10W verbraucht… Kann ich auch irgendwie definieren, dass die Farbe des Schalters erst dann zu grün wechselt, wenn der Verbrauch für mer als 2 Min. < 10W liegt?

Leg dir einen Helfer an und den schaltest du per Automation on bzw. off. In der Automation kannst du für 2 Min. definieren.

Im Dashboard kannst du dann für das Icon den Helfer abfragen.

Oder du legst dir einen History-Stats Sensor an und fragst den ab

sensor:
  - platform: history_stats
    name: switch_on
    entity_id: [yourswitchentity]
    state: "on"
    type: time
    duration: "00:02:00"

Oder ich habe das gefunden. Daran könnte man sich orientieren:

condition:
    - condition: template
      value_template: "{{ (as_timestamp(now()) | int(0) -as_timestamp(states.switch.vour_switch.last_changed))|int(0) > 3600 and states('switch.your_switch') == 'on'}}"
1 „Gefällt mir“

Danke erst einmal. Die Lösung ist ja bereits gefunden und es geht nur noch um Feinheiten… :slight_smile:

          - show_name: true
            show_icon: true
            type: button
            tap_action:
              action: toggle
            icon: mdi:coffee-maker
            theme: Graphite
            entity: switch.kaffeemaschine_switch_0
            name: Kaffeemaschine
            card_mod:
              style:
                ha-state-icon $ ha-icon $: |
                  ha-svg-icon {
                    {% if ( states.sensor.kaffeemaschine_switch_0_power.state | float > 10 ) %}
                      color: red;
                    {% elif ( states.sensor.kaffeemaschine_switch_0_power.state | float > 0 ) %}
                      color: green;
                    {% else %}
                      color: white;
                    {% endif %}
                  }