[ESP Home] heure/Jours de déclenchement configurables

Bonjour,

Je suis en train de monter un programmateur d’arrosage multivoies a base d’ESP HOME.
Au niveau Hard c’est un ESP32 WROOM32 qui pilote 8 relais qui commandent les electrovannes 12V.
Pour le soft, j’ai un « on_time » qui déclanche le sprinkler certains jours de la semaine à une heure déterminée.
Mon problème est que les jours et l’heure d’exécution sont fixés en dur:

    on_time:
      - seconds: 0
        minutes: 0
        hours: 6
        days_of_week: 1-7
        then:
          - sprinkler.start_full_cycle: sprinkler_ctrlr

Je voudrais pouvoir choisir l’heure (pas forcément les minutes) et surtout les jours de la semaine mais je ne vois pas du tout comment faire ça.
Quelqu’un aurait une idée ?

Merci.

Bonjour,
tu peut faire plusieurs on_time:

    on_time:
      # Every 5 minutes
      - seconds: 0
        minutes: /5
        then:
          - switch.toggle: my_switch

      # Every morning on weekdays
      - seconds: 0
        minutes: 30
        hours: 7
        days_of_week: MON-FRI
        then:
          - light.turn_on: my_light

Pour le choix des jours, ta plusieurs syntaxe.

days_of_week: 2-6
# same as
days_of_week: MON-FRI
# same as
days_of_week: 2,3,4,5,6
# same as
days_of_week: MON,TUE,WED,THU,FRI

Bonjour,

Tu peux passer par une intégration comme celle-ci
https://forum.hacf.fr/t/une-integration-pour-l-arrosage-de-mon-jardin/25268
Ou sinon, tu passes par un switch pour gérer tes électrovannes entre HA et ESPhome et tu fais des automations selon tes critères.

Merci pour vos contributions, ça m’a débloqué.
Le boitier sera assez loin de la maison, j’ai ajouté une antenne WIFI a l’ESP32 mais je ne suis pas sûr que la portée sera suffisante, je voudrais donc que l’ESP soit autonome vis a vis de HA.

J’ai réussi a créer des switchs pour chaque jour et avec la solution de plusieurs on_time je devrais arriver a faire la sélection du/des jours de la semaine.
Reste a créer un slider pour l’heure…

si tu ne veux pas de ha avec ton esp , je te conseil soit espeasy (rules) ou micropython(partion webrepl) où tu n’a pas besoin de compiler à chaque changement

Bonjour, au cas où … si tu aime les cables, l’ESP existe en ethenet rj45
.
image

J’ai trouvé ! Avec votre aide.

Dans un premier temps j’ai configuré deux sliders pour les heures et les minutes :

number:
  - platform: template
    name: "00- Heure Départ"
    id: heure_depart
    max_value: 23
    min_value: 0
    step: 1
    restore_value: True
    initial_value: 6
    unit_of_measurement: h
    mode: SLIDER
    optimistic: True

  - platform: template
    name: "00- Minute Départ"
    id: minute_depart
    max_value: 59
    min_value: 0
    step: 5
    restore_value: True
    initial_value: 0
    unit_of_measurement: mn
    mode: SLIDER
    optimistic: True

Puis un switch par jour :
switch:

  - platform: template
    name: "01- Lundi"
    id: day_1
    optimistic: true
    lambda: return id(day_1).state;

  - platform: template
    name: "02- Mardi"
    id: day_2
    optimistic: true
    lambda: return id(day_2).state;

  - platform: template
    name: "03- Mercredi"
    id: day_3
    optimistic: true
    lambda: return id(day_3).state;

  - platform: template
    name: "04- Jeudi"
    id: day_4
    optimistic: true
    lambda: return id(day_4).state;

  - platform: template
    name: "05- Vendredi"
    id: day_5
    optimistic: true
    lambda: return id(day_5).state;

  - platform: template
    name: "06- Samedi"
    id: day_6
    optimistic: true
    lambda: return id(day_6).state;

  - platform: template
    name: "07- Dimanche"
    id: day_7
    optimistic: true
    lambda: return id(day_7).state;

le problème c’est que on_time ne prends pas de paramètres sur minute et hour, donc je l’ai configuré pour déclencher toutes les minutes puis j’ai mis une condition sur le jour de la semaine, puis sur l’

    on_time:
      - seconds: 0
        minutes: 0-59
        hours: 0-23
        days_of_week: 1-7
        then:
          - if:
              condition:
                lambda: |-
                  bool start_sprinkler = false;
                  if ((id(sntp_time).now().day_of_week == 1) && id(day_1).state) {
                  } else if ((id(sntp_time).now().day_of_week == 2) && id(day_2).state) {
                  } else if ((id(sntp_time).now().day_of_week == 3) && id(day_3).state) {
                  } else if ((id(sntp_time).now().day_of_week == 4) && id(day_4).state) {
                  } else if ((id(sntp_time).now().day_of_week == 5) && id(day_5).state) {
                  } else if ((id(sntp_time).now().day_of_week == 6) && id(day_6).state) {
                  } else if ((id(sntp_time).now().day_of_week == 7) && id(day_7).state) {
                  } else {
                  return { false };
                  }
                  if ((id(sntp_time).now().hour == id(heure_depart).state) && (id(sntp_time).now().minute == id(minute_depart).state)){
                  start_sprinkler = true ;
                  }
                  return { start_sprinkler };                  
              then:
                - sprinkler.start_full_cycle: sprinkler_ctrlr

Remarque: les paramètres dans l’interface web sont classés par ordre alphabétique, j’ai donc mis un chiffre en début de chaque nom pour les classer