Skrypt w Home Assistant

Witam . W HA mam skrypt który wyłącza belkę oświetleniową w taki sposób że następuje w zadanym czasie powolne ściemnianie światła od 100$% do 0 . Lecz nie mogę sobie poradzić z procesem odwrotnym, czyli rozjaśnianiem belki oświetleniowej od 0 do 100% w zadanym kroku . Może ktoś podpowie jak to zrobić . Oto mój skrypt na ściemnianie światła .

alias: Zmierzch belka 1
sequence:

* data:
brightness_pct: 100
entity_id: light.aqma_belka_1
action: light.turn_on
* repeat:
while:
- condition: numeric_state
entity_id: light.aqma_belka_1
attribute: brightness
above: 1
sequence:
- delay:
milliseconds: 500
- data:
brightness_step: -2
entity_id: light.aqma_belka_1
action: light.turn_on
mode: single
description: “”
test_forum_down:
  alias: Ściemnianie LED
  sequence:
    - service: light.turn_on
      target:
        entity_id: light.aqma_belka_1
      data:
        brightness_pct: 100
    - repeat:
        while:
          - condition: numeric_state
            entity_id: light.aqma_belka_1t
            attribute: brightness
            above: 6
        sequence:
          - delay:
              milliseconds: 500
          - service: light.turn_on
            target:
              entity_id: light.aqma_belka_1
            data:
              brightness_step: -5

test_forum_up:
  alias: Rozjaśnianie LED
  sequence:
    - service: light.turn_on
      target:
        entity_id: light.aqma_belka_1
      data:
        brightness_pct: 1
    - repeat:
        while:
          - condition: numeric_state
            entity_id: light.aqma_belka_1
            attribute: brightness
            below: 100
        sequence:
          - delay:
              milliseconds: 500
          - service: light.turn_on
            target:
              entity_id: light.aqma_belka_1
            data:
              brightness_step: 5

Niestety po uruchomieniu skryptu na rozjaśnianie suwak przesuwa się tylko o jeden procent i stoi .

Hmmm - w ostatniej chwili zmieniałem nazwę na twoją encję (ćwiczyłem u mnie na inne i działało), teraz widzę literówkę w tej części poniżej (belk_1t). Zmieniałeś to czy wkleiłeś tylko mój kod?

        while:
          - condition: numeric_state
            entity_id: light.aqma_belka_1t

Wklejałem, lecz i tak musiałem usunąć pierwszą linijkę bo wyskakiwał błąd i nie chciał się skrypt zapisać .

No a tę literówkę (nazwę Twojej encji) poprawiłeś?

Tak mam wpisany skrypt i idzie tylko na 1%

rozjasnianie:
  alias: Rozjaśnianie LED_2
  sequence:
    - service: light.turn_on
      data:
        entity_id: light.led_tv_gabinet
        transition: 12
        brightness: 255


sciemnianie:
  alias: Sciemnianie LED_2
  sequence:
    - service: light.turn_off
      data:
        entity_id: light.led_tv_gabinet
        transition: 12

transition - czas (łączny w sek) w jakim ma odbyć się przejście
(podstaw nazwy swojego źródła światła)

Niby działa rozjaśnianie, ale . Aby działało stan belki na suwaku musi być 1% to wtedy rusza po uruchomieniu skryptu . Jeżeli belka 1 jest wyłączona to nie rusza . I jeszcze jedna sprawa . Dochodzi do 42% i staje za każdym razem . Już nie wiem co jest grane .
Dopiero teraz zauważyłem że wstawiłeś przez pomyłkę swoją encję . Ale jak wstawiłem moją to nie działa .

Nie, nie prze pomyłkę - chciałem, żebyś świadomie zmieniał ten kod, kontrolował go :slight_smile:

Wracając do tematu - moim zdaniem problem jest źródło, którym próbujesz sterować. Trach chciał, że ja zacząłem testować na taśmie led i takim sterowniku, na którym każdy z proponowanych Ci wariantów działał. Ale faktycznie - kiedy to samo użyłem wobec innego sterownika, wobec żarówki zigbee - zaczęły się dziwne zachowania.
Musisz pokombinować.

U mnie na taśmach led (i w sumie na żarówce też) sprawdza się też takie podejście:

