Dodawanie czasu po kliknięciu w przycisk

Cześć
Zrobiłem automatyzację, która włącza max obroty rekuperatora na czas ustawiony w pomocniku.
Wszystko jest spoko ale brakuje mi możliwości przedłużenia czasu po kolejnym kliknięciu w przycisk.
Nie wiem jak się do tego zabrać, gdzie jest przetrzymywana aktualna wartość noda Delay czy w jakiś inny sposób do tego trzeba by podejść.
Docelowo chcę aby można było maksymalnie 3 razy kliknąć przedłużając czas.
Poniżej zamieszczam screen i flow


flows (3).json (3,9 KB)

Tym razem nie będzie gotowca. :wink:
Podpowiedź… przed wysłaniem nowej wartości za pomocą msg.delay = xx , wyślij msg.reset aby zresetować węzeł delay. Inaczej, to co wpisałeś poprzednio i tak się wykona. Delay “kolejkuje” swoje wpisy i każde jego wywołanie tworzy kolejny wirtualny timer.
Gdy się z tym uporasz zrobi się liczenie do 3.

Wysyłam reset przed wysłaniem msg.delay :slight_smile:
flows (4).json (4,5 KB)

Prosty licznik do 3, trzeba tylko trochę przerobić bo w tej chwili działa odwrotnie - msg przechodzi gdy odliczy 3 razy.
Zerowanie licznika wykonaj po turn_off service.

var c = flow.get('C_count') || 0;
c++;
flow.set('C_count',c);
if (c == 3) {
    flow.set('C_count',0);
    return msg;
}
return null;

Na delay nie osiągniesz zadowalającego efektu - nie jesteś w stanie stwierdzić ile czasu upłynęło odpierwszwgo uruchomienia. Zrobiłbym własny licznik odmierzający np. minuty.

Polecam licznik naszego ziomka: https://flows.nodered.org/node/node-red-contrib-afya-counter-the-new

@Robert @RobinI30

Gotowiec:


Kod:

licznik.json (4,7 KB)

@artpc Ten timer i gotowiec jest świetny, dziękuje. Problem jest taki że wartość CT chcę przesyłać z encji ustawianej za pomocą pomocnika (suwak). Ten timer z tego co widzę nie obsługuje przesyłania wartości czasu do odliczania.
@RobinI30 próbowałem cos na szybko zastosować Twoją podpowiedź, ale nie za bardzo wychodzi. Musze na spokojnie wieczorem nad tym posiedzieć. Czy ten kod powinienem umieścić w funkcji przekazującej dane do timera? Co to jest C_count? Skąd taka zmienna? Jest gdzieś miejsce gdzie mogę zapoznać się z wszystkimi zmiennymi danego noda?

zamiast czujnika pir dodajesz przycisk

Tak, ta funkcja to rodzaj filtra, która przepuszcza co trzeci msg nie ingerując w niego.

… zmienna - taką sobie wymyśliłem :), możesz ją nazwać dowolnie.
Zmiennych kontekstowych nie ma - sam sobie tworzysz w/g uznania i przeznaczenia.

contex

ed… nie jest to do końca właściwa odpowiedź na to pytanie.
Dotyczy tylko Twoich zmiennych.

@artpc …dzięki, staram się jak najmniej używać dodatkowych paczek. Jeśli potrafię to pisze sam.
Powód - nie przestanie mi to działać nawet gdy coś zmieni się w NR, szybciej stawia się NR po reinstalacji i działa tak jak chcę.

1 polubienie

Prawda, widać to po ostatnich posunięciach DEVS wycinających niektóre nody :slight_smile:

@artpc Przerobiłem tego gotowca pod swoje potrzeby, zamiast pir dałem przycisk.
Jednak chodzi o to że czas na jaki włączany jest timer potrzebuje przesyłać z encji pomocnika.
Jeśli czas miał by być stały to ten Twój flow działa świetnie.


@RobinI30 Dziękuje za podpowiedź, wieczorem pokombinuje z tym kodem.

@artpc … przeglądałem tego noda CT i pewnie dałoby się go utkać z delaya lub triggera. Jego działanie przypomina stosowanie msg.reset i msg.flush.
Dla tego zastosowania prościej napisać własny :slight_smile: szyty na miarę.

@ RobinI30
Witam,
Skorzystałem z Twojego licznika w moim sterowniku pieca, steruje impulsem co 5 minut sprawdzając temperaturę wody a następnie switchem ustawiam odpowiednie opóźnienie włączenia wentylatora i podajnika.

Niestety z licznikiem mam taki problem, że po wykonaniu deploy przestaje działać, zauważyłem, że restart node red pomaga. Podejrzewam, że brakuje na końcu przepływu reset C_count.
Pomożesz :slight_smile:

Dołącz flow, z fragmentu rysunku nie wywróże .

Tu się zeruje po odliczeniu.

edit…
Powróże - używasz tej samej zmiennej C_count dla trzech różnych liczników :slight_smile: