Automatismes simples et B.A.BA sur HA

Bonjour à vous tous,

Je suis tout nouveau dans le milieu de HA, et je m’expose aux difficultés de mise en œuvre de mes désirs… Je pense que mes connaissances sont trop limitées pour percer et commencer par moi même.

Je m’explique :
J’ai divers systèmes domotiques basiques de type zipamicro, smart home, alarme connectée…
Il m’est simple dans ces logiciels « très guidés » de réaliser des choses basiques, comme, par exemple, lorsque je passe ce bouton à ON, ça m’enclenche ceci, puis cela, puis, etc etc. Et lorsque je le bascule en OFF, ça a engendré ceci, cela, coupe ceci, etc.

Malheureusement, je pensais pouvoir transposer facilement ma « logique » sur HA, et je me vois confronté à de nombreuses contradictions (avec le fonctionnement, le principe, la logique, le non fonctionnement, …). Je me mélange et me perds entre Automatisation / scènes / script / etc

J’ai beau éplucher les forums, les tutos, les docs de fonctionnements dans HA, je ne parviens pas à produire le début de quelque chose qui fonctionne.

Mon équipement est un Raspberry Pi4 de 4Go avec démarrage HA sur SSD, clés Zigbee et Zwave, configuration ok, intégrations ok (MQTT, Zigbee2mqtt, etc), premiers modules zigbee reconnus et intégrés.

Ma recherche me semble « simple » :
Lorsque je clique sur un bouton X sur le tableau de bord (par exemple « mode été ») :
→ si passage a ON : => je déclenche le module 1 => puis j’attends x secondes = > je coupe module 2 => j’attends x secondes => puis si tel retour d’info est sur ON => je lance module 3 => si retour OFF alors envoie info “erreur” sur smartphone → si passage à OFF :
= > arrêter module x => attendre x secondes puis tout passer OFF

C’est un exemple, mais j’ai 4 ou 5 config du style à réaliser.

Après des recherches et des aides, j’ai pu démarrer et avancer, et c’est ainsi que j’ai pu réaliser un premier automatisme.
J’ai fait quelque chose de basique, et ça marche dans la chronologie.
Cependant, je m’expose à des anomalies de fonctionnement si j’interviens et modifie des données.

Voici mon « code » et je m’explique :

"
alias : AUTOMATISATION FILTRATION ETE
description : " "
trigger :

  • plate-forme : état
    entity_id :
    • input_boolean.filtration_ete
      de : « off »
      à : « on »
      condition : []
      action :
  • tapez : turn_on
    device_id : 1ea6475bc6b42120527e9f592682a298
    entity_id : switch.switch_pompe
    domaine : switch
  • délai :
    secondes : 5
  • type : turn_on
    device_id : 8356bf47044fc0de7b1a1a36e45c06f5
    entity_id : switch.4_relais_vitesses_pompe_l2
    domaine : switch
  • délai :
    minutes : 1
  • si:
    • type : is_not_open
      condition : appareil
      device_id : 12d1c1745e3eda555bc7d130958f3e47
      entity_id : binary_sensor.contact_debit_tamper
      domaine : binary_sensor
      puis :
    • type : turn_on
      device_id : ea4d0240dffa6a7f93d3ae2d0bef5f7a
      entity_id : switch.switch_regul_ph_cl
      domaine : switch
    • condition : heure
      après : « 08:00:00 »
      avant : « 20:00:00 »
      jour de la semaine :
      • lun
      • mar
      • mer
      • jeu
      • ven
      • sam
      • dim
        sinon :
    • stop : ERREUR PAS DE DEBIT DETECTE
      erreur : faux
      mode : unique

"

donc, tant que je ne touche à rien, ça marche.

comme indiqué, j’ai fait le code logiquement dans la chronologie : si ça, alors casse ça, si c’est ok, alors on fait ça… etc etc.

par contre, si un des éléments de ma chronologie change d’état (après déclenchement dans ma suite logique d’automatisation, et qui bloquerait dans ma séquence chronologique si condition non effective), alors j’aimerais qu’il réagisse en conséquence.

Par exemple, si mon binary_sensor.contact_debit_tamper passe en is_open, switch.switch_regul_ph_cl doit passer turn_off, puis switch.4_relais_vitesses_pompe_l2 aussi, puis après 10 secondes, switch.switch_pompe aussi.