light_up:
  alias: light_up
  mode: single
  sequence:
    - repeat:
        until:
          - condition: template
            value_template: >
              {{ state_attr('light.led_tv_gabinet', 'brightness') | int(0) >= 250 }}
        sequence:
          - delay: "00:00:01"
          - service: light.turn_on
            target:
              entity_id: light.led_tv_gabinet
            data:
              brightness: >
                {% set current = state_attr('light.led_tv_gabinet', 'brightness') | int(0) %}
                {% set next = current + 25 %}
                {{ [next, 255] | min }}




light_down:
  alias: light_down
  mode: single
  sequence:
    - choose:
        - conditions:
            - condition: state
              entity_id: light.led_tv_gabinet
              state: "off"
          sequence: []
    - repeat:
        until:
          - condition: template
            value_template: >
              {{ state_attr('light.led_tv_gabinet', 'brightness') | int(0) <= 0 }}
        sequence:
          - delay: "00:00:01"
          - service: light.turn_on
            target:
              entity_id: light.led_tv_gabinet
            data:
              brightness: >
                {% set current = state_attr('light.led_tv_gabinet', 'brightness') | int(0) %}
                {% set next = current - 25 %}
                {{ [next, 0] | max }}

Żarówka/Sterownik musi obsługiwać transition natywnie. Jeśli oprogramowanie układowe żarówki/Sterownika nie obsługuje tego efektu (lub jej integracja go nie implementuje), nie będzie to działać.

Dziękuję wszystkim za zainteresowanie problemem . Więc tak . To jest projekt na razie w czysto teoretycznej formie w fazie testów, bez żadnej żarówki . Docelowo próbuję stworzyć automatyzację która będzie symulowała świt - zmierzch na taśmach led . Projekt całego sterowania jest zainstalowany w EspHome i fizycznie na płytce ESP32 a wygląda tak :

esphome:
  name: aqma
  friendly_name: AQma

esp32:
  board: esp32dev
  framework:
    type: arduino


logger:

# Enable Home Assistant API
api:
  encryption:
    key: "-----------------------------------------"

ota:
  - platform: esphome
    password: "----------------------------"

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

# Ustawienia statycznego IP
  manual_ip:
    static_ip: --------------
    gateway: -------------------   
    subnet: 255.255.255.0  

  
  ap:
    ssid: "Aqma Fallback Hotspot"
    password: "------------------"

captive_portal:

output:
  - platform: ledc
    pin: GPIO23
    id: gpio_23
    frequency: 60 Hz
  - platform: ledc
    pin: GPIO19
    id: gpio_19
    frequency: 60 Hz
  - platform: ledc
    pin: GPIO17
    id: gpio_17
    frequency: 60 Hz
  - platform: ledc
    pin: GPIO16
    id: gpio_16
    frequency: 60 Hz
  - platform: ledc
    pin: GPIO26
    id: gpio_26
  - platform: ledc
    pin: GPIO25
    id: gpio_25
    frequency: 60 Hz
  - platform: ledc
    pin: GPIO27
    id: gpio_27
  - platform: ledc
    pin: GPIO13
    id: gpio_13
    frequency: 60 Hz
  - platform: ledc
    pin: GPIO14
    id: buzzer
light:
  - platform: monochromatic
    output: gpio_23
    name: "Belka 1"
  - platform: monochromatic
    output: gpio_19
    name: "Belka 2"
  - platform: monochromatic
    output: gpio_17
    name: "Belka 3"
  - platform: monochromatic
    output: gpio_16
    name: "Belka 4"
  - platform: monochromatic
    output: gpio_26
    name: "Belka 5"
  - platform: monochromatic
    output: gpio_25
    name: "Belka 6"
  - platform: monochromatic
    output: gpio_27
    name: "Belka 7"
  - platform: monochromatic
    output: gpio_13
    name: "Belka 8"
switch:
  - platform: gpio
    pin: 15
    inverted: false
    name: "AQma Wentylator"
    restore_mode: RESTORE_DEFAULT_OFF
    icon: mdi:fan
  - platform: gpio
    pin: 2
    inverted: false
    name: "AQma Przekaznik 1"
    restore_mode: RESTORE_DEFAULT_OFF
    icon: mdi:location-enter
  - platform: gpio
    pin: 4
    inverted: false
    name: "AQma Przekaznik 2"
    restore_mode: RESTORE_DEFAULT_OFF
    icon: mdi:location-enter
  - platform: gpio
    pin: 5
    inverted: false
    name: "AQma Przekaznik 3"
    restore_mode: RESTORE_DEFAULT_OFF
    icon: mdi:location-enter
  - platform: template
    name: "Buzzer"
    icon: "mdi:bullhorn-outline"
    turn_on_action:
      then:
            - rtttl.play: 'two short:d=4,o=5,b=100:16e6,16e6'
    turn_off_action:
    - rtttl.stop
