Timer avec retour à l'état initial

Bonjour,

J’ai crée dans l’ordre :

  • un input_select (input_select.chauffage4)
  • un input_number (input_number.chauffage_timer_maison_minutes)
  • un input_boolean (input_boolean.switch_timer_chauffage_maison)

image

L’idée est la suivante, au basculement de l’input_boolean :

  • On sauvegarde l’état d’un input_select (input_select.chauffage) puis on remplace son état par celui affiché (input_select.chauffage4) le temps de l’input_number (input_number.chauffage_timer_maison_minutes)
  • A la fin du timer, l’input_select (input_select.chauffage) retrouve son état d’origine (d’ou la copie au début) et le switch bascule sur off.

Je cherche à écrire l’automatisation correspondante.

Je lis ce message et me rends compte que je t’ai dis de faire la même ici :

:wink:

Pour la mémorisation on t’a déjà répondu ici :

Pour en revenir à ta demande :

Loupé ! :wink: Il te faut 2 automatisations

Automatisation 1
Si booléen = vrai ALORS
  Mémorisation de mode_de_chauffage
  Affectation mode_de_chauffage = mode_chauffage_forcé
  Lancement du timer le temps définit par le nombre
FIN SI

Automatisation 2
Si fin_timer détecté ALORS
   Affectation mode_de_chauffage = mode_chauffage_mémo
FIN SI

Merci de ton aide @Clemalex mais ma difficulté ne réside pas dans la logique à avoir pour arriver à ce que je veux faire mais dans sa mis en oeuvre.
Écris autrement, sous Domoticz, j’ai programmé plusieurs années en lua. La logique (de programmation), je pense que je l’ai (même si elle peut légèrement différer sous HA) par contre le yaml est tout nouveau pour moi et bon nombre de fonctions et leurs syntaxes me sont étrangères.
Je progresse petit à petit mais encore bien loin de ce que je pouvais faire en lua.

Pourquoi parler du YAML alors que maintenant tout se fait depuis l’interface ? :sweat_smile:

Suivre le lien pour voir le gif : Action aprés la fin d'un timer - #4 par Clemalex

Pour des choses simples, j’utilise l’interface. Quand c’est plus compliqué, j’utilise un mixte des deux.
Finalement, j’ai fais ça (j’ai un peu melangé les switchs et les booleans… mais bon !!)

image

alias: Chauffage ON Temporaire Salon
description: ''
trigger:
  - platform: state
    entity_id: input_boolean.switch_timer_on_chauffage_salon
    from: 'off'
    to: 'on'
condition: []
action:
  - service: input_text.set_value
    target:
      entity_id: input_text.text1
    data:
      value: '{{ states(''input_select.chauffage'') }}'
  - service: input_select.select_option
    target:
      entity_id: input_select.chauffage
    data:
      option: '{{ states(''input_select.chauffage5'') }}'
  - service: switch.turn_on
    target:
      entity_id: switch.etat_timer_salon
  - service: timer.start
    data_template:
      entity_id: timer.temps_chauffage_temporaire_salon
      duration: '{{ states(''input_number.chauffage_timer_salon_minutes'') | int }}'
mode: single
alias: Chauffage OFF Temporaire Salon
description: ''
trigger:
  - event_data:
      entity_id: timer.temps_chauffage_temporaire_salon
    event_type: timer.finished
    platform: event
  - platform: state
    entity_id: input_boolean.switch_timer_off_chauffage_salon
    from: 'off'
    to: 'on'
condition: []
action:
  - service: input_select.select_option
    target:
      entity_id: input_select.chauffage
    data:
      option: '{{ states(''input_text.text1'') }}'
  - service: switch.turn_off
    target:
      entity_id: switch.etat_timer_salon
mode: single
chauffage_timer_salon_minutes:
    name: "Timer Chauffage Salon"
    min: 0
    max: 10
    step: 1
    unit_of_measurement: "hrs"
    icon: mdi:timer-sand
switch_timer_on_chauffage_salon:
  name: "Départ Timer Chauffage Salon"
  initial: off
  icon: mdi:timelapse
  
switch_timer_off_chauffage_salon:
  name: "Arrêt Timer Chauffage Salon"
  initial: off
  icon: mdi:timelapse

Mes automatisations souffrent de quelques problèmes :

  • Le Timer est en secondes, alors que je souhaite des heures
  • Je souhaiterai afficher le temps restant et/ou l’heure de fin du timer.

Un petit coup de main serait le bienvenu.

Merci.

C’est interprété en secondes…
Donc il faut multiplier.

As tu ajouté l’entité du timer dans une carte ? Car c’est natif ta demande… :sweat_smile:

Oui, je l’ai ajouté manuellement mais je ne vois pas. :thinking:

Comme ça je suppose :

