Utilisation d'un champ dans l'id d'une entitée

Bonjour,

Je débute sur HA et je me lance dans mes premiers script / automatisation. Je travaille sur mon arrosage automatique qui comporte 3 zones différentes. J’essaie de tout de suite travailler avec des variables / champs pour me faire le cerveau et « optimiser » le nombre de script et automatisation.
J’ai plusieurs variables qui changent en fonction de la zone à arroser et pour l’instant ca donne ca, exemple pour la zone 1:

Autom:

alias: Arrosage_z1_start
description: ""
trigger:
  - platform: state
    entity_id:
      - input_boolean.activation_arrosage_zone_1
    from: "off"
    to: "on"
condition:
  - condition: numeric_state
    entity_id: input_number.temps_zone1
    above: 0
action:
  - service: script.turn_on
    data:
      variables:
        temps: input_number.temps_zone1
        timer: timer.timer_arrosage_zone_1
        nzone: 1
        vanne_rainbird: switch.rain_bird_sprinkler_1
    target:
      entity_id: script.script_allumage_arrosage_variable
mode: single

Script :

alias: start arrosage variable
fields:
  temps:
    description: Temps d'arrosage à réaliser
    example: 5 minutes
  timer:
    description: Timer de l'arrosage en cours
    example: 2min 25s
  nzone:
    description: Zone à arroser
    example: 1
  vanne_rainbird:
    description: Vanne d'arrosage à activer
    example: switch.rain_bird_sprinkler_1
sequence:
  - service: timer.start
    data:
      entity_id: "{{ timer }}"
    data_template:
      duration: "{{ states(temps) | int * 60 }}"
  - service: switch.turn_on
    metadata: {}
    data: {}
    target:
      entity_id: "{{ vanne_rainbird }}"
  - service: notify.mobile_app_tel_syl
    metadata: {}
    data:
      title: Activation arrosage automatique
      message: >-
        L'arrosage de la zone {{ zone }} est en cours pendant {{
        states(temps) | int }} minutes
  - service: notify.mobile_app_tel_2
    metadata: {}
    data:
      title: Activation arrosage automatique
      message: >-
        L'arrosage de la zone {{ zone }} est en cours pendant {{
        states(temps) | int }} minutes
mode: parallel
max: 4

Cela fonctionne bien mais, étant donné que toutes les entités que je « variabilise » sont sous la même forme et que seul le numéro de la zone change dans l’id de l’entité. Exemple :

Pour la zone 1 : switch.rain_bird_sprinkler_1
Pour la zone 2 : switch.rain_bird_sprinkler_2

Pour la zone 1 : input_number.temps_zone1
Pour la zone 2 : input_number.temps_zone2

J’aurais voulu savoir si il est possible d’intégrer le champs directement dans l’id de l’entité. Dans le but de n’avoir que le numéros de la zone en variable :

fields:
  nzone:
    description: Zone à arroser
    example: 1

Pour l’utiliser de cette façon: (que je n’arrive pas à faire fonctionner)

sequence:
  - service: timer.start
    data:
      entity_id: timer.timer_arrosage_zone_{{ nzone }}
    data_template:
      duration: "{{ states('input_number.temps_zone{{ nzone }}') | int * 60 }}"
  - service: switch.turn_on
    metadata: {}
    data: {}
    target:
      entity_id: switch.rain_bird_sprinkler_{{ nzone }}

J’ai essayé plusieurs syntaxes mais je n’ai pas réussi à trouver la bonne ou même si c’est possible ou non …

Merci d’avance à ceux qui me répondront :slight_smile:

Salut,

Deux séries de {{ }}, je pense que c’est pas valable (et erreur sur les valeurs par défaut)

ça c’est sans doute plus correct mais à tester

duration:  "states('input_number.temps_zone{{ nzone }}') | int(0) * 60"

Bonjour,
la bonne syntaxe:

      service: timer.start
      data:
        duration: "{{ states('input_datetime.test_time') }}"
      target:
        entity_id: timer.test_timer

Tu utilise une vielle syntaxe.

Merci à vous pour les remarques :grinning:

J’ai réussi à trouver une syntaxe qui fonctionne, grâce au tilde ~
Cela donne (avec la nouvelle syntaxe du timer.start :innocent: ) :

service: timer.start
    data:
      duration: "{{ states('input_number.temps_zone' ~nzone) | int(0) * 60 }}"
    target:
      entity_id: "{{ timer }}"

Cela fonctionne bien pour la durée, mais pas encore réussi à trouver la bonne syntaxe en utilisant ~ pour l’entity_id.
Je vais continuer à faire des tests, si vous avez une idée je suis preneur :smiley: