Timer sous forme de script

Bonjour à tous

Je cherche à regrouper deux Timer en utilisant un Timer Global :

Timer 1 (script) Durée minute arrosage Serre Gauche
Timer 2 (script) Durée minute arrosage Serre Droite
Timer 3 Global : rependre la même durée pour le Timer 1 et 2

ou il a peut-être une solution plus simple … :face_with_hand_over_mouth:

Une idée ?

Merci d’avance

Peux tu expliquer le besoin de regroupement plutôt ? :wink:

Car peut être que ce n’est pas cette approche qu’il faut… :innocent:

Bonjour Clemalex,

En fait j’ai plusieurs timer (script) pour l’arrosage dans une serre et j’aimerais parfois utiliser un timer global à la place de passer sur chaque timer individuellement !!!

Bien à toi

Bruno

Si je me trompe pas tu voudrai lancer un timer qui regroupe l’ensemble des timers.

Créer un group de sensor ?

Bonjour

Oui un timer général qui règle les autres timer à la même durée :innocent: si je veux arroser tout en même temps
Merci

En même temps ou durant le même temps ?

Du coup, oui, je passerais par un troisième timer et une automatisation qui se déclenche sur le changement de définition du temps du timer global avec comme action la définition du même temps sur les 2 autres timer.

ok d’accord mais là du coup je ne vois pas trop comment faire cette automatisation … je sais j’abuse :yum:

J’ai un pb qui tombe à pic dans cette discutions
Je voudrais récupérer le temps d’un custom Time picker pour injecter ce temp dans 1 timer.
Je pense que c’est possibleet ça rejoint un peu ce que tu veux faire

C’est pas si simple en fait, car on ne peut pas juste utiliser des minuteurs au vu des services disponibles…

Du coup, je dirais qu’il faut :

  • 3 input_number (timer1,timer2,timer_global)
  • 3 input_boolean (timer1,timer2, timer_global)
  • 2 timers (timer1, timer 2)
  • 1 automatisation de gestion du timer global
  • 3 automatisations pour le démarrage des timers (on peut faire une seule automatisation avec la fonction choose) sur changement d’état des booléens correspondants.

Et du coup, sur le papier, le fonctionnement serait le suivant:

  1. Les input_number servent à la définition du temps des timers.
    1.1 input_number.timer_1 correspond au temps du timer 1
    1.2 input_number.timer_2 correspond au temps du timer 2
    1.3 input_number.timer_global correspond au temps du timer 1 et timer 2
    1.3.1 Il faut une automatisation pour modifier les imput_number.timer[1,2] en fonction du global

  2. Les input_boolean servent à démarrer les timers correspondants :
    2.1 input_boolean.timer1 déclenche le démarrage du timer 1 (automatisation)
    2.2 input_boolean.timer2 déclenche le démarrage du timer 2 (automatisation)
    2.3 input_boolean.timer_global déclenche le démarrage du timer 1 et timer 2 (automatisation)

Ensuite, il ne reste plus qu’à créer une automatisation qui se déclenche sur le passage à l’état démarré de chaque timer sans oublier les automatisions de fin de timer.

Création des input_number :

animate

Automatisation de synchronisation des timers

animate

Tu peux copier le code des automatisations suivantes et les coller directement dans HA :

animate

Synchronisation des timers

alias: Synchroniser les timers
description: Permet de synchroniser les timers 1 et 2 suivant le timer global
trigger:
  - platform: state
    entity_id: input_number.timer_global
condition: []
action:
  - service: input_number.set_value
    target:
      entity_id:
        - input_number.timer_1
        - input_number.timer_2
    data:
      value: "{{states('input_number.timer_global')|int}}"
mode: single

Automatisation de démarrage des timers

Création des input_boolean

animate

Création des timers

animate

(le dernier global n’est pas utile car non utilisé)

Création des automatisations de déclenchement :

animate

Démarrage Timer 1

alias: Démarrage de Timer 1
description: Permet de démarrer le timer 1 sur le passage à vrai du booléen correspondant
trigger:
  - platform: state
    entity_id: input_boolean.timer_1
    to: 'on'
condition: []
action:
  - service: input_boolean.turn_off
    target:
      entity_id: input_boolean.timer_1
  - service: timer.start
    data:
      duration: '{{ states(''input_number.timer_1'') | int * 60 }}'
    target:
      entity_id: timer.timer_1
mode: single

Démarrage Timer 2

alias: Démarrage de Timer 2
description: Permet de démarrer le timer 2 sur le passage à vrai du booléen correspondant
trigger:
  - platform: state
    entity_id: input_boolean.timer_2
    to: 'on'
condition: []
action:
  - service: input_boolean.turn_off
    target:
      entity_id: input_boolean.timer_2
  - service: timer.start
    data:
      duration: '{{ states(''input_number.timer_2'') | int * 60 }}'
    target:
      entity_id: timer.timer_2_2
mode: single

Démarrage Timer 1 et 2

alias: Démarrage de Timer 1 et 2
description: >-
  Permet de démarrer le timer 1 et 2 sur le passage à vrai du booléen
  correspondant
trigger:
  - platform: state
    entity_id: input_boolean.timer_global
    to: 'on'
condition: []
action:
  - service: input_boolean.turn_off
    target:
      entity_id: input_boolean.timer_global
  - service: input_number.set_value
    target:
      entity_id:
        - input_number.timer_1
        - input_number.timer_2
    data:
      value: '{{states(''input_number.timer_global'')|int}}'
  - service: timer.start
    data:
      duration: '{{states(''input_number.timer_global'')|int * 60}}'
    target:
      entity_id:
        - timer.timer_1_2
        - timer.timer_2_2
mode: single

Et c’est à peu près tout.

Tu peux utiliser des cartes boutons plutôt que l’affichage des entités.
Tu peux utiliser des input_datetime plutôt que des input_numbers
Tu peux concatener les 3 automatisations de démarrage en une seule avec la fonction fonction.

A voir dans l’automatisation de démarrage, si le code suffit à répondre à ton problème ;

en remplaçant

states(''input_number.timer_global'')

par ton entité.

Si c’est dans un attribut, tu dois utiliser state_attr() :

state_attr('cover.time_based_postion','travelling_time_down')

et certainement sans la multiplication par 60 pour passer le temps en minutes.

Salut Clemalex

Merci et quel travail tu fais :+1: Je vais tester tous cela et je reviens vers toi.

Encore merci je suis épaté par ta disponibilité :smiley:

Bruno

1 « J'aime »

Salut Clemalex,

Voilà j’ai testé ta solution cela fonctionne sauf que je ne vois pas comment associer ma vanne au timer.
je passe sans doute à coté d’un truc :worried:
J’ai essayer d’ajouter dans l’automation le contact KNX qui déclenche ma vanne mais sans succès !!
Timer

J’ai trouvé la solution et maintenant je peaufine

:crazy_face:

Voici le résultat final

@foxbru intéressent comme carte et concept intéressent puis-je te demander le code lors du résultat final :slightly_smiling_face:

PS: j’avoue être novice avec le « timer » et je souhaiterai m’entraîner

Merci Clemalex, ca marche nickel avec une automation mais directement dan le lovelace c’est pas bon

   tap_action:
      action: call-service
      service: timer.start
      service_data:
        duration:
           "{{states(input_datetime.tempo1)}}"
      target:
        entity_id: timer.timer_1h_temps

si je met 00:00:30 par exemple ca fonctionne
j’ai essayé plein d’autre chose et rien voici le type de message que j’ai

Échec d’appel du service « timer/start ». offset [[[« states(‹ input_datetime.tempo1 ›) »]]] should be format ‹ HH:MM ›, ‹ HH:MM:SS › or ‹ HH:MM:SS.F › for dictionary value @ data[‹ duration ›]

merci en tout cas pout toutes l’aides données

Si tu veux le faire depuis Lovelace déplace les actions dans un script et execute le script :

Pour lovelace (un bouton par exemple) :

type: button
tap_action:
  action: call-service
  service: script.turn_on
  service_data: {}
  target:
    entity_id: script.tempo_01

Et le script :

sequence:
  - service: timer.start
    data:
      duration: '{{states(''input_number.timer_global'')|int * 60}}'
    target:
      entity_id:
        - timer.timer_1_2
mode: single
alias: tempo 01

Merci beaucoup
si je prend ton poste sur la carte timer tu utilises pour chaques bouton entity_id: timer.timer_1h_temps et tu changes l’icone. <tu gere comment le scripte dans ce cas?

Pas de script dans la carte timer, juste les services de base.

ok mais je ne vois pas comment envoyer les infos comme le fait clemalex (sous forme de fichier à copier) pour ne pas polluer les messages :kissing_closed_eyes:

Lors de ta réponse tu clique dans la barre sur </> et tu colle ton code :slightly_smiling_face:

1 « J'aime »