duration: '{{ states(''input_number.chauffage_timer_salon_minutes'') | int * 3600 }}'

Comment supprimer la décimale ?

image

Merci.

animate

type: vertical-stack
title: Minuteur
cards:
  - type: horizontal-stack
    cards:
      - type: button
        name: Départ
        icon: mdi:play
        icon_height: 3em
        state_color: false
        show_name: false
        tap_action:
          action: call-service
          service: timer.start
          service_data:
            duration: '0'
          target:
            entity_id: timer.hacf
        entity: timer.hacf
      - type: button
        name: Pause
        icon: mdi:pause
        icon_height: 3em
        state_color: false
        show_name: false
        tap_action:
          action: call-service
          service: timer.pause
          target:
            entity_id: timer.hacf
        entity: timer.hacf
  - type: horizontal-stack
    cards:
      - type: entities
        entities:
          - entity: timer.hacf

Effectivement, tout simplement.
Et pour supprimer la décimale (voir mon post au dessus) ?

Merci.

C’est plus compliqué…
Va faire un tour sur le sujet de card-mod et les liens du 1er post…

Ah oui ! … ya de quoi lire. Faute de temps, pour l’instant, ça va rester comme ça.

Est-ce possible d’afficher simplement l’heure de fin du timer une fois celui-ci lancé ?

Oui :

Heure de lever et coucher du soleil - #5 par Clemalex

type: entities
entities:
  - entity: timer.hacf
  - entity: timer.hacf
    type: attribute
    attribute: finishes_at
  - entity: timer.hacf
    type: attribute
    attribute: finishes_at
    format: relative
  - entity: timer.hacf
    type: attribute
    attribute: finishes_at
    format: time

Simple et rapide. Merci. :+1:

1 « J'aime »

Bonjour @Clemalex,

Peut-on utiliser un slider pour programmer le timer ?
Si je le dis autrement, dans ton animation ci-dessous, quand tu appuies sur play, tu pars avec 10 min. Peut-on rajouter un slider qui permettrait de programmer la durée ?

J’applique aujourd’hui cette solution pour lancer manuellement mon chauffage quand c’est nécessaire mais j’utiliser un timer que j’ai programmé à 15 min: je suis donc obligé de relancer au bout de 15 min si je vais plus longtemps…

Merci pour ton aide.
smilorel

Tu peux ajouter le contrôle du timer directement depuis l’entité timer comme l’a fait @Dim33 :

@Clemalex: J’ai voulu remplacer mon timer « à durée fixe » par « une durée variable » à l’aide d’un input number que j’ai crée (cf ci-dessous) mais je pense que je m’y prend mal car j’ai une erreur à la vérification du redémarrage de HA.

  • Mon input_number (que je pourrai régler ultérieurement via un slider):
val_timer_chauffe_manu_min:
  name: "Durée en min du Chauffage MANU"
  min: 15
  max: 60
  step: 15
  unit_of_measurement: "min"
  icon: mdi:timer-sand

J’utilise aujourd’hui une carte button qui fonctionne bien avec un timer prédéfini (comme tu le suggère dans ce post):

...CODE CARTE BOUTON DEPART ...
tap_action:
  action: call-service
  service: timer.start
  service_data:
    duration: '0'
    entity_id: timer.timer_30min
entity: timer.timer_30min
  • Syntaxe dans mon fichier timers.yaml pour avoir un timing à durée variable:

=> Ce que j’ai aujourd’hui et qui fonctionne bien.

timer_30min:
    duration: '00:30:00'

=> Ce que je viens de faire pour rendre mon timer (avec une durée variable réglée par mon input_number) mais qui semble bloquer:

timer_chauffe_manu:
    duration: '{{ states(''input_number.val_timer_chauffe_manu_min''') | int / 60 }}'

(Edit: je viens également de tester cette syntaxe en regarder la doc HA sur les Input Number:
duration: "00:{{ states('input_number.val_timer_chauffe_manu_min') | int }}:00" sans plus de succès.)

  • Message lors du redémarrage de HA:

Citation
Invalid config for [timer]: offset {{ states(‹ input_number.val_timer_chauffe_manu_min ›) | int / 60 }} should be format ‹ HH:MM ›, ‹ HH:MM:SS › or ‹ HH:MM:SS.F › for dictionary value @ data[‹ timer ›][‹ timer_chauffe_manu ›][‹ duration ›]. Got « {{ states(‹ input_number.val_timer_chauffe_manu_min ›) | int / 60 }} ». (See /config/configuration.yaml, line 30).

=> Je comprends que ma syntaxe n’est pas bonne mais y’a t-il un moyen de contourner cette syntaxe ?

Merci.

Regarde ce post je pense qu’il est complet pour ce que tu souhaites faire.

Tu pioche dedans le principe et les automatisations.

Ca se situe au niveau du service timer.start