Taster im Dashbord

Hallo, ich versuche mir einen Taster zu bauen, der beim Drücken auf True und beim loslassen auf False geht. aber irgendwie kommt das Signal nur kurz beim los lasen!

`Vorformatierter Text`type: custom:button-card
entity: button.s7_plc_rollo_zu
name: Auf
section_mode: true
grid_options:
  rows: 2
  columns: 6`Vorformatierter Text`

EDIT by Jay: Code bitte immer über die Codefunktion „</>“ im Editor hinzufügen.

Müsste doch eher ein Template Helfer sein :thinking:

Das ist eine gute Frage, Template Helfer weiß nicht so richtig ob das funktioniert. Aber kann man nicht mit tap_action und hold_action arbeiten und die sozusagen zweckentfremden.

type: custom:button-card
entity: button.s7_plc_rollo_zu  
name: Auf
section_mode: true
grid_options:
  rows: 2
  columns: 6
tap_action: 
  action: call-service
  service: switch.turn_off 
  data:
    entity_id: switch.rollo_auf
hold_action: 
  action: call-service
  service: switch.turn_on 
  data:
    entity_id: switch.rollo_auf

Danke, ne geht leider auch nicht

Und der Helfer Template „Tasten-Template“?

Wenn ich bei neuen Helfer Tasten eingebe kommt bei mir nichts!

Helfer - Template - Taster. Also unter Template gucken.

Hi, versuche mal das:

type: custom:button-card
entity: button.s7_plc_rollo_zu
name: Rollo Zu
icon: mdi:arrow-down-bold
show_state: false

styles:
  card:
    - height: 120px
    - width: 120px
    - border-radius: 25px
    - border: none
    - background: "linear-gradient(130deg, #4398C3 0%, #3880A5 100%)"
    - box-shadow: "3px 8px 8px #91A09C"
  name:
    - font-size: 16px
    - color: white
  icon:
    - color: white
    - width: 40px
    - height: 40px

tap_action:
  action: none  # keine Standardaktion

hold_action:
  action: none

# --- Momentary / Taster-Logik ---
custom_fields:
  js: |
    [[[
      const el = this;
      const entity = 'button.s7_plc_rollo_zu';

      const press = () => {
        hass.callService('input_boolean', 'turn_on', { entity_id: entity });
      };
      const release = () => {
        hass.callService('input_boolean', 'turn_off', { entity_id: entity });
      };

      // Falls bei dir schon Event-Listener vorhanden sind, lösche sie erst.
      el.removeEventListener('mousedown', el._press);
      el.removeEventListener('mouseup', el._release);
      el.removeEventListener('mouseleave', el._release);
      el.removeEventListener('touchstart', el._press);
      el.removeEventListener('touchend', el._release);
      el.removeEventListener('touchcancel', el._release);

      el._press = press;
      el._release = release;

      // Event-Listener für Klick/Touch
      el.addEventListener('mousedown', press);
      el.addEventListener('mouseup', release);
      el.addEventListener('mouseleave', release);
      el.addEventListener('touchstart', press);
      el.addEventListener('touchend', release);
      el.addEventListener('touchcancel', release);

      return '';
    ]]]

Falls Du ein Feedback möchtest bitte noch ergänzen:

- background: |
    [[[
      return variables.is_pressed
        ? "linear-gradient(130deg, #2E6A89 0%, #24556F 100%)"
        : "linear-gradient(130deg, #4398C3 0%, #3880A5 100%)";
    ]]]

Gruß