Ce serait la même procédure à effectuer si j’arrête mon "* input_boolean.filtration_ete " (passage en inverse de « on » à « off »).

aussi, dans cette partie finale:
"
sinon :

  • stop : ERREUR AUCUN DEBIT DETECTE
    erreur : faux
    "
    ne me donne rien (feedback, information, action, notification, …)

Eh bien, je sais que c’est un niveau débutant un peu ennuyeux je suppose, et j’en suis désolé.
Merci d’avance pour votre aide !

Sylvain.

bonjour sylvain

Je ne saurais te répondre pour ton problème, mais je pense que ce serait plus facile pour ceux qui vont répondre de mettre ton code à l’aide de la balise </>

1 « J'aime »

Salut

Comme le fait très justement remarque @pascal_ha pas facile de comprendre exactement ce que fait l’automatisation.
Par principe, la mécanique si machin , faire truc, attendre, faire bidule etc ... c’est pénible à gérer
Et quand je vois des conditions en plein milieu des actions j’ai toujours en tête que c’est pas la bonne méthode.

Le point de départ, c’est de dire :

  • quels sont les conditions de démarrage ?
  • quels sont les restrictions (comprendre condition date/jour ?) ?
  • quels sont les vérifications (débits etc) ?
  • Et si tout est OK alors on allume les trucs

Pour la gestion des anomalies (pas de débits etc), c’est pê gérable dans une automatisation à part:
Quand la mécanique est en marche et que le débit n’est pas bon => stop

Bref, ça demande à refaire un peu d’algorithmie

Bonjour,

merci pour vos réponses :slight_smile:

je vais remettre le code entre balises pour plus de lisibilité (désolé je tâtonne encore).

Mon problème est que le/les déclenchements sont dépendants, en général, de l’exécution précédente:

  • Lorsque j’enclenche le bouton Booléan (activation depuis la carte sur HA)
    → alors j’allume le switch de la pompe
    → puis au bout de 5 secondes, j’active le relais de pilotage de la vitesse n°2
  • si au bout de 1 minute, mon capteur de débit est ok (indique qu’il y a bien un débit dans le circuit)
    → alors j’allume le switch des régulateurs pendant les horaires entre 8h et 20h tous les jours
    → sinon, j’envoie un message d’erreur sur le débit

(ps: je ne parviens pas à mettre le code en forme </> comme demandé :frowning: )

merci à vous

Salut

pour la mise en forme

bonne journée

Super merci :slight_smile:

alias: AUTOMATISATION FILTRATION ETE
description: ""
trigger:
  - platform: state
    entity_id:
      - input_boolean.filtration_ete
    from: "off"
    to: "on"
condition: []
action:
  - type: turn_on
    device_id: 1ea6475bc6b42120527e9f592682a298
    entity_id: switch.switch_pompe
    domain: switch
  - delay:
      hours: 0
      minutes: 0
      seconds: 5
      milliseconds: 0
  - type: turn_on
    device_id: 8356bf47044fc0de7b1a1a36e45c06f5
    entity_id: switch.4_relais_vitesses_pompe_l2
    domain: switch
  - delay:
      hours: 0
      minutes: 1
      seconds: 0
      milliseconds: 0
  - if:
      - type: is_not_open
        condition: device
        device_id: 12d1c1745e3eda555bc7d130958f3e47
        entity_id: binary_sensor.contact_debit_tamper
        domain: binary_sensor
    then:
      - type: turn_on
        device_id: ea4d0240dffa6a7f93d3ae2d0bef5f7a
        entity_id: switch.switch_regul_ph_cl
        domain: switch
      - condition: time
        after: "08:00:00"
        before: "20:00:00"
        weekday:
          - mon
          - tue
          - wed
          - thu
          - fri
          - sat
          - sun
    else:
      - stop: ERREUR PAS DE DEBIT DETECTE
        error: false
mode: single

je crois que c’est mieux !

merci à vous.

Salut

C’est toujours le principe des automatisations, un évènement déclenche une série d’action. La question est plutôt de savoir si la liste des exécutions à faire en 1 ou plusieurs fois (comprendre plusieurs déclencheurs différents)

