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

Testowałem wielokrotnie, rzeczywiście może tak się zdarzyć gdy z jakiegoś powodu zgubi jedną transmisję - ale co można powiedzieć po kilku testach.
Więcej czasu zajmuje uodpornienie na błędy niż napisanie samego prtocesu
Testowałem też drugą wersję, gdzie dolną nitkę napędzałem inject co 1 sek, zamiast events state.

Wróć do tego mojego generatora, ja nie pamietam gdzie tego babola robiłęm, a to były początki, tam chyba to działało lepiej :slight_smile:
Ja już z 10 razy ćwiczyłem ten Twój proces i ani razu nie poszło dalej

Kurcze… cały czas działa :thinking:


Masz to “odptaszkowane” ?

Nie bo podstawiłem tylko swoje encje

Kolejne dwie próby i zawsze stop na 157

Jak nie - jak tak, nie masz zaznaczone czyli dobrze :slight_smile:
Dlatego używam drugiej metody - wysyłam raz i samo się dzieje.

Możesz ustawić debug34 aby pokazywał odczytaną jasność - strasznie ciekaw jestem ?

Proszę bardzo
3

Nie mam pojęcia dlaczego akurat 157?
To jeszcze zrób takie zmiany… jeśli możesz?

Mogę , ale co da inject co sekundę ?

To, że wymusi wykonanie - bez liczenia na to że dimmer prześle odpowiedź o poprzedniej zmianie.

Przy wyłączonej lampie mam brak zdefiniowanej jasnosci w pętli , a jak ustawię przypadkową jasnosć to zobacz


To nie jest co sekundę , więc zapier… tak szybko że blokuje wszystko.
To dopiero jest pętla :slight_smile: , już wiem dlaczego mi TV nie przełączyło :slight_smile:

:flushed: zobacz w logach… pyka co sek więc skąd taki ruch? … teraz tam nie ma żadnej pętli.

Masz tu ten flow , sprawdz sobie czy jest identyczny
flows (2).json (6,1 KB)
Jutro mogę nagrać i wysłać Ci na e-mail jak to zapier … :slight_smile:
Pozdrawiam muszę spadać

Dajmy sobie spokój - nie znajdę przyczyny

Wersja @RobinI30 działa ale nie do końca, tzn. lampki się ściemniają i rozjaśniają i tak w kółko.

Wersja Twoja (@isom1266) działa dobrze. Muszę ją tylko dopracować ponieważ nie ściemnia się całkiem do 0. Możesz mi powiedzieć, który parametr odpowiada za czas a który za wartość o którą są lampki ściemniane?

var poziom = msg.data.attributes.brightness;
var licznik = flow.get ('licznik');
if ((licznik != 60) && (poziom >= 3)) {
    poziom = poziom - 3;
    msg.payload =
    {
        "data":
        {
            "brightness": poziom,
        }
    }
    return [msg, null];
}
else {
    msg.payload = ('off');

}
return [null, msg];

Czy licznik != 60 to będzie czas a (poziom >= 3) to będzie wartość ściemniania?

Cały czas jest to zbyt skomplikowane :slight_smile:

Wypróbuj jeszcze to - jak zwykle u mnie działa.
aaa
flows (49).json (2,0 KB)

Ten drugi sposób.

Jest i trzeci, który działa najlepiej ale wymaga wtyczki node-red-contrib-zigbee2mqtt
flows (50).json (2,1 KB)

Musisz spróbować zrozumieć co dzieje się w funkcji

if ((licznik != 60) && (poziom >= 3)) {

Jeśli licznik nie jest = 60 i brightness jest większy -równy 3 , zmienisz brightness o 3 , w każdym innym przypadku wyślij OFF na drugie wyjście.
Biorąc to pod uwagę teoretyczny czas zależy od trigger 4sek + licznik 60 x trigger 800 milisekund , ale w praktyce ten czas będzie zależał od wartości początkowej brightness, ilości kroków - licznik i wartości każdego kroku -poziom.
Full jasność, to 255 jak podzielisz to przez “poziom” (3) , daje to 85, czyli do pełnego ścienienia potrzeba licznik ustawić na 85, ale możesz zmienić wartość kroku np na 5 i wtedy potrzeba już tylko 51 kroków. Jak ustawisz za mało kroków np licznik != 20 , to lampki sie wyłączą przy poziomie brightness wyższym niż 0. Jak zmniejszysz czas w trigger 2 z 800 na 500, to kroki będą się szybciej powtarzać i skróci się czas przejścia 255 -0 . Nie umiem tego prościej wytłumaczyć

Moze to pomoże
flows (3).json (4,2 KB)

Jest jeszcze taki nod Dynamic-dimmer. Ponoć działa, lecz ja nie umiem go ustawić. Ps. Jak ktoś potrafi to proszę o instrukcję.
dynamic-dimmer

Przed dynamic-dimmer wrzuc function (wartosci przeklejone z dokumentacji nod’a):

msg.payload = {
    "target": 0.5,
    "start": 0.1,
    "command": "DIM",
    "config": {
        "eventInterval": 600,
        "steps": 10,
        "minValue": 0,
        "maxValue": 100
    }
}
return msg;

Za nodem dynamic-dimmer wrzuc function:

var bright = msg.payload
msg.payload = {
    "data":
    {
        "brightness": bright
    }
}

return msg;

Nie testetowałem, ale jezeli dokumntacja nie klamie to powinno działać :slight_smile:

Ok dzięki, działa poprawnie i bardzo płynnie.