Automation avec bascule ON-OFF periodique

Je cherche à effectuer une bascule on/off cyclée toutes les X et Y minutes. (On pendant X et OFF pendant Y)

De manière concrète, pour un chauffage central j’ai besoin, lorsqu’il y a un appel de chauffage (input_boolean.marche_chauffage)
de lancer immédiatement la pompe de circulation (switch.enocean.relais_pompe_0)
puis de lancer après delay: 5 secondes, le bruleur (switch.enocean.relais_chaudiere_1)
Tant que l’input_boolean est ‹ on ›, je maintiens la pompe en circulation, mais je fais dois faire des séquences Marche/arret du bruleur.

L’automation ci-dessous fonctionne pour le démarrage et le cyclage.
Mais il faut que tout s’arrête immédiatement lorsque l’input_boolean.marche_chauffage passe à ‹ off ›.
Or dans l’état actuel, la séquence continue. Et le bruleur attend la fin de l’écoulement du temps X avant de s’arrêter. La pompe, attend ensuite le temps de pause Z (8’ dans l’automation ci-dessous). (Un beau GRAFCET…)
Quand à la sécu surtemperature. bah pareil ! Pas de coupure immédiate dans l’état actuel.

Comment feriez-vous pour faire tout retomber immédiatement au passage off de la demande de chauffage ?


 #####################################################
  ######     GESTION Marche / Arret CHAUDIERE    ######
  #####################################################
       
- id: 'cyclage relais chauffage'
  alias: Marche Arret Relais Chaudiere
  description: 'Commande des relais chaudiere'
 
  trigger:
    - platform: state
      entity_id:
        - input_boolean.marche_chauffage
        - input_boolean.secu_surtemperature
   
    - platform: time_pattern  # rafraichissement supplémentaire toutes les /x minutes
      minutes: '/1'
     
  condition: []
 
  action:
    - choose:
        - conditions:
            - condition: state
              entity_id: input_boolean.marche_chauffage
        # Si appel Marche chaudiere   
              state: 'on'
        # securités sur-temperature
            - condition: state
              entity_id: input_boolean.secu_surtemperature
              state: 'off'
      
          sequence:
            - service: switch.turn_on
              entity_id: switch.enocean_relais_pompe_0
            - delay:
                seconds: 5
            - service: switch.turn_on
              entity_id: switch.enocean_relais_chaudiere_1
        # Coupure chaudiere pour amortir pic de chaleur
            - delay:
                minutes: 10
            - service: switch.turn_off
              entity_id: switch.enocean_relais_chaudiere_1
            - delay:
                minutes: 8
           
        # Si appel Arret chaudiere  
      default:
        - service: switch.turn_off
          entity_id:
            - switch.enocean_relais_pompe_0
            - switch.enocean_relais_chaudiere_1

  mode: single

Mets les actions que tu veux arrêter immédiatement dans un script puis lors d’un changement d’état de l’entité déclencheur tu appelles le service script.turn_off (qui normalement stop le script immédiament).

N’hésite pas si tu vois pas comment faire.

Merci,