Dans ta formulation le doute n’existe plus. On est bien d’accord que tu as d’un coté la notion d’allumage du filtrage (point 1). Et la notion de détection d’erreur (point 2).
Le point 2 n’est pas forcement séquentiel avec le point 1 : si ta filtration est marche ET que le débit est KO alors il y a une erreur. C’est valable sans notion de temps, y compris bien après le démarrage de la filtration. Ce qui veut donc dire que c’est gérable séparément

Pour le point c’est à relire tranquillement, mais la plage horaire est probablement à gérer en amont (coté trigger)

salut :slight_smile:

C’est pas faux ! :sweat_smile:
Alors il faudrait plutot que je fasse une boucle ? du type:

  • Lorsque j’enclenche le bouton Booléan (activation depuis la carte sur HA)
    → alors j’allume le switch de la pompe
    → puis au bout de 5 secondes, j’active le relais de pilotage de la vitesse n°2
  • si au bout de 1 minute, TANT QUE « mon capteur de débit est ok » (indique qu’il y a bien un débit dans le circuit)
    → alors j’allume le switch des régulateurs pendant les horaires entre 8h et 20h tous les jours
    → sinon, j’envoie un message d’erreur sur le débit

C’est pareil, les boucles c’est pas de la programmation évènementielle…

ça OK, ça ne me choque pas.

Là par contre, je m’étonne sur plein de chose :
Déjà, les horaires sont-ils bien utile ici. N’est pas plutôt dans l’automatisation du dessus que c’est pertinent ? Genre il devrait se passer quoi quand tu appuis sur le bouton ) 7H55 ?
Pour renprendre un comportement similaire à ton algo, je ferai :
D’une part :

  • Si débit passe à OK pendant plus d’une minute et que entre 8h et 20/tlj alors allumage des switchs.
    Et d’autre part :
  • Si débit passe à KO pendant plus d’une minute alors message erreur débit.

C’était dans l’optique d’avoir une vérification « permanente ». C’est à dire:

  • débit ok, horaire ok, j’enclenche… puis je vérifie et recommence.
  • débit toujours ? horaires aussi ? je reste enclenché… puis je recommence pour vérifier si mes conditions sont toujours vérifiées… etc etc

Aie…
Alors, je ne sais pas s’ils sont utiles précisément ici. Par contre ils sont conditions pour l’activation du switch régulateurs PH et CL, car les régulateurs doivent fonctionner seulement entre 8h et 20h (ou autre horaire prédéfinit peu importe).

En fait, dans cette automatisation, dès lors que j’enclenche mon bouton booléan, ça enclenche le switch pompe puis switch vitesse 2, et ils restent enclenchés H24 (sauf si arrêt bouton booléan bien sur).

Mais les régulateurs, non, pas H24. seulement si débit ok (confirme qu’il y a bien du débit dans le circuit) et si nous sommes entre 8 et 20h.

Du coup ça me semble être « la meme chose » mais dites différemment. Je n’arrive pas à appréhender la différence générée dans l’automatisme ou le code.

Dommage de ne pas savoir. Reste que la question de 7h55 reste posée et sans réponse.

Par ailleurs, là dans ta mécanique il n’y a pas de notion de déclenchent des régulateurs autre que quand tu as la chance d’être dans la période 8H/20H

La différence c’est la boucle justement. En tout 3 automatisations qui se déclenchent quand un évènement (ou une combinaison) survient

Alors si je sais :slight_smile:
C’était dans le sens ‹ je se sais pas si ça va à cet endroit dans le code ›.
Donc à 7h55, ça n’enclenche pas le switch des régulateurs Ph et CL.
Pas tant qu’il n’est pas 8h à 20h.
Dès qu’il sera 8h, il faudra qu’il s’enclenche, puis se recoupe dès 20h. (bien sur tant que débit ok).

Ha oui j’ai saisi la différence. tout se passe dans le

je vois :thinking: mais je ne vois pas comment le mettre en place dans le code ! :zipper_mouth_face:

Donc là pareil : 2 nouvelles automatisations …
(TLJ à 8h, si pompe enclenchée) ou (si bouton + entre 8h/20H), alors allumage des switchs
TLJ à 20h, si pompe enclenché, alors coupure des switchs

