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
Ja już z 10 razy ćwiczyłem ten Twój proces i ani razu nie poszło dalej
Jak nie - jak tak, nie masz zaznaczone czyli dobrze
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
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


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 …
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
Wypróbuj jeszcze to - jak zwykle u mnie działa.
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ę.
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ć