Gładkie ściemnianie światła w Node-RED

Witam.

Zamontowałem do lampek schodowych ściemniacz, którego wyzwala czujnik ruchu. Pomysł jest taki, że w momencie wykrycia ruchu, lampki włączają się na 20s. a następnie w ciągu 1 minuty stopniowo się ściemniają. Wykonałem to w Node-RED trochę okrężną drogą. Mianowicie po upływie 20s. następuje ściemnienie lampek o zadaną wartość i tak później co 10s. zmniejszam wartość jasności. Działa to w miarę dobrze tylko ale zależy mi na tym aby ściemnianie po upływie 20s. odbywało się płynie np. z 50% do 0% w ciągu 40s. Ma ktoś jakiś pomysł? Pewnie dałoby się to też załatwić jakąś pętlą ale za bardzo nie wiem jak.

Ratuje Cię chyba tylko fakt, że czujniki mają długi czas bezczynności, inaczej nie napisałbyś, że działa :slight_smile:
Żeby kontrolować jasność wykorzystaj atrybuty encji light, czyli tych lampek. Tu masz może nie idelny przykład , ale sporo można z tego wywnioskować Sciemniacz do akwarium

Jeśli to ściemniacz Zigbee, to taka funkcja powinna być w niego wbudowana
“brightness_move”. Nie wiem czy w interesującym Cię zakresie. Uruchamiasz ją komendą raz a sprzęt ją realizuje autonomicznie.

Chcę tak zrobić właśnie dlatego, że czujnik ma 1 minutę czasu bezczynności, gdyby było mniej to po prostu wyłączył bym światło wcześniej i po temacie. Zrobiłem tak jak w tym przykladzie Ściemniacz do akwarium. Działa ale za szybko i światło wyłącza się płynnie ale w ciągu ok 1-2s. Jak zrobić żeby ta funkcja była wykonywana dokładnie określonym czasie, tj. np. 60s.?

Tak, jest to ściemniacz OXT Zigbee ale nie widzę żeby eksponował taką funckję.

Rozdział Moving/stepping widzę, że ma - więc trzeba do MQTT wysłać poprawny command.

Nie wiem czy jestem na tyle biegły w NR żeby to zrobić ale spróbuję.
A czy da się zrobić tak jak pisałem wyżej, żeby dana funkcja była wykonywana w dokładnie określonym czasie?

Spróbuj korzystać z tego- będzie łatwiej

Musiałbym zobaczyć co finalnie zrobiłeś

Flows(6) jest to moja pierwotna wersja:
flows(6).json (6,7 KB)

Flows(8) zrobiłem na podstawie przykładu Ściemniacza do akwarium:
flows (8).json (4,9 KB)

Między nodem jasność minus a ściemnianie lampek daj delay na ok 1sek. Taka proteza ale powinno działać. Czas ściemniania będziesz mógł regulować czasem opóźnienia.

Chyba nie do końca się zrozumieliśmy. Ja nie chcę opóźnić ściemniania tylko chcę żeby właśnie to ściemnianie np. z 60% do 0% było wykonywane płynnie (czyli w tym w tym przypadku byłby to 1% na 1s.).

Dlaczego piszesz “my”? :wink:
Czy wiesz jak działa to co zrobiłeś ? … funkcja wykonuje tylko jeden krok obniżenia jasności o 5pkt.

To jest ciekawostka bo tak być nie powinno - cuda :slight_smile:

Tym sposobem, który próbujesz użyć to grubsza robota, nie jest do wytłumaczenia i musiałbym to sam napisać. Musisz więc poczekać (wieczorem).

P.S
Tak na szybko z głowy bez testów - interesuje mnie co pokaże debug. Jeśli nic - to przepnij debug przez switch.
flows (48).json (12,1 KB)

Sprawdzone działa … zmień na swój dimmer i zamiast timestamp przywróć swoje czujki.


flows (25).json (5,7 KB)

Dlaczego tak piszesz? Przecież “tym sposbem” można to zrobić bez specjalnego problemu i dość łatwo to wytłumaczyć. Uczyłem się od Ciebie, więc wiem, że jesteś w stanie zrobić to na wiele sposobów, ale łatwy do ogarnięcia i konfigurowalny, to licznik + aktualny poziom ściemnienia.
Wyjaśnię poniżej.
@welna9
Możesz zrobić to w taki sposób


Naruszenie czujnika, oprócz wysłania On do lampek zapisuje do zmiennej “licznik” wartość 0 , pierwszy trigger 4 sek jest potrzebny żeby lampki nie zgasły natychmiast po załączeniu, ale może również służyć do regulacji trwania cyklu , dalej mamy switch który dopisuje do zmiennej 1 przy każdym przebiegu, w funkcji jest sprawdzana jasność podobnie jak w sciemniaczu do akwarium i stan licznika , dalej już wiadomo , drugi trigger reguluje częstotliwość cyklu.
flows (1).json (5,1 KB)
PS
Możesz sprawdzić dwie wersje bo nie zauważyłem, że @RobinI30 wrzucił coś od siebie

…to wytłumacz mój ostatni proces …hihi :grin:

Pisząc to obawiałem się, że kończy się plątaniną nodów. Zrobiłeś pętlę - nie jest dobrze :rofl:

Tu nie ma co tłumaczyć , czujnik ustawia janość na 162 , uruchamia to wyzwalacz w dolnej części, ale switch "bri<160 zatrzymuje proces, po delay, janość się zmiejsza do 159, to umożliwia kolejne wyzwolenie dolnej części i tym razem switch już nic nie blokuje, w nodzie funkcji sprawdzany jest poziom jasności i ponieważ jest wieksza od 1, to zostaje wysłane, po 1 sek “zmiejsz o 1” . Na tym proces się zatrzymuje.
Widać to na foto i w logach


Dobra ja dokonałem analizy, teraz proszę o wyjaśnienie co jest źle w moim flow ?
PS
Sprawdziłem jeszcze raz dodając debug na końcu i widać gdzie kończy się proces, czasy w logach mówią wszystko

Źle nie jest :+1: ale z powodu pętli wewnątrz procesu (jak dla mnie) nie jest dobrze.
Tak mam :slight_smile: staram się aby tak nie zapętlać.
Zauważ różnice w prostocie działania …tutaj akurat zastosowałem ( chyba Twój wynalazek?) - generator

Ten generator coś się nie udał :slight_smile:

Dopisałeś coś w międzyczasie … nie widzę co chcesz mi pokazać?

Są dwie fotki i na obu widać co się dzieje, na drugiej nawet dokładniej

Chyba dla Ciebie :slight_smile: … napisz

Proces się kończy na takiej jasności i lampa zostaje włączona :slight_smile: