Timer sous forme de script

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 »

Salut :wave:,

Merci de participer sur le forum :+1:

:information_source: Lorsque tu postes du code (flow, yaml, js, etc.), utilise les blocs codes :computer:

Pour cela, il te suffit de cliquer sur l’outil dédié et de coller ton code à l’endroit indiqué :

L’équipe HACF.

:hacf:

AUTOMATION
  alias: Synchroniser les timers
  description: Permet de synchroniser tous les timers arrossage suivant le timer global
  trigger:
  - platform: state
    entity_id: input_number.timer_arrosage_global_serre
  condition: []
  action:
  - service: input_number.set_value
    target:
      entity_id:
      - input_number.timer_arrosage_serre_g
      - input_number.timer_arrosage_serre_d
      - input_number.timer_arrosage_serre_m
      - input_number.timer_arrosage_serre_deux
    data:
      value: '{{states(''input_number.timer_arrosage_global_serre'')|int}}'
  mode: single
- id: '1623853345540'
  alias: Démarrage de Timer Serre G - D - M - Deux
  description: Permet de démarrer les timers Serre G - D - M - Deux sur le passage
    à vrai du booléen correspondant
  trigger:
  - platform: state
    entity_id: input_boolean.arrosage_global_serre
    to: 'on'
  condition: []
  action:
  - service: switch.turn_on
    target:
      entity_id: 
      - switch.knx_arrosage_serre_g
      - switch.knx_arrosage_serre_d
      - switch.knx_arrosage_serre_milieu
      - switch.knx_arrosage_serre_deux
  - service: input_boolean.turn_off
    target:
      entity_id: input_boolean.arrosage_global_serre
  - service: input_number.set_value
    target:
      entity_id:
      - input_number.timer_arrosage_serre_g
      - input_number.timer_arrosage_serre_d
      - input_number.timer_arrosage_serre_m
      - input_number.timer_arrosage_serre_deux
      - timer.arrosage_global_serre
    data:
      value: '{{states(''input_number.timer_arrosage_global_serre'')|int}}'
  - service: timer.start
    data:
      duration: '{{states(''input_number.timer_arrosage_global_serre'')|int * 60}}'
    target:
      entity_id:
      - timer.arrosage_serre_gauche
      - timer.arrosage_serre_droite
      - timer.arrosage_serre_milieu
      - timer.arrosage_serre_deux
      - timer.arrosage_global_serre
  mode: single
- id: '1623942645906'
  alias: Démarrage de Timer Serre G
  description: Permet de démarrer le timer serre milieu sur le passage à vrai du switch
    KNX correspondant
  trigger:
  - platform: state
    entity_id: input_boolean.arrosage_serre_g
    to: 'on'
  condition: []
  action:
  - service: input_boolean.turn_off
    target:
      entity_id: input_boolean.arrosage_serre_g
  - service: timer.start
    data:
      duration: '{{ states(''input_number.timer_arrosage_serre_g'') | int * 60 }}'
    target:
      entity_id: timer.arrosage_serre_gauche
  - service: switch.turn_on
    target:
      entity_id: switch.knx_arrosage_serre_g
  mode: single
- id: stop arrosage serre gauche
  alias: Stop arrosage serre gauche
  trigger:
  - event_data:
      entity_id: timer.arrosage_serre_gauche
    event_type: timer.finished
    platform: event
  condition: []
  action:
  - data:
      entity_id: switch.knx_arrosage_serre_g
    service: switch.turn_off
  mode: single
- id: '1623942744415'
  alias: Démarrage de Timer Serre D
  description: Permet de démarrer le timer serre milieu sur le passage à vrai du switch
    KNX correspondant
  trigger:
  - platform: state
    entity_id: input_boolean.arrosage_serre_d
    to: 'on'
  condition: []
  action:
  - service: input_boolean.turn_off
    target:
      entity_id: input_boolean.arrosage_serre_d
  - service: timer.start
    data:
      duration: '{{ states(''input_number.timer_arrosage_serre_d'') | int * 60 }}'
    target:
      entity_id: timer.arrosage_serre_droite
  - service: switch.turn_on
    target:
      entity_id: switch.knx_arrosage_serre_d
  mode: single
- id: stop arrosage serre droite
  alias: Stop arrosage serre droite
  trigger:
  - event_data:
      entity_id: timer.arrosage_serre_droite
    event_type: timer.finished
    platform: event
  condition: []
  action:
  - data:
      entity_id: switch.knx_arrosage_serre_d
    service: switch.turn_off
  mode: single
- id: '1623943003398'
  alias: Démarrage de Timer Serre Milieu
  description: Permet de démarrer le timer serre milieu sur le passage à vrai du switch
    KNX correspondant
  trigger:
  - platform: state
    entity_id: input_boolean.arrosage_serre_m
    to: 'on'
  condition: []
  action:
  - service: input_boolean.turn_off
    target:
      entity_id: input_boolean.arrosage_serre_m
  - service: timer.start
    data:
      duration: '{{ states(''input_number.timer_arrosage_serre_m'') | int * 60 }}'
    target:
      entity_id: timer.arrosage_serre_milieu
  - service: switch.turn_on
    target:
      entity_id: switch.knx_arrosage_serre_milieu
  mode: single
- id: stop arrosage serre milieu
  alias: Stop arrosage serre milieu
  trigger:
  - event_data:
      entity_id: timer.arrosage_serre_milieu
    event_type: timer.finished
    platform: event
  condition: []
  action:
  - data:
      entity_id: switch.knx_arrosage_serre_milieu
    service: switch.turn_off
  mode: single
- id: '1623943036295'
  alias: Démarrage de Timer Serre Deux
  description: Permet de démarrer le timer serre milieu sur le passage à vrai du switch
    KNX correspondant
  trigger:
  - platform: state
    entity_id: input_boolean.arrosage_serre_deux
    to: 'on'
  condition: []
  action:
  - service: input_boolean.turn_off
    target:
      entity_id: input_boolean.arrosage_serre_deux
  - service: timer.start
    data:
      duration: '{{ states(''input_number.timer_arrosage_serre_deux'') | int * 60
        }}'
    target:
      entity_id: timer.arrosage_serre_deux
  - service: switch.turn_on
    target:
      entity_id: switch.knx_arrosage_serre_deux
  mode: single
- id: stop arrosage serre deux
  alias: Stop arrosage serre deux
  trigger:
  - event_data:
      entity_id: timer.arrosage_serre_deux
    event_type: timer.finished
    platform: event
  condition: []
  action:
  - data:
      entity_id: switch.knx_arrosage_serre_deux
    service: switch.turn_off
  mode: single

Merci @foxbru
peux-tu ajouter ta card lovelace elle était fort sympathique et intuitif
merci d’avance :slight_smile:

Voici
Peux-tu me faire un retour si ok ? Merci

type: entities
entities:
  - entity: switch.knx_arrosage_serre_g
  - entity: switch.knx_arrosage_serre_d
  - entity: switch.knx_arrosage_serre_milieu
  - entity: switch.knx_arrosage_serre_deux
  - type: section
  - entity: input_number.timer_arrosage_global_serre
    name: Reglage durée
    icon: mdi:timer-sand
  - entity: timer.arrosage_global_serre
    name: Durée restante
  - entity: group.arrosage_serres
header:
  type: picture
  image: http://192.xxx.xxx.xxx:xxxx/local/arrosage.jpg
  tap_action:
    action: none
  hold_action:
    action: none
footer:
  type: buttons
  entities:
    - entity: input_boolean.arrosage_global_serre
      icon: mdi:play
      name: Lancer l'arrosage
state_color: true

1 « J'aime »

Merci encore @foxbru
C’est parfait :slight_smile: