Creation d'une duree d'execution

Bonjour à tous.

Mon problème

je suis débutant ce qui explique ma question tout à fait basique.
Ce que je veux faire en m’inspirant de schémas existants c’est créer une ou plusieurs bases . base temporelle qui me serviront de référence pour actionner des relais en cascade.

Dans le programme dont je m’inspire cette donnée est libellée de la façon suivante : {Temps1},{Temps2}.
En l’utilisant le programme bloque sur la définition de cette donnée.
J’ai lu et relu la littérature ESPHOME IO mais par manque de connaissance je n’arrive à intégrer ses informations.

Renseigner votre problème

Ma configuration

## System Information

version | core-2024.6.2
-- | --
installation_type | Home Assistant OS
dev | false
hassio | true
docker | true
user | root
virtualenv | false
python_version | 3.12.2
os_name | Linux
os_version | 6.6.28-haos-raspi
arch | aarch64
timezone | Europe/Paris
config_dir | /config

<details><summary>Home Assistant Cloud</summary>

logged_in | false
-- | --
can_reach_cert_server | ok
can_reach_cloud_auth | ok
can_reach_cloud | ok

</details>

<details><summary>Home Assistant Supervisor</summary>

host_os | Home Assistant OS 12.3
-- | --
update_channel | stable
supervisor_version | supervisor-2024.06.0
agent_version | 1.6.0
docker_version | 25.0.5
disk_total | 58.0 GB
disk_used | 8.3 GB
healthy | true
supported | true
host_connectivity | true
supervisor_connectivity | true
ntp_synchronized | true
virtualization | 
board | rpi4-64
supervisor_api | ok
version_api | ok
installed_addons | ESPHome (2024.5.5), File editor (5.8.0), Advanced SSH & Web Terminal (18.0.0)

</details>

<details><summary>Dashboards</summary>

dashboards | 2
-- | --
resources | 0
views | 1
mode | storage

</details>

<details><summary>Recorder</summary>

oldest_recorder_run | 15 mai 2024 à 15:37
-- | --
current_recorder_run | 14 juin 2024 à 10:24
estimated_db_size | 4.64 MiB
database_engine | sqlite
database_version | 3.44.2

</details>


            Mon bout de programme:```

esphome:
  name: arrosage1v
  friendly_name: arrosage1v
esp32:
  board: esp32dev
  framework:
    type: arduino




# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "PCPLe4UaSkZ8bJec4JRQJDlL47pRRGgBXTGUQ/G9VNw="

ota:
  password: "813d5cf4f8681792643601d4932922f7"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Arrosage-1V Fallback Hotspot"
    password: "gPAilgkbB5yB"

  

captive_portal:


switch:


  - platform: gpio
    name: "Relay1" 
    icon: "mdi:restart"
    pin: GPIO13 
    id: Relay1
    on_turn_on:
    - delay: 10000ms
    - switch.turn_off: Relay1

  - platform: gpio
    pin: GPIO12 
    name : "relay2"
    icon: "mdi:restart"
    id: Relay2
    on_turn_on:
    - delay: 500ms
    - switch.turn_off: Relay2

  - platform: gpio
    pin: GPIO14 
    name: "Relay3"
    icon: "mdi:restart"
    id: Relay3 
    on_turn_on:
    - delay: 500ms
    - switch.turn_off: Relay3


  - platform: gpio
    pin: GPIO16 
    name: "Relay4"
    icon: "mdi:restart"
    id: Relay4 
    on_turn_on:
    - delay: 500ms
    - switch.turn_off: Relay4

#automatisation des 4 voies en cascade
    - switch.turn_off: Relay4
    - switch.turn_off: Relay3
    - switch.turn_off: Relay2     
    - switch.turn_off: Relay1

  - platform: gpio
    pin: GPIO17
    name: "Arrosage zones en cascade"
    icon: "mdi:restart"
    on_turn_on
    - switch.turn_off: relay1
    - switch.turn_on: Relay2
    - delay: ${Temps1} min
    - switch.turn_off: Relay2
    - switch.turn_on: Relay3
    - delay: ${Temps1}min
    - switch.turn_off: Relay3
    - switch.turn_on: Relay4
    - delay: ${Temps1}min
    - switch.turn_off: Relay4

La 1ère partie consiste à déclencher individuellement les relais; dans la 2éme j'execute une séquences sur une base temps.
C'est cette base qui me pose problème.

Un petit bout de programme me permettrai de comprendre et d'y voir plus clair dans ce type de programmation.

Merci d'avance pour votre aide.
Cordialement
Christian.

Salut,

Alors c’est basique sans doute, mais là comme ça, moi j’ai absolument pas compris le besoin, ni ce que tu as déjà fait… Comme dire un chanteur : « Vous n’avez pas les bases »

Peux-tu compléter avec un bout de code, un exemple complet du besoin ? Pas uniquement, 2 noms de variables
Par ailleurs attention, les fonctions d’attente c’est d’une façon générale une mauvaise pratique.
Il vaut mieux utiliser des notions de déclencheurs pour dérouler des actions les unes à la suite des autres plutôt que de se baser sur une temporalité.
C’est encore plus vrai sur esphome, puisque le reboot (volontaire ou coupure de courant) fait perdre la totalité du contexte d’exécution

2 « J'aime »

Salut Pulpy-Lucke et merci de prendre ma question.
effectivement j’ai tellement bidouillé que j’ai supprimé le bout de code qui me posait problème, et j’ai oublié de le replacer

donc ci joint.``

script:

Temps1: "10"  
- id: script {Temps1}
  mode: restart
  then:
      - logger.log: "Programme de ${Temps1} minutes"

comme tu le dis je manque a peu prêt de tous les prérequis ce qui fait que je patine.
La finalité :
je veux reprendre la notion de {temps1} pour cadrer avec le programme dont je m’inspire , et pour l’étendre par la suite sur d’autres relais.
mais je voudrais d’abord que ça fonctionne a minima.

ce bout de prog est ce que j’ai pu glaner sans forcément comprendre les tenants et aboutissants,
j’ai beau potacer ,je ne comprend pas.
merci d’avance.

pour plus de compréhension je me base sur le programme de Socrate:

dans l’attente.

Ok donc ça commence à s’éclaircir
Par contre, ton code c’est celui de d’esphome ? si oui, je reconnait pas la syntaxe, mais il y a des ressemblances

Exemple quasiment tout fait

Salut Pulpy-Luke.

Et merci pour ton aide.
Je vais essayer ta solution, petit à petit les choses se décantent.
Question subsidiaire.
J’avais compris que le systeme delay posait avait ses limites ,mais tu me donne un exemple incluant le « delay »; il est vrai qu’avec les Lamba l’execution est plus souple d’après ce que j’ai compris.

dans l’exemple que tu me donne il faut si j’ai plusieurs relais que j’indique à chaque fois la durée.
ce qui me paraissait interressant c’était d’initilaliser des durées et pouvoir les choisir sur toute la config en une seule fois.
bref ,je sais ce que je veux faire , mais c’est pas simple.

Dernière question: j’aicherché de la litterature sur homeassistant ou esphome « style pour les nuls » mais je n’ai rien trouvé.
as tu des pistes à me proposer?

Encore merci et bon week-end.
Cordialement
christian.

Salut.

Salut

Effectivement, là tu as un delay dans la commande parce qu’il n’y a pas vraiment possibilité de faire autrement : il n’y a rien qui permet de fixer une durée entre les étapes d’activation désactivation des relais.

Ce que je voulais dire, c’est qu’il faut éviter de faire par exemple pour sortir sa voiture :

  • j’ouvre le portail
  • j’attends 10 minutes
  • je ferme le portail

Dans les faits, il vaut mieux faire

  • j’ouvre le portail
  • je détecte que la voiture est partie (position GPS etc etc), ce qui ferme le portail

ça eviter de fermer le portail sur la voiture !
C’est encore plus vrai si la séquence est longue , tous les évènements qui se produisent (ou pas) pendant la temporisation, change le contexte d’exécution.
Là avec des vannes d’arrosages, c’est assez limité mais ça existe. Par exemple, c’est pas utile de continuer à arroser quand il se mets à pleuvoir pendant la tempo

La question c’est :

  • comment veux-tu les changer (un input_number dans HA ? un truc en dur dans un code, ou une variable globale)
  • à quelle fréquence les changes tu ? (par exemple 2 fois par an, une recompilation ESPHOME ça pourrait être simple)

Le forum, ou le portail, ensuite j’aime moins mais il ya des blogs divers et variés, voire des chaines youtube

Salut.

je t’ai fait chercher.
je regarderai le portail ,mais pour l’instant je me concentre sur le programme, ça va un peu mieux; j’ai réussi a avoir la petite coche verte :smile: :smile: sur un bout de programme.
les choses rentrent petit a petit, mais c’est pas facile, toutes les cases sont pleines à mon âge.
home assistant est complet , certes mais pas franchement fait pour des novices.
il faut déjà comprendre leur langage parfois assez hermétique.
une chose à laquelle il faut faire attention , c’est que beaucoup de solutions sont faites pour l’esp8266 ; ce qui peut poser problème par rapport aux esp 32.
Encore merci .
J’enverrai mon programme une fois terminé.

A+
cordialement
Christian.

Salut.

Comme promis je te montre mon code qui devait fonctionner.

Mon gros soucis viens de la déclaration " - platform : gpio"
est-ce que cette config est mauvaise; est-ce que l’indentation n’est pas bonne ( j’ai tout essayé).
l’hors du test de validation une erreur :
while parsing a block mapping
in « /config/esphome/arrosage-1v.yaml », line 2, column 1
expected , but found ‹ - ›
in « /config/esphome/arrosage-1v.yaml », line 53, column 1

Le fait qu’elle renvoie a la ligne 2 ( esphome) me fait penser à l’indentation.
Dois je tout aligner sur l’indentation d’esphome , ligne 2 ?

il y a une logique ,mais là je sèche.

mon code:

esphome:
  name: arrosage
  friendly_name: arrosage

esp32:
  board: esp32dev
  framework:
    type: arduino
  

# Enable logging
logger:
# Enable Home Assistant API

api:
  encryption:
    key: "PCPLe4UaSkZ8bJec4JRQJDlL47pRRGgBXTGUQ/G9VNw="

ota:
    password: "813d5cf4f8681792643601d4932922f7"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "devicename Hotspot"
    password: "gPAilgkbB5yB"

# on active le serveur Web de l'esp32, en allant sur l'IP de l'esp,on tombe sur l'interface pour piloter les relais.
web_serveur:
  port: 80
  auth:
    web_username: !secret web_username
    web_password: !secret web_password

  

captive_portal:

# verification de la fermeture des vannes
on_boot:
    priority: -10
    then:
      - switch.turn_off: Relay4
      - switch.turn_off: Relay3
      - switch.turn_off: Relay2
      - switch.turn_off: Relay1 

# definition des relais/ zones
- platform: gpio
    name: "Relay1" 
    icon: "mdi:restart"
    pin: GPIO13 
    id: Relay1
  
    pin: GPIO12 
    name : "relay2"
    icon: "mdi:restart"
    in: relay2
  
    pin: GPIO14 
    name: "Relay3"
    icon: "mdi:restart"
    id: Relay3 
  
    pin: GPIO16 
    name: "Relay4"
    icon: "mdi:restart"
    id: Relay4 


# Enable Home Assistant API horloge
time:
- platform: homeassistant
  id: homeassistant_time

- platform: sntp
    # Every morning on weekdays# ...
  on_time:
    - seconds: 0
      minutes: 30
      hours: 20
      then:
        switch.toggle: my_script

    - seconds: 0
      minutes: 30
      hours: 21
      days_of_week: "*"
      then:
        switch.toggle: my_script

# realisation de l'automation  

script:
 - id: my_script
    then:
      -switch_turn_on: relay1
      - delay: 15 min
      - switch_turn_off: Relay1

      - switch_turn_on: relay2 
      - delay: 15 min
      - switch_turn_off: Relay2

      - switch_turn_on: relay3
      - delay: 15 min
      - switch_turn_off: Relay3

      -switch_turn_on:relay4   
      - delay: 15 min
      - switch_turn_off: Relay4
 

je te remercie d’avance pour ton aide car je suis bloqué.

Cordialement
Christian

Salut,

tu as vu que certaines fois tu fais :

Donc avec un espace et d’autres

sans espaces ce qui n’est pas valable syntaxiquement.

après il faut y réfléchir, mais au final tu es dans la cas que je trouve problématique : tu enchaines 4 pauses de 15min, donc si pendant cette heure, il se passe n’importe quoi (une coupure de courant), tu es dans les embêtements potentiels.

Il faut essayer de faire un truc du genre :
Je lance l’arrosage 1 . Quand l’arrosage 1 est fini ça lance le 2. ça passe possiblement par des automatisations dans esphome (trigger de on à off pour détecter la fin)

Alors après le miam du midi, c’est plus clair de mon coté , à ta place je ferai :

Modifier les switch pour un auto OFF après 15min et avec les interlocks
exemple :

switch:
  - platform: gpio
    pin: GPIO4
    name: "Relais 1"
    id: relay1
    interlock: [relay2,relay3,relay4]
    on_turn_on:
      - delay: 15 min
      - switch_turn_off: relay1

  - platform: gpio
    pin: GPIO5
    name: "Relais 2"
    id: relay2
    interlock: [relay1,relay3,relay4]
    on_turn_on:
      - delay: 15 min
      - switch_turn_off: relay2

etc

Virer le script et faire de prog horaire

- platform: sntp
    # Every morning on weekdays# ...
  on_time:
    - seconds: 0
      minutes: 30
      hours: 20
      then:
        - switch_turn_on: relay1
    - seconds: 0
      minutes: 45
      hours: 20
      then:
        - switch_turn_on: relay2
etc

en complement, un truc qui bloque tout au cas ou

    - seconds: 0
      minutes: 30
      hours: 22
      then:
        - switch_turn_off: relay1
        - switch_turn_off: relay2
        - switch_turn_off: relay3
        - switch_turn_off: relay4

Là au moins, tu es pas dans un situation catastrophique si ça se passe mal

J’ai pas vérifié la syntaxe, mais l’idée est là

Toi , après midi; moi après la sieste. :smiley: :smiley:

Désolé pour les erreurs ,mais j’en fais tellement qu’il y a des trous dans la raquette.

Bref!!!
Voila une idée qu’elle est bonne !!
Effectivement, le process est moins problématique en cas d’incident.
appliquer à mon projet ,je comprend mieux la config.
J’ai toujours eu du mal avec les abstractions.
Ceci dit ,ça me parle.
Bon je mets ça en œuvre. dans la soirée et te tiens au courant.
Mille merci.
A plus.
Christian.

Re:
Plain d’entrain je me lance dans la modif du prog.

Mais hélas !! :shushing_face: :thinking: :face_with_raised_eyebrow:

Vois mon nouveau code.

esphome:
  name: arrosage
  friendly_name: arrosage

esp32:
  board: esp32dev
  framework:
    type: arduino
  

# Enable logging
logger:
# Enable Home Assistant API

api:
  encryption:
    key: "PCPLe4UaSkZ8bJec4JRQJDlL47pRRGgBXTGUQ/G9VNw="

ota:
    password: "813d5cf4f8681792643601d4932922f7"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "devicename Hotspot"
    password: "gPAilgkbB5yB"

# on active le serveur Web de l'esp32, en allant sur l'IP de l'esp,on tombe sur l'interface pour piloter les relais.
web_serveur:
  port: 80
  auth:
    web_username: !secret web_username
    web_password: !secret web_password

  

captive_portal:

- platform: snt
     # Every morning on weekdays# ...
  on_time:
    - seconds: 0
      minutes: 30
      hours: 20
      then:
        - switch_turn_on: relay1
    - seconds: 0
      minutes: 45
      hours: 20
      then:
        - switch_turn_on: relay2
    - seconds: 0
      minutes: 0
      hours: 21
      then:
        - switch_turn_on: relay3
    - seconds: 0
      minutes: 15
      hours: 21
      then:
        - switch_turn_on: relay4
    - seconds: 0
      minutes: 30
      hours: 21
      then:
         - switch_turn_off: relay1
         - switch_turn_off: relay2
         - switch_turn_off: relay3
         - switch_turn_off: relay4


switch:
  - platform: gpio
    pin: GPIO13
    name: "Relais 1"
    id: relay1
    interlock: [relay2,relay3,relay4]
    on_turn_on:
      - delay: 15 min
      - switch_turn_off: relay1

  
  
  - platform: gpio
    pin: GPIO14
    name: "relais2"
    id: relay2
    interlock: [relay1,relay3,relay4]
    on_turn_on:
      - delay: 15 min
      - switch_turn_off: relay2

  - platform: gpio
    pin: GPIO12
    name: "relay3"
    id: relay3
    interlock: [relay1,relay2,relay4]
    on_turn_on:
      - delay: 15 min
      - switch_turn_off: relay3

  - platform: gpio
    pin: GPIO16
    name: "Relais 4"
    id: relay4
    interlock: [relay1,relay2,relay3]
    on_turn_on:
      - delay: 15 min
      - switch_turn_off: relay4

   

avec le message d’erreur:

INFO ESPHome 2024.5.5
INFO Reading configuration /config/esphome/arrosage-1v.yaml...
WARNING GPIO12 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
Failed config

web_serveur: [source /config/esphome/arrosage-1v.yaml:34]
  
  Component not found: web_serveur.
  port: 80
  auth: 
    web_username: !secret web_username
    web_password: !secret web_password
captive_portal: [source /config/esphome/arrosage-1v.yaml:43]
  
  expected a dictionary.
  - platform: snt
    on_time: 
      - seconds: 0
        minutes: 30
        hours: 20
        then: 
          - switch_turn_on: relay1
      - seconds: 0
        minutes: 45
        hours: 20
        then: 
          - switch_turn_on: relay2
      - seconds: 0
        minutes: 0
        hours: 21
        then: 
          - switch_turn_on: relay3
      - seconds: 0
        minutes: 15
        hours: 21
        then: 
          - switch_turn_on: relay4
      - seconds: 0
        minutes: 30
        hours: 21
        then: 
          - switch_turn_off: relay1
          - switch_turn_off: relay2
          - switch_turn_off: relay3
          - switch_turn_off: relay4
switch.gpio: [source /config/esphome/arrosage-1v.yaml:77]
  platform: gpio
  pin: GPIO13
  name: Relais 1
  id: relay1
  interlock: 
    - relay2
    - relay3
    - relay4
  on_turn_on: 
    - delay: 15 min
    - 
      Unable to find action with the name 'switch_turn_off'.
      switch_turn_off: relay1
switch.gpio: [source /config/esphome/arrosage-1v.yaml:88]
  platform: gpio
  pin: GPIO14
  name: relais2
  id: relay2
  interlock: 
    - relay1
    - relay3
    - relay4
  on_turn_on: 
    - delay: 15 min
    - 
      Unable to find action with the name 'switch_turn_off'.
      switch_turn_off: relay2
switch.gpio: [source /config/esphome/arrosage-1v.yaml:97]
  platform: gpio
  pin: GPIO12
  name: relay3
  id: relay3
  interlock: 
    - relay1
    - relay2
    - relay4
  on_turn_on: 
    - delay: 15 min
    - 
      Unable to find action with the name 'switch_turn_off'.
      switch_turn_off: relay3
switch.gpio: [source /config/esphome/arrosage-1v.yaml:106]
  platform: gpio
  pin: GPIO16
  name: Relais 4
  id: relay4
  interlock: 
    - relay1
    - relay2
    - relay3
  on_turn_on: 
    - delay: 15 min
    - 
      Unable to find action with the name 'switch_turn_off'.
      switch_turn_off: relay4

Le fait de coller un " switch _turn_off" ne semble pas indiqué ;pourquoi ?
j’ai de plus l’impression qu’il y a un soucis d’indentation ; mais là!!!

Laisse tomber le message sur le port web je m’en occupe,car j’ai fait des modifs qui ne semblent pas bonnes

Vois ce que tu peux m’en dire.
merci d’avance.
Christian

Salut

la bonne syntaxe est : switch.turn_off

Ligne 34 à analyser

Et c’est switch.turn_off avec un point

Salut.
Enfin !!!
hormis le point du switch.off , je n’avais pas mis « time » en tête de la platform.
bref ,j 'ai la petite coche verte.

un autre problème surgit c’est la compile du programme dans l’esp.

j'ai un code erreur.

INFO ESPHome 2024.6.1
INFO Reading configuration /config/esphome/arrosage-jardin-4v.yaml...
INFO Detected timezone 'Europe/Paris'
INFO Starting log output from arrosage-jardin-4v.local using esphome API
WARNING Can't connect to ESPHome API for arrosage-jardin-4v.local: Error resolving IP address: [Errno -5] No address associated with hostname (APIConnectionError)
INFO Trying to connect to arrosage-jardin-4v.local in the background.

je ne sais pas solutionner ce soucis.
je voudrais charger le fichier bin mais je ne sais pas ou le récupérer (si cette manip est possible).

encore un petit coup de pouce et j’espère que je ne t’embêterai plus.

merci d’avance.
christian