Passer une valeur à un script

Bonjour,
Je souhaite réaliser un groupe de bouton où un seul est actif :

image

J’ai réalisé cela avec custom:buton-card comme indiqué dans cette vidéo et dont voici le code (pour un seul bouton) :

type: custom:button-card
entity: input_select.fp_salon
name: Eco
color_type: card
color: rgba(255,255,255,100%)
icon: mdi:brightness-3
styles:
  card:
    - height: 47px
  name:
    - font-size: 12px
tap_action:
  action: call-service
  service: input_select.select_option
  target:
    entity_id:
      - input_select.fp_salon <== il s'agit d'un input_select créée dans les "Entrées"
state:
  - value: Eco
    color: green

Évidemment, je ne souhaite pas seulement changer la couleur d’un bouton, mais lancer une action. Or il est impossible de créer 2 actions sous « tap_action »

J’ai donc modifié le code pour appeler un script et lui passer une variable pour qu’il fasse le job de:

  • changer le input_select.fp_salon
  • transmette l’ordre au module de fil pilote (module fait par mes soins avec un ESP)
tap_action:
  action: call-service
  service: script.fp_bureau
  data:
    valeur_fp: Eco

Puis création d’un script avec une séquence pour orienter l’action en fonction de la valeur transmise

alias: fp_bureau
sequence:
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ is_state(valeur_fp, 'Confort') }}"
        sequence:
          - target:
              entity_id: input_select.fp_salon
            data:
              option: Confort
            action: input_select.select_option
          - action: input_number.set_value
            metadata: {}
            data:
              value: 0
            target:
              entity_id: input_number.fp_salon_pwm
        alias: Confort

Et là, c’est le drame !
Bon, je suis vraiment nul en template et j’ai essayé plein de trucs, mais je n’arrive pas à savoir comment faire un bête test dans ma condition
J’aimerais selon la valeur de 'valeur_fp (numérique ou string, je m’en moque) lancer une séquence d’action (‹ Eco ›, ‹ Confort ›, ‹ -1°C › ou ‹ -2°C ›).

Du coup, vu que je commence à ne plus avoir de tignasse à force de m’arracher les cheveux, je lance cette bouteille à la mer.

Merci de toute l’aide que vous pourriez m’apporter !

Bonjour,
regarde un peu mon post si cela peut t’aider:
https://forum.hacf.fr/t/couleur-button-card-thermostat/45955/8

Merci pour la suggestion, mais j’avoue ne pas trop m’y retrouver …

Histoire d’être exhaustif, voici les quelques codes que j’essaie de faire fonctionner.

Les boutons:

type: horizontal-stack
cards:
  - type: custom:button-card
    color: auto
    name: Salon, salle à manger
    styles:
      card:
        - height: 47px
  - type: horizontal-stack
    cards:
      - type: custom:button-card
        entity: input_select.fp_salon
        name: Eco
        color_type: card
        color: rgba(255,255,255,100%)
        icon: mdi:brightness-3
        styles:
          card:
            - height: 47px
          name:
            - font-size: 12px
        tap_action:
          action: call-service
          service: script.fp_bureau
          data:
            valeur_fp: 100
        state:
          - value: Eco
            color: green
      - type: custom:button-card
        entity: input_select.fp_salon
        name: Confort
        color_type: card
        color: rgba(255,255,255,100%)
        icon: mdi:brightness-7
        styles:
          card:
            - height: 47px
          name:
            - font-size: 12px
        tap_action:
          action: call-service
          service: script.fp_bureau
          data:
            valeur_fp: 0
        state:
          - value: Confort
            color: green
      - type: custom:button-card
        entity: input_select.fp_salon
        name: "-1°C"
        color_type: card
        color: rgba(255,255,255,100%)
        icon: mdi:brightness-6
        styles:
          card:
            - height: 47px
          name:
            - font-size: 12px
        tap_action:
          action: call-service
          service: script.fp_bureau
          data:
            valeur_fp: 1
        state:
          - value: "-1°C"
            color: green
      - type: custom:button-card
        entity: input_select.fp_salon
        name: "-2°C"
        color_type: card
        color: rgba(255,255,255,100%)
        icon: mdi:brightness-5
        styles:
          card:
            - height: 47px
          name:
            - font-size: 12px
        tap_action:
          action: call-service
          service: script.fp_bureau
          data:
            valeur_fp: 2
        state:
          - value: "-2°C"
            color: green
title: test2

Le script :