rtttl:
  output: buzzer
#dallas:
#  - pin: 32
#sensor:
#  - platform: dallas
#    address: 0xa9030794474c6a28
#    name: "AQma Temperature"

Jeżeli chodzi o skrypt ściemniana to polecam skrypt Ashley Bischoff

Forum HA: Ashley’s Light Fader 2.0✨: fade lights and/or color temperature with your choice of easing (curves), including ease-in, ease-out, and ease-in-out - Scripts - Home Assistant Community

Gotowy Kod:
https://gist.github.com/handcoding/c2fe8a9e895262cefbee886e0019cada

Skrypt posiada wiele opcji konfiguracji i 12 różnych typów ściemniania.

Skrypt dodajemy do Automatyzacji, uzupełniamy o wyzwalacz, jako akcję dodajemy skrypt Ashley i konfigurujemy go według potrzeb.

2 polubienia

To takie luźne uwagi

  1. proponuję odejść od frameworka arduino na korzyść esp-idf (jeśli używasz tylko zgodnych z nim komponentów), UWAGA ta zmiana zazwyczaj wymaga flashowania kabelkiem, nie przez OTA
  2. 60Hz dla PWM to strasznie mało - gwarantuje właściwie mocno odczuwalne “wredne” migotanie (i to tym odczuwalnie mocniejsze im ciemniej świecisz), nie wiem jakie końcówki mocy używasz, ale nawet najgorszy “paździerz” da radę pracować do kilkunastu kHz - zastanów się nad możliwą liczbą kroków jasności i wybierz najwyższą możliwą częstotliwość
  3. w związku z 2. ESP32 ma tylko 8 kanałów rzeczywistego kontrolera LEDC, więc należałoby pokopać głębiej po githubie/forach (niestety dokumentacja ESPHome jest dość biedna jeśli chodzi o tak zaawansowane rozwiązania i tego tam obecnie nie ma) jak to skonfigurować, aby buzzer pracował na programowym kanale, a LEDy jednak wykorzystywały sprzętowe wyjścia (to dość istotne jeśli chcesz uzyskać powolne ściemnianie).

W autmatyzacji tego oświetlenia nie pomogę, bo korzystam z NR i tam mam zbudowany przepływ , ale co do częstotliwości dla led z esphome mam tak

output:
  - platform: ledc
    pin: GPIO16
    id: bialy1
    frequency: 1220Hz
  - platform: ledc
    pin: GPIO17
    id: bialy2
    frequency: 1220Hz
  - platform: ledc
    pin: GPIO18
    id: czerwony
    frequency: 1220Hz
  - platform: ledc
    pin: GPIO19
    id: niebieski
    frequency: 1220Hz

Nic nie miga nawet przy mocnym ściemnieniu. Symulacja świtu i zmierzchu działa bez efektów skokowych w około 40 krokach ( nie wykorzystuję pełnej mocy i max u mnie to 80%

1 polubienie

Tak ten skrypt działa bardzo dobrze ale czy jest tam tylko ściemnianie rozjaśniania nie ma ?
Już to opanowałem . Jest i świt i zmrok . Dzięki .

To też luzno odpowiem . To nie takie proste . Przynajmniej dla mnie . Ten wsad do EspHome który przedstawiłem nie jest mojej “produkcji” . Jest ogólnodostępny w necie i służy do sterowania oświetleniem akwariów . Tego pomysłu używam już co najmniej od sześciu lat, lecz wcześniejsze wydanie było na płytkach Arduino i nie miało połączenia z HA . Ponieważ niedawno odwiedziłem stronę autora i zobaczyłem że zrobił wsad na EspHome co oznaczało możliwość integracji z HA to postanowiłem potestować . Cały układ działa z HA i potrzebuję tylko zrobić automatyzacje na świt i zmrok . Skrypt na zmrok zrobiłem i działa natomiast na świt mi nie wychodził, więc tu napisałem . A nie wiem jak zmienić to z arduino na esp-idf . A co do częstotliwości to popróbuję z większymi jak już będę budować gotowy układ .