Je vais cogiter à cette façon de faire. (Pas encore touché aux scripts…)
Comme je n’ai pas abordé cette façon de faire, j’espérais m’en sortir sans (à la suite de mes précédentes automations.
Vais éplucher çà :wink:

Sans vouloir ressortir ma rengaine avec Nodered :slight_smile: ce genre de truc me parait beaucoup plus simple en nodered plutôt qu’avec HA en natif.
Si tu es intéressé je peux faire un flot d’exemple pour montrer quelle tête ça pourrait avoir. Mais, si tu es sûr de ne pas vouloir partir sur ce genre de solution, je ne fais rien :wink:

1 « J'aime »

Moi je veux bien…

image

1 « J'aime »

Personnellement, je te conseilles de tout faire avec des scripts…

Les automations ne devrais servir qu’à lancer des scripts…

C’est une façon de voir les choses, mais c’est présenté comme ceci dans la documentation :

The script integration allows users to specify a sequence of actions to be executed by Home Assistant

Permet aux utilisateurs de spécifier une séquence d’actions à exécuter par Home Assistant

C’est demandé si gentiment…

Les noeuds les plus à gauche sont des « trigger ». Ils sont activés si le input_boolean qui va bien est à l’état On ou Off suivant les cas.

Avec les noeuds tests on teste (!) si c’est vrai c’est l’output (le rond) du haut qui est appelé. En bas, on ne fait rien.

Et les noeuds switches sont les actions pour passer on/off les relais correspondants.

Voilà, je pense que ça fait ce qui est attendu.

PS: Si marche_chauffage est mis à off puis on à nouveau avant la fin de l’expiration des délais au dessus, donc, au plus 18 minutes le flot ne marche pas tel quel. Il faut rajouter des tests/vérifications en plus… Mais, bon, pour un exercice du soir, ça suffit :slight_smile:

2 « J'aime »

Ouahhhh tout çà !!!

@Clemalex
Trop mimi la doléance pour une version Nodered
Après quelques lectures, je vais tenter les scripts. Ce sera un bon moyen de s’y mettre. Et çà me semble facilement accessible. A suivre …

@golfvert
Merci beaucoup pour la proposition et le temps passé pour cet exemple appliqué. Mais j’avoue que la version script me semble plus engageante.
Ça m’oblige à rajouter un addon (et j’ai du mal avec chaque addon ajouté) pour au final retrouver une problématique similaire.

A suivre :wink:

Pas de quoi. C’est effectivement une question de goût et de choix. Vu comment marche mon cerveau, l’aspect visuel de nodered me parle.
J’aime les oranges et je n’aime pas les bananes. J’imagine que pour d’autres c’est l’inverse.
Ce qui est bien avec HA, c’est que l’on a le choix :slight_smile:

Dans le but de partager une solution fonctionnelle. Celle-ci fonctionne depuis quelques jours à base d’automations et de scripts

Dans le fichier automation.yaml :


  #####################################################
  ######     GESTION Marche / Arret CHAUDIERE    ######
  #####################################################


- id: 'cyclage marche chaudiere'
  alias: Marche chaudiere
  description: 'Mise en Marche chaudiere'
  
  trigger:
    - platform: state
      entity_id: 
        - input_boolean.bit_marche_chauffage
        - input_boolean.secu_surtemperature

  condition: 
    condition: and
    conditions:
     # Dde marche chauffage
      - condition: state 
        entity_id: input_boolean.bit_marche_chauffage
        state: 'on' 
     # Chauffage encore à l'arret
      - condition: state 
        entity_id: switch.enocean_relais_pompe_0
        state: 'off'
     # Pas de securite surtemperature
      - condition: state 
        entity_id: input_boolean.secu_surtemperature
        state: 'off'
  
  action: 
  
   # Lancement pompe de circulation 
    - service: switch.turn_on
      data:
        entity_id: switch.enocean_relais_pompe_0
        
   # Attente avant lancement bruleur     
    - delay:
        seconds: 5
        
   # Lancement cyclage bruleur        
    - service: script.cyclage_chaudiere
     
  mode: single
  
    ###################################
  
- id: 'cyclage arret chaudiere'
  alias: Arret chaudiere
  description: 'Arret chaudiere'
  
  trigger:
    - platform: state
      entity_id: 
        - input_boolean.bit_marche_chauffage
        - input_boolean.secu_surtemperature

  condition: 
    condition: or
    conditions:
        # Securite surtemperature active  
      - condition: state 
        entity_id: input_boolean.secu_surtemperature
        state: 'on'
        
        # Demande arret chauffage
      - condition: state 
        entity_id: input_boolean.bit_marche_chauffage
        state: 'off'
 
  
  action: 
    - service: switch.turn_off
      data:
        entity_id:
          - switch.enocean_relais_pompe_0 # Pompe circulation chaudiere
          - switch.enocean_relais_chaudiere_1 # Bruleur chaudiere
        
    - service: script.turn_off
      data: 
        entity_id:
          - script.cyclage_chaudiere
          - script.boucle_script_cyclage_chaudiere
     
  mode: single

Dans le fichier script.yaml


##### Cyclage Marche / Arret Bruleur #####

cyclage_chaudiere:
  sequence:
  # Mise en route bruleur
    - service: switch.turn_on
      data:
        entity_id: switch.enocean_relais_chaudiere_1 # relais bruleur chaudiere
    
  # Lancement cyclage bruleur
    - service: script.turn_on
      data:
        entity_id: script.boucle_script_cyclage_chaudiere
        
  mode: restart 
        
        
boucle_script_cyclage_chaudiere:
  sequence:
   # Temps de fonctionnement bruleur
    - delay:
        minutes: 8
        
    - service: switch.turn_off
      data:
        entity_id: switch.enocean_relais_chaudiere_1 # relais bruleur chaudiere
        
   # Temps de pose bruleur
    - delay:
        minutes: 10
        
   # Bouclage pour remise en route bruleur après periode de stand-by     
    - service: script.turn_on
      data:
        entity_id: script.cyclage_chaudiere
        
  mode: restart

Voilà !

1 « J'aime »

Merci pour le retour…

Si tu veux approfondir tes connaissances, prochaine étape, la concaténation des 2 automatisations en une seule car elles utilisent les mêmes trigger pour la même portée (la chaudière)

Indice 1

même si c’est dans les scripts, cela fonctionne très bien dans les automatisations :wink: : choose

Indice 2

https://forum.hacf.fr/search?q="choose%3A"

C’est ce que j’avais imaginé et réalisé au début. Voir le premier post. Mais çà ne fonctionnait pas comme je l’espérais.

J’ai sans doute merdoyé quelque part.

J’avais également essayé de tout passer en script, mais çà ne fonctionnait pas non plus (mes scripts ne s’arrêtaient pas où je voulais en script.turn_off.
Comme çà fonctionne avec la solution du post #10 je suis passé à un autre problème… Qui n’a rien à voir… : La commande de plusieurs modules variateurs Enocean Eltako.

En tous cas, merci pour votre aide !