Action dépendant de l'heure

Bonjour,

petite question du jour sur esphome,
j’ai un détecteur de présence PIR et 2 relais pour commander 2 lumières

je vaudrais pouvoir allumer A entre 7h15 et 22h45 et B entre 22h45 et 7h15

pour le moment j’ai juste cela :

  # Détection de présence capteur PIR et exécute sript d'allumage         
  - platform: gpio
    pin:
      number: D6
      inverted: false
      mode: INPUT_PULLUP
    name: pir pdt évier
    on_press:
      then:
      - script.execute: allume_led

je sais que l’on peut ajouter une CONDITION:
mais tout ce que j’ai trouvé sur l’heure c’est des déclenchements a heure fixe d’une action
oui, je pourrais passer par HA pour faire cela, mais je trouve cela plus simple de rester dans esphome…

bonjour,

as tu essayé ceci platform time pour creer un relais 3 qui tu conditionnera relais 1 ou 2 en fonction du relais 3

time:
  - platform: sntp
    servers: ntp.unice.fr  
    on_time:
      - seconds: 0
        minutes: 00
        hours: 21
        then:
          - switch.turn_on: ch_ecs
      - seconds: 0
        minutes: 00
        hours: 23
        then:
          - switch.turn_off: ch_ecs          
      - seconds: 0
        minutes: 30
        hours: 1
        then:
          - switch.turn_on: ch_ecs
      - seconds: 0
        minutes: 30
        hours: 7
        then:
          - switch.turn_off: ch_ecs     

a modifier mais c’est une piste, ici c’est mon chauffe eau.
mais tu doit pouvoir utiliser ce retour pour conditionner tes relais 1 sur ch_ecs on et relais 2 si ch ecs off

autres piste je sais pas :

time:
  platform: sntp
  id: my_time
  
  on_time:
      - seconds: 57
        minutes: 59
        hours: 23
        then:  
          - sensor.template.publish:
              id: template_enedis_veille
              state: !lambda return id(enedis_puissance_du_jour).state;

ici c’est pour remettre mon compteur a zero, mais ca peut etre une variable que tu conditionnera a tes relais :wink:
stefan

Bonjour,

j’ai avancé dans mon idée mais ce n’est pas terminé …
voilà le script qui fonctionne bien :

script:
  - id: allume_led
    mode: restart
    then:
     - if:
        condition:
          - lambda: 'return id(homeassistant_time).now().hour <= 7;'  
        then:
          - logger.log: "on est matin"
          - switch.turn_on: output_led
          - logger.log: "led on"
          - delay: 120s
          - logger.log: "led off"
          - switch.turn_off: output_led      
     - if:
        condition:
          - lambda: 'return id(homeassistant_time).now().hour >= 22;'  
        then:
          - logger.log: "on est soir"
          - switch.turn_on: output_led
          - logger.log: "led on"
          - delay: 120s
          - logger.log: "led off"
          - switch.turn_off: output_led    

        else:
          - logger.log: "on est jour"
          - switch.turn_on: output_led
          - logger.log: "led on"
          - delay: 120s
          - logger.log: "led off"
          - switch.turn_off: output_led    

maintenant avec ce script je suis obligé de rester dans les heures entières et je ne peut pas vérifier si il est 7h15
j’ai tenté avec des &&:
- lambda: 'return id(homeassistant_time).now().hour <= 7 && id(homeassistant_time).now().minute <= 15;
mais si il est plus de 16 de n’importe quelle heure ma condition n’est pas bonne !

je vais continuer a creuser mais je pense qu’un petit calcul pour remettre tout en minutes devrait faire l’affaire …

1 « J'aime »

oui ,
mais tu est dépendant de HA, et a ce moment pourquoi pas directement commander tes switch depuis ha?
avec la plateforme time ca ne marche pas?
j’ai la flemme d’essayer mais je sais que si ha ne marche pas mon chauffe eau marche.

j’e penser un peu a ca

log temps
time:
  - platform: sntp
    servers: ntp.unice.fr  
    on_time:
      - seconds: 0
        minutes: 00
        hours: 21
        then:
          - logger.log: "on est soir"

      - seconds: 0
        minutes: 30
        hours: 7
        then:
          - logger.log: "on est matin" 
          
binary_sensor:
  - platform: gpio
    pin: 12
    name: "PIR Sensor"
    device_class: motion
     on_press:
      - while:
          condition:
            logger # on est la nuit #
          then:
          - switch.turn_on: led1
       
    on_release:
      then:
        - switch.turn_off: led1
          
# Example configuration entry
web_server:
  port: 80

ou ca

variable temps
time:
  - platform: sntp
    servers: ntp.unice.fr  
    on_time:
      - seconds: 0
        minutes: 00
        hours: 21
        then:
          - globals.set:
            id: my_global_var
            value: 'soir'
      - seconds: 0
        minutes: 30
        hours: 7
        then:
          - globals.set:
            id: my_global_var
            value: 'matin'
          
switch
  - platform: gpio
    pin:
      number: D6
      inverted: false
      mode: INPUT_PULLUP
    name: pir pdt évier
    on_press:
      if:
    condition:
      - my_global_variable: 'matin'
    then:
      switch_turn on
      delais 
      switch_turn_off
          
# Example configuration entry
web_server:
  port: 80

stefan

voilà mon script qui fonctionne parfaitement :

script:
  - id: allume_led
    mode: restart
    then:
     - logger.log: 
         format: "les minutes de la journée sont : %d "
         args: [ '( ( id(homeassistant_time).now().hour * 60 ) + id(homeassistant_time).now().minute )' ]
     - if:
        condition:
          - lambda: 'return ( ( id(homeassistant_time).now().hour * 60 ) +  id(homeassistant_time).now().minute ) < 435;'  # 7h15
        then:
          - logger.log: "on est matin"
          - switch.turn_on: output_led
          - logger.log: "led on"
          - delay: 120s
          - logger.log: "led off"
          - switch.turn_off: output_led      
     - if:
        condition:
          - lambda: 'return ( ( id(homeassistant_time).now().hour * 60 ) +  id(homeassistant_time).now().minute ) > 1320;' # 22h00
        then:
          - logger.log: "on est soir"
          - switch.turn_on: output_led
          - logger.log: "led on"
          - delay: 120s
          - logger.log: "led off"
          - switch.turn_off: output_led    

        else:
          - logger.log: "on est jour"
          - switch.turn_on: output_led
          - logger.log: "led on"
          - delay: 120s
          - logger.log: "led off"
          - switch.turn_off: output_led   

j’ai remis le temps en minutes et je peut déclencher des commandes différentes en fonction de l’heure de la journée, là j’ai un script avant 7h15, après 22h et le reste de la journée …

je voulais rester dans l’ESP pour tout commander pour en cas de panne wifi ou panne de HA avoir de la lumière dans la cuisine car je n’ai aucun autre moyen d’allumer sinon !! en tout cas pour le moment …

j’aime bien ta variable temps, bonne idée !
et je cherchais a mettre des variables dans mes scripts, je n’avais pas trouvé l’astuce, je garde !!

1 « J'aime »