Statusabhängiger Button, unterschiedliche Befehle senden

Hallo,

ist vielleicht eine doofe Anfängerfrage, aber ich komme nicht so recht weiter.
Ich möchte einen Button/Schalter mit dem ich meine Heizungsanlage per shell command ein und aus schalten kann, der je nach Zustand (eine Entität gibt es mit dem Zustand schon), dann den richtigen Befehl sendet. Ich habe die Shellcommands in der Config.yaml eingebunden. Der Schalter als solches funktioniert, aber ich komme nicht drauf wie status abhängig einen anderen Befehl bei der Tap_action senden kann. Mit meiner jetzigen Konfiguration kann ich durch drücken den Befehl zum einschalten senden, dann ändert sich das image zu dem eingeschaltet Status, aber wie sende ich dann den Aus-Befehl. Ich könnte das dann mit einem halten oder doppelklick Befehl umgehen, würde das aber gern mit einem einfach druck ändern können.

Vielleicht kann mir jemand die richtige Richtung weisen.

- type: image
    image: /local/button_aus.png
    entity: sensor.kessel_schalter
    scan_interval: 60
    tap_action:
      action: call-service
      service: shell_command.kessel_ein
    state_image:
      Ein: /local/button_an.png

Ich habe keine wirkliche Lösung. Du könntest es aber mal mit einer Conditional-Card versuchen und je nach Zustand einen anderen Button einblenden.

1 „Gefällt mir“

Die erste Antwort war zu umständlich … dann hab ich sie gelöscht … keine Ahnung wie ich die nach dem Löschen wieder hätte reaktivieren können.

Nimmt die custom:button-card … aus der Doku

name: '[[[ if (entity.state > 42) return "Above 42"; else return "Below 42" ]]]'
name: >
  [[[
    if (entity.state > 42)
      return "Above 42";
    else
      return "Below 42";
  ]]]

du kannst das mit dem java code nicht nur beim Namen machen sondern auch beim state.
Mach ich z.B. bei meinen Rolläden

state:
  - operator: template
    value: |
      [[[
        if (entity.attributes.current_position > 99)
          return 'open';
      ]]]

damit kannst du in jeden Fall einem Button eine Aktion zuweisen in Abhängigkeit vom derzeitigen Status und halt nicht nur vom Status dieses Buttons sondern auch von jedem anderen Status (der sich logischerweise nach einem Klick dann auch ändern sollte).

Hier noch ein Link zu einer guten ausführlichen Beschreibung:

Danke schonmal für die Hilfe, ich denke das geht in die richtige Richtung, muss mich die nächsten Tage mal durch die Doku lesen, und ein bisschen probieren :slight_smile:

Wenn es geklappt hat, hänge ich den Code hier an.

Moin,

ich bin zu doof dafür, ich bekomme es einfach nicht hin die tap-action je nach status zu ändern, ich habe erstmal den umweg über hold_action gewählt, wenn mir noch jemand dabei helfen kann, bitte gerne her mit den Infos :slight_smile:

 - type: custom:button-card
    entity: sensor.kessel_schalter
    scan_interval: 60
    show_name: true
    show_state: false
    show_units: false
    show_entity_picture: true
    style:
      top: 20%
      left: 80%
    state:
      - value: Aus
        entity_picture: /local/button_aus.png
        name: halten
      - value: Ein
        entity_picture: /local/button_an.png
        name: drücken
    tap_action:
      action: call-service
      service: shell_command.kessel_aus
    hold_action:
      action: call-service
      service: shell_command.kessel_ein
    card_mod:
      style: |
        ha-card {
        background: none;
        box-shadow: none;
        --ha-card-border-width: 0;
        color: #FFFFFF;

Moin,
du kannst doch über dein Button einfach ein Srkipt starten.

    tap_action:
      action: call-service
      service: script.kessel

und in dem Skript machst du dann die Logik

alias: Kessel
sequence:
  - choose:
      - conditions:
          - condition: state
            entity_id: sensor.kessel_schalter
            state: "on"
        sequence:
          - service: shell_command.kessel_ein
      - conditions:
          - condition: state
            entity_id: sensor.kessel_schalter
            state: "off"
        sequence:
          - service: shell_command.kessel_aus
mode: restart

Edit:
conditon an deine Entity_id sensor.kessel_schalter angepasst.

LG
Tobi

Tip top, hat funktioniert, ich kenne mich mit scripten noch weniger aus als mit dem Rest von HA, den Yaml code zu kopieren hat nicht funktioniert, habe es dann mit der optischen Eingabe gemacht, das hat funktioniert, sieht dann im Script so aus:

choose:
  - conditions:
      - condition: state
        entity_id: sensor.kessel_schalter
        state: Ein
    sequence:
      - service: shell_command.kessel_aus
        data: {}
  - conditions:
      - condition: state
        entity_id: sensor.kessel_schalter
        state: Aus
    sequence:
      - service: shell_command.kessel_ein
        data: {}