ok…

bon merci de tous tes conseils / avis.

je crois comprendre mes erreurs:
donc en fait, je ne fais pas une seule automatisation qui regroupe tout d’affilée.

j’en fait une pour telle chose à automatiser, une pour telle autre chose, etc etc…

puis au final j’en fait « une seule globale » pour « filtration été », enclenchée par mon bouton booléan, et qui fait appel à telle, telle et telle automatisation en fonction des conditions.

c’est ça ? ou je n’ai rien compris… :crazy_face: :rofl:

Presque. La notion d’automatisation globale est implicite, tu n’as pas besoin de la créée.
Le ‹ chainage › doit se faire (et sera fait) par les triggers quand ils sont bien fait

presque :grimacing:

avec tous tes conseils, je vais essayer de refaire quelque chose et voir ce qu’on obtient…
encore merci.

I should be back ! :sunglasses:

1 « J'aime »

Bonsoir bonsoir,

du coup j’ai généré 2 automatisations lorsque mon bouton booléan « filtration été » est activé:

la première où j’ai sorti toute la partie (2) indiquée:

alias: AUTOMATISATION FILTRATION ETE
description: ""
trigger:
  - platform: state
    entity_id:
      - input_boolean.filtration_ete
    from: "off"
    to: "on"
condition: []
action:
  - type: turn_on
    device_id: 1ea6475bc6b42120527e9f592682a298
    entity_id: switch.switch_pompe
    domain: switch
  - delay:
      hours: 0
      minutes: 0
      seconds: 5
      milliseconds: 0
  - type: turn_on
    device_id: 8356bf47044fc0de7b1a1a36e45c06f5
    entity_id: switch.4_relais_vitesses_pompe_l2
    domain: switch
 
mode: single

puis une seconde qui reprend le même départ de mon bouton booléan comme déclencheur et intègre les conditions de déclenchement pour mes régulateurs:

alias: activation régulateurs 8h20h mode été
description: ""
trigger:
  - platform: state
    entity_id:
      - input_boolean.filtration_ete
    from: "off"
    to: "on"
condition:
  - condition: time
    after: "08:00:00"
    before: "20:00:00"
    weekday:
      - mon
      - tue
      - wed
      - thu
      - fri
      - sat
      - sun
  - condition: and
    conditions:
     - type: is_not_open
       condition: device
       device_id: 12d1c1745e3eda555bc7d130958f3e47
       entity_id: binary_sensor.contact_debit_tamper
       domain: binary_sensor
          for:
            hours: 0
            minutes: 1
            seconds: 0
action:
  - type: turn_on
    device_id: ea4d0240dffa6a7f93d3ae2d0bef5f7a
    entity_id: switch.switch_regul_ph_cl
    domain: switch
mode: single

Est ce que ça donne
"si bouton booléan activé,

et qu’on est dans les conditions
on est entre 8h et 20h
ET le détecteur de débit est fermé

alors, on active le switch des régulateurs… "
??

ce que je me demande, c’est que ça ne boucle pas si ?
c’est à dire que si les conditions changes à l’instant T+1, elles ne seront pas revérifiées ?

Re

Si le triggers change, ça lance la vérification des conditions et si elles sont également vraies, ça déclenche les actions
Donc là 1 trigger sur l’input qui passe de off à on

D’accord…

et si le trigger ne change pas…
par exemple le trigger est déclenché à 7h50 (instant T). donc le switch des régulateurs n’est pas actionné. normal…
mais dès lors qu’il sera 8h, il ne les enclenchera pas non plus car initialement au déclenchement du trigger, la condition d’horaire n’était pas validée.
Idem, lorsque l’on dépassera 20h, le switch des régulateurs ça ne se coupera pas… enfin si j’ai compris :slight_smile:

si c’est bien le cas, comment je peux « boucler » pour procéder à vérification des conditions de manière à changer l’issue en fonction des changements des conditions à un instant T+1.
est ce lié à ce « mode: single » en fin de code ?

Exactement, pas de change (car l’heure n’est pas dans la trigger), donc pas traité

Oublie les boucles…
Ajoute une heure dans le trigger

  • QUAND input= ON OU 8H
  • SI input= on ET Heure >8h
  • ALORS actions

Idem pour le soir