Czasookres w Esphome

Witam. W poniższym kodzie Czujka podczerwieni załącza światło na 30 sekund. Nie potrafię dodać kodu, żeby ta czujka załączała to światło w godzinach od 20 do 6 rano. I żeby to działało mimo braku połączenia z HA. Dziękuję z góry za pomoc

> binary_sensor:
>   - platform: gpio
>     name: "Magazyn wej. czujnik ruchu"
> 
>     pin:
>       number: GPIO25
>       mode:
>         input: true
>         pullup: true
>     
>       
>     on_press:
>      - switch.turn_on: Magazyn_lampa
>      - delay: 30s 
>      - switch.turn_off: Magazyn_lampa
> switch:
>   - platform: gpio
>     name: "Magazyn Załączenie światła"
>     device_class: switch
>     id: Magazyn_lampa
>     pin:
>       # Use pin number 7
>       number: GPIO22
>       # One of INPUT or OUTPUT
>       mode:
>         output: true
>       inverted: true
>     restore_mode: RESTORE_DEFAULT_OFF
>   #  restore_mode: ALWAYS_OFF

Proponuję abyś umieścił cały kod YAML dla tego urządzenia. Na początek, to skądś ESP musi wiedzieć jaki jest aktualny czas. Jeśli nie będzie połączenia z HA, jako źródła danych o aktualnym czasie, to musisz wskazać alternatywne.

Dodałem taki kod component time ale to nie działa i pytanie czemu?

time:
  - platform: sntp
    id: sntp_time
    timezone: "Europe/Warsaw"
    on_time_sync:
      then:
        - logger.log: "Synchronized sntp clock"
        
    on_time:
    - seconds: 0
      minutes: /1
      then:
        - lambda: |-
            int t_now = parse_number<int>(id(sntp_time).now().strftime("%H%M")).value();
            if ((t_now >= 2200) || ( (t_now <= 700) ) ){
              id(czujnik_ruchu).publish_state(false);
            } else {
              id(czujnik_ruchu).publish_state(true);
            }

Rzucił mi się w oczy brak wcięcia pod on_time. Czuje że wziąłeś gotowca lub chat gpt ci wypluł ten kod. Ja bym to ugryzł zupełnie inaczej czyli tak żebym przede wszystkim sam zrozumiał działanie tego kodu. Stworzył bym switch lub binary sensor który byłby włączany o tych godzinach co chcesz i jednocześnie byłby warunkiem uruchomienia akcji po wykryciu ruchu.

2 polubienia

A niby skąd miałby wiedzieć kiedy ma się włączyć, kiedy jest “ten czas”, skoro nie wie która jest godzina ? (przecież z założenia ma działać jakby nie było połączenia z HA).
Powinien najpierw zapewnić dostęp do aktualnego czasu …

akurat to jest załatwione

1 polubienie

Mam gniazdko które bierze czas z internetu, mam zrobione to tak:

# TIME FROM SNTP
time:
  - platform: sntp
    id: times
## time conditions https://esphome.io/components/time.html?highlight=clock#base-time-config
## on time condition supported formats https://crontab.guru/
    on_time:
   # od 0 do 1 cykl 10/20
      - seconds: 0
        minutes: 0,30
        hours: 0-1
        days_of_week: MON-SUN
        then:
          - switch.turn_on: relay    
      - seconds: 0
        minutes: 13,40
        hours: 0-1
        days_of_week: MON-SUN
        then:
          - lambda: |-
              if (!id(always_on).state) {
                id(relay).turn_off();
              }         
     
    servers: 0.pool.ntp.org 
2 polubienia

Rozwiązałem to Czujnik ruchu załącza przekaźnik w godzinach od 20.00 do 7.00. :

> switch:
>   - platform: gpio
>     name: "Magazyn Załączenie światła"
>     device_class: switch
>     id: Magazyn_lampa
>     pin:
>       # Use pin number 7
>       number: GPIO22
>       # One of INPUT or OUTPUT
>       mode:
>         output: true
>       inverted: true
>     restore_mode: RESTORE_DEFAULT_OFF
binary_sensor:
  - platform: template
    name: "Template Sensor"
    id: template_sens


  - platform: gpio
    name: "Magazyn wej. czujnik ruchu"
    id: aktyw_cz
    pin:
      number: GPIO25
      mode:
        input: true
        pullup: true
    #filters:
    #  - delayed_on: 100ms
    #  - delayed_off: 100ms
      
    on_press:
        then:
          - if:
              condition:
                binary_sensor.is_on: template_sens
              then:
                - script.execute: pomp3min  
                # - switch.turn_on: Magazyn_lampa
                #- delay: 30s 
                #- switch.turn_off: Magazyn_lampa   
              else:
                - switch.turn_off: Magazyn_lampa
time:
  - platform: sntp
    id: sntp_time
    timezone: "Europe/Warsaw"
    servers: 0.pool.ntp.org
    
    on_time_sync:
      then:
        - logger.log: "Synchronized sntp clock"
        
    on_time:
    - seconds: 0
      minutes: /1
      then:
        - lambda: |-
            int t_now = parse_number<int>(id(sntp_time).now().strftime("%H%M")).value();
            if ((t_now >= 2000) || ( (t_now <= 700) ) ){
              id(template_sens).publish_state(true);
            } else {
              id(template_sens).publish_state(false);
            }

script:
  - id: pomp3min
    then:
      - switch.turn_on: Magazyn_lampa
      - delay: 30s 
      - switch.turn_off: Magazyn_lampa

pozdrawiam

1 polubienie