alias: fp_bureau
sequence:
  - choose:
      - conditions:
          - condition: template
            value_template: |
              [[[
                if (valeur_fp == 100);
                  return true;
                else
                  return false;
              ]]]
        sequence:
          - target:
              entity_id: input_select.fp_salon
            data:
              option: Confort
            action: input_select.select_option
          - action: input_number.set_value
            metadata: {}
            data:
              value: 0
            target:
              entity_id: input_number.fp_salon_pwm
        alias: Confort
      - conditions:
          - condition: template
            value_template: "{{ is_state(valeur_fp, 1) }}"
        sequence:
          - target:
              entity_id: input_select.fp_salon
            data:
              option: "-1°C"
            action: input_select.select_option
          - action: input_number.set_value
            metadata: {}
            data:
              value: 1
            target:
              entity_id: input_number.fp_salon_pwm
        alias: Confort -1°C
      - conditions:
          - condition: template
            value_template: "{{ is_state(valeur_fp, 2) }}"
        sequence:
          - target:
              entity_id: input_select.fp_salon
            data:
              option: "-2°C"
            action: input_select.select_option
          - action: input_number.set_value
            metadata: {}
            data:
              value: 2
            target:
              entity_id: input_number.fp_salon_pwm
        alias: Confort -2°C
      - conditions:
          - condition: template
            value_template: "{{ is_state(valeur_fp, 3) }}"
        sequence:
          - target:
              entity_id: input_select.fp_salon
            data:
              option: Eco
            action: input_select.select_option
          - action: input_number.set_value
            metadata: {}
            data:
              value: 100
            target:
              entity_id: input_number.fp_salon_pwm
        alias: Eco
description: ""

C'est un peu long comme post, j'en conviens, désolé

Bonjour,

Personnellement, je passerais par une autre approche et je mettrais les conditions dans le code du custom:button-card de façon à déclencher un script différent pour pour chacune des 4 actions.

Dans le code ci-dessous, en fonction de la valeur d’un input-text, j’appelle un script ou pas (ce qui me permet de ne pas pouvoir

bouton_action: |
  [[[
    if (states['input_text.garage_etat_porte'].state == 'closed' || states['input_text.garage_etat_porte'].state == 'stopped')
      return 'call-service';
    else
      return 'none';
   ]]]
  bouton_service: script.garage_ouvrir_porte_du_garage

Cela me permet de ne pouvoir appuyer sur le bouton permettant d’ouvrir la porte du garage que si celle-ci est fermée ou stoppée (c’est à dire ni complétement ouverte ou complétement fermée)
Dans l’exemple, la condition est sur le tap_action d’un bouton template mais elle peut se mettre sur le service à appeler.

Bonjour @Yakafokon
Merci pour le partage.
Initialement, c’est ce que je voulais faire. Mais j’ai 12 zones de chauffage, que multiplie 4 actions soit 48 scripts … J’aurais voulu simplifier un peut tout cela :grin:

Mais depuis, après un nombre incalculable d’essais, j’y suis arrivé grâce à ce post

Code pour un bouton :

type: custom:button-card
entity: input_select.fp_salon
name: Eco
color_type: card
color: rgba(255,255,255,100%)
icon: mdi:brightness-3
styles:
  card:
    - height: 47px
  name:
    - font-size: 12px
tap_action:
  action: call-service
  service: script.fp_bureau
  data:
    valeur_fp: 3
state:
  - value: Eco
    color: green

Code du script :

alias: fp_bureau
description: Test script
fields:
  valeur_fp:
    description: Effectue les actions en fonction du bouton cliqué (confort = 0, -1°C = 1, -2°C = 2 et eco = 3)
sequence:
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ true if valeur_fp == 0 else false }}"
        sequence:
          - target:
              entity_id: input_select.fp_salon
            data:
              option: Confort
            action: input_select.select_option
          - action: input_number.set_value
            metadata: {}
            data:
              value: 0
            target:
              entity_id: input_number.fp_salon_pwm
        alias: Confort
      - conditions:
          - condition: template
            value_template: "{{ true if valeur_fp == 1 else false }}"
        sequence:
          - target:
              entity_id: input_select.fp_salon
            data:
              option: "-1°C"
            action: input_select.select_option
          - action: input_number.set_value
            metadata: {}
            data:
              value: 1
            target:
              entity_id: input_number.fp_salon_pwm
        alias: Confort -1°C
      - conditions:
          - condition: template
            value_template: "{{ true if valeur_fp == 2 else false }}"
        sequence:
          - target:
              entity_id: input_select.fp_salon
            data:
              option: "-2°C"
            action: input_select.select_option
          - action: input_number.set_value
            metadata: {}
            data:
              value: 2
            target:
              entity_id: input_number.fp_salon_pwm
        alias: Confort -2°C
      - conditions:
          - condition: template
            value_template: "{{ true if valeur_fp == 3 else false }}"
        sequence:
          - target:
              entity_id: input_select.fp_salon
            data:
              option: Eco
            action: input_select.select_option
          - action: input_number.set_value
            metadata: {}
            data:
              value: 100
            target:
              entity_id: input_number.fp_salon_pwm
        alias: Eco

J’espère que cela pourra aider d’autres personnes.

Merci de votre aide en tout cas.

ezgif-3-9361eba3af

Évidemment, toutes les actions du script liées au bouton s’effectuent correctement.
Ne reste plus qu’à multiplier tout cela par le nombre de zone :grin:

Logiquement, il est possible avec une entrée de type numérique de n’avoir que 4 scripts (un par action) et de chosir la zone (avec l’entrée numérique) à laquelle s’applique le script.

Mais bon, la solution a été trouvée, donc c’est bon :wink: