Comment faire une automatisation unique à partir de plusieurs?

Bonjour,

Mon problème

Je souhaite forcer le mode chauffe de mon radiateur via l’utilisation d’un bouton prenant une entité input_boolean.chauffage_force_salon : j’active le bouton, l’entité passe à activée, et inversement.

J’ai créé une automatisation qui permet de passer le mode chauffe du VTherm (j’utilise Versatile Thermostat) en chauffe plutôt que éteint.
Voilà l’automatisation en question :

alias: Chauffe Forcée VTherm Salon
description: ""
triggers:
  - trigger: state
    entity_id:
      - input_boolean.chauffage_force_salon
    to:
      - "on"
conditions: []
actions:
  - device_id: 901b7dcb2eaa6313d1b3910c5e358972
    domain: climate
    entity_id: e584c68692ed499b1d9d111ac5d86d37
    type: set_hvac_mode
    hvac_mode: heat
mode: single

J’aimerais pouvoir avec une seule gérer l’activation et la désactivation du mode forcé, me mettant alors soit en chauffe soit en off le VTherm.

Il me semble que c’est possible, mais j’ai oublié comment faire, ni où se trouve les infos pour faire ça :slight_smile:

Je suis aussi preneur de vos conseils car j’ai l’impression d’avoir oublié quelque chose :sweat_smile:

PS : j’ai aussi en // un système d’automatisation/script qui me gère un mode boost pour un temps précis paramétré via un timer.

Merci par avance de votre aide
++

Bonjour,

tu parles du trigger ID ?

2 « J'aime »

Ha oui ! Merci :smiling_face_with_three_hearts:

je vais essayer de faire seul ^^
Si jamais je reviendrais ici :slight_smile:

1 « J'aime »

Normalement avec le tuto, tu devrais t’en sortir. Mais si besoin, n’hésite pas.

1 « J'aime »

Au pire tu trouveras plein d’exemple un peu partout…

Après c’est un choix quasi philosophique:

  • deux (ou plus) automatisations simples, avec un nom proche, groupées dans l’UI, voire avec un label commun
  • une intégration compliquée qui fait la même chose, moins lisible, plus compliquée à maintenir

Perso je ne le fais que dans les cas très simples (comme ton exemple), avec un trigger => une action…

1 « J'aime »

Oui effectivement, j’ai pensé aussi à cette complexité ^^
Mais là pour ce que je veux faire, ça devrait être Ok :wink:

Oui, tout à fait…

Tiens, un exemple (les syntaxes ont peut être un peu vieilli, mon exemple date un peu, mais si tu fais ça avec l’UI ce sera carré…). Tout se passe dans les « id » ajoutés dans les triggers,

trigger:
  - platform: state
    entity_id:
      - sensor.0x00158d0005007002_current_tarif
    attribute: active_register_tier_delivered
    from: HPJR
    id: fin

puis les conditions dans les actions

action:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - fin
        sequence:

Le code :

alias: TEMPO - Gestion booléen Tarif Rouge
description: |-
  Gestion du booléen "tarif rouge":
  - Active le booléen tarif rouge lors du passage HPJR
  - Désactive le booléen tarif rouge lorsque HPJR se termine
trigger:
  - platform: state
    entity_id:
      - sensor.0x00158d0005007002_current_tarif
    attribute: active_register_tier_delivered
    from: HPJR
    for:
      hours: 0
      minutes: 0
      seconds: 10
    id: fin
  - platform: state
    entity_id:
      - sensor.0x00158d0005007002_current_tarif
    attribute: active_register_tier_delivered
    to: HPJR
    for:
      hours: 0
      minutes: 0
      seconds: 10
    id: debut
condition: []
action:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - fin
          - condition: state
            entity_id: input_boolean.tarif_rouge
            state: "on"
        sequence:
          - service: input_boolean.turn_off
            data: {}
            target:
              entity_id: input_boolean.tarif_rouge
      - conditions:
          - condition: trigger
            id:
              - debut
        sequence:
          - service: input_boolean.turn_on
            data: {}
            target:
              entity_id: input_boolean.tarif_rouge
mode: single
1 « J'aime »

Merci pour l’exemple :slight_smile:
Le tuto donné en lien par @WarC0zes a suffi

Pourquoi dis-tu que je serais cramé avec l’UI ??
J’ai bien réussi à faire ^^

voilà le code yaml :

alias: Chauffe Forcée VTherm Salon - ON-OFF
description: ""
triggers:
  - trigger: state
    entity_id:
      - input_boolean.chauffage_force_salon
    to:
      - "on"
    id: chauffe_salon_on
  - trigger: state
    entity_id:
      - input_boolean.chauffage_force_salon
    to:
      - "off"
    id: chauffe_salon_off
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - chauffe_salon_on
        sequence:
          - device_id: 901b7dcb2eaa6313d1b3910c5e358972
            domain: climate
            entity_id: e584c68692ed499b1d9d111ac5d86d37
            type: set_hvac_mode
            hvac_mode: heat
      - conditions:
          - condition: trigger
            id:
              - chauffe_salon_off
        sequence:
          - device_id: 901b7dcb2eaa6313d1b3910c5e358972
            domain: climate
            entity_id: e584c68692ed499b1d9d111ac5d86d37
            type: set_hvac_mode
            hvac_mode: "off"
mode: single

Et ça fonctionne bien :wink:
CleanShot 2025-11-25 at 11.03.20

le reste plus qu’à ajouter une partie dans mon automatisation de fin de timer pour mon mode boost.

2 « J'aime »

J’ai dit ‹ carré ›, propre quoi. Ma syntaxe était un poil vieille (tirée d’un vieux post) : trigger , condition, action au singulier, etc…

Au moins avec l’UI les syntaxes sont toujours bonnes…

Tu rajoute le trigger sur l’event avec un id « fin de mode boost » sur le même modèle…

Pour des automatisations « simples », un trigger => une action je trouve que ça marche très bien.
Pour des automatisations plus complexes, je préfère des codes moins longs et faire plusieurs automatisations.

Dans ton exemple, c’est pile poil là où ça sert pour moi: on groupe mais ça reste lisible.

1 « J'aime »

Ha mince, pardon, j’ai mal lu :sweat_smile: manque de sommeil :rofl:

Et oui, la syntaxe avec l’UI est censé être bonne :slight_smile:

À une époque je passais par le YAML, mais c’est devenu moins pénible de faire via l’UI, et surtout pas besoin de recharger HA pour activer des modifications faites dans un YAML…

Faut que je vois comment je fais avec mes automatisations et scripts de mode boost.


Car j’ai un script qui active le timer et lance le mode boost du VTherm dès que je clique sur le bouton « Play » 1, un autre script pour le bouton 2 « Stop ».
Et une automatisation qui lance le script dès que je lance le boost directement sur le VTherm.
Autant je peux fusionner les deux automatisations :

Autant je ne suis pas sûr de pouvoir le faire avec les deux scripts :

Je suis d’accord avec ceci :slight_smile:

Sinon question : je personnalise les ID chauffe_salon_on , chauffe_bureau_on.
Mais est-ce que si je mets que chauffe_on et chauffe_off ces deux ID restent confinés dans l’automatisation ?
En gros, l’action sur une automatisation ne déclenchera pas toutes celles qui ont ces ID ?
Car si c’est possible, ça va me simplifier encore plus la gestion d’ajouts futurs ^^

OUI. Pour moi c’est local dans l’automatisation.

J’en ai plusieurs il me semble avec les id ‹ debut › et ‹ fin › et ça ne se marche pas sur le short…

Je viens de faire l’essai, et c’est OK :wink: Le changement dans l’une, ne touche pas les autres.
C’est donc bien local.
Merci :folded_hands:

Bonjour @MilesTEG1
plutôt sympa ta carte avec le timer boost :wink:
Tu partagerais le code stp :wink:
Merci.
Bob

1 « J'aime »

Si tu veux ^^

type: custom:bubble-card
card_type: button
entity: input_number.boost_duration_vtherm_salon
button_type: slider
name: Durée Boost Salon
sub_button:
  - entity: input_number.boost_duration_vtherm_salon
    show_icon: false
    show_state: true
    show_attribute: false
    attribute: mode
    tap_action:
      action: none
    state_background: true
    show_background: true
    name: Durée
  - name: Start
    icon: mdi:play
    state_background: true
    show_background: true
    tap_action:
      action: call-service
      service: script.timer_boost_salon_start_script_ui
      target: {}
  - name: Stop
    icon: mdi:stop
    tap_action:
      action: call-service
      target: {}
      service: script.timer_boost_salon_stop_script_ui
grid_options:
  columns: 12
  rows: 1
tap_action:
  action: none
styles: |-

  .bubble-icon {
    color:  rgba(126, 104, 143, 1) !important;
  }

  .bubble-button-card-container {
    background: rgba(55,55,55,0.8) !important;
  }

  .bubble-range-fill { 
    background: rgba(79, 69, 87, 1) !important;
    opacity: 1 !important;
  }

  .bubble-sub-button-1 {
    background-color: rgba(0, 148, 255, 0.5) !important;
    opacity: 1 !important;
    height: 30px !important;
    min-width: 80px !important;
    font-size: 14px !important;
    font-weight: bold !important;
  }

  .bubble-sub-button-2 {
    background-color: rgba(0, 255, 0, 0.75) !important;
    opacity: 1 !important;
    height: 30px !important;
    width: 50px !important;
    font-size: 14px !important;
    font-weight: bold !important;
  }

  .bubble-sub-button-2 > ha-icon {
    color: rgba(0, 0, 0, 1) !important;
  }
  .bubble-sub-button-3 > ha-icon {
    color: rgba(0, 0, 0, 1) !important;
  }

  .bubble-sub-button-icon {
    --mdc-icon-size: 26px !important;
  }

  .bubble-sub-button-3 {
    background-color: rgba(255, 0, 0, 0.75) !important;
    opacity: 1 !important;
    height: 30px !important;
    width: 50px !important;
    font-size: 14px !important;
    font-weight: bold !important;
  }
modules:
  - default
double_tap_action:
  action: none
hold_action:
  action: none
button_action:
  tap_action:
    action: none

Il te faudra les bubble card :slight_smile:

edit : si tu trouves comment afficher dans la carte le temps restant d’un timer, je suis prenneur, je n’ai jamais réussi à trouver comment faire…
du coup je dois mettre une autre carte XD

1 « J'aime »
  • 1/ Il n’est pas nécessaire de tout fusionner.
  • 2/ Tes scripts n’ont pas de trigger, donc ils doivent rester des scripts indépendants.

La/les seules choses que tu peux fusionner ce sont les automatisations:

  • celle qui trigge à la fin du timer
  • celle qui trigge sur l’enclenchement du mode boost sur le VTherm et lance le timer

De mon point de vue, fusionner des automatisations ensemble n’a de sens que si elles ont affaire à la même logique/ au même équipement / etc…

A toi de voir si c’est pertinent ou pas…
Mais:

  • fusionner les deux automatisations qui gèrent le timer me semble raisonnable.
  • fusionner les 4 automatisations (gestion du timer boost et gestion de la marche forcée) semble encore jouable (4 triggers, 4 actions, tous relatifs au chauffage) mais ce serait ma limite perso.

Effectivement, les scripts ne peuvent pas fusionner xD

Mais j’ai fusionné les deux automatisation START et STOP qui se déclenchaient quand on appuyait sur le bouton boost du VTherm.

alias: Timer START-STOP - Mode Boost Salon - UI
description: ""
triggers:
  - trigger: state
    entity_id:
      - climate.vtherm_salon
    attribute: preset_mode
    to: boost
    id: Boost_START
  - trigger: state
    entity_id:
      - climate.vtherm_salon
    attribute: preset_mode
    id: Boost_STOP
    from:
      - boost
  - trigger: state
    entity_id:
      - timer.boost_timer_vtherm_salon
    id: Boost_STOP_TIMER
    enabled: true
    to:
      - idle
  - trigger: state
    entity_id:
      - timer.boost_timer_vtherm_salon
    id: Boost_STOP_TIMER
    enabled: true
    to:
      - unavailable
conditions: []
actions:
  - choose:
      - conditions:
          - condition: trigger
            id:
              - Boost_START
        sequence:
          - action: script.turn_on
            metadata: {}
            data: {}
            target:
              entity_id: script.timer_boost_salon_start_script_ui
      - conditions:
          - condition: trigger
            id:
              - Boost_STOP
              - Boost_STOP_TIMER
        sequence:
          - action: script.turn_on
            metadata: {}
            data: {}
            target:
              entity_id: script.timer_boost_salon_stop_script_ui
mode: single

J’en ai profité pour ajouter dans le script de stop une partie qui vérifie si le bouton chauffe forcé est à ON ou OFF. Si c’est ON, on laisse sur « heat », sinon on passe sur « éteint ».

Salut

Les scripts peuvent être fusionnés mais comme il n’ont pas de trigger il faut leur envoyer une variable qui change selon ce qui appelle le script.

Cette variable devient en quelque sorte un trigger_id

Il y’a un exemple de carte et script là :

1 « J'aime »

Ce sujet a été automatiquement fermé après 60 jours. Aucune réponse n’est permise dorénavant.