NR, regulator grzałek, 2x Inject Node i konflikt

Witam.
To mój pierwszy post, a przygodę z HA zacząłem niedawno, dopiero się uczę, proszę więc o wyrozumiałość.

Zrobiłem integrację regulatora grzałek w Node-RED i wszystko działa, ale jest pewien defekt z którym nie umiem sobie poradzić.

Pierwszy Inject Node wysyła wartość “a” co 5,40 sek.
Drugi Inject Node wysyła wartość “S” co 4,60 sek.
W pewnym momencie czasy wysyłania nakładają się na siebie i powstaje konflikt, wartości zwracane przez regulator są nieprawidłowe. Do podglądu na żywo to nie przeszkadza, ale “psuje” to wykresy i stają się bezwartościowe.

Ustawiałem już rózne czasy, ale zawsze w którymś momencie dane się nałożą w tym samym czasie.

Najlepiej gdyby się dało zrobić to tak:
Wysyłam “a”, regulator zwraca wartość, nastepuje przerwa 1-2 sek. po czym wysyłam “S”, znowu nastepuje przerwa 1-2 sek i tak w kółko. Taka pętla. Ale nie umiem tego zrobić.

Jakieś sugestie jak to rozwiązac?


Linuksowiec

Mnie przychodzi do głowy takie rozwiązanie


deb

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

Na logikę powinno zadziałać. I nawet próbowałem w ten sposób to zrobić wcześniej. Ale napotykam przy tym na inny problem.
Powiedz mi proszę jak ty połączyłeś “Delay node” z “Inject node”?
Przed “Inject node” nie da się niczego dowiązać.
U mnie się tego nie da zrobić za żadne skarby świata.
Próbuje na wszelkie sposoby i nic.
Spójrz proszę na link:

Pokazuje w nim w czym tkwi problem.

Hehe da się , odpowiednio wceluj w hm… dziurkę :slight_smile:

tego nie wiedziałem, może dlatego mnie się udało.
Edit: coś jest na rzeczy nie mogę tego odtworzyć :slight_smile:

Połącz wyjście pierwszego RS485 przed delay z wejściem drugiego.
Napędzaj to tylko jednym (pierwszym) inject.
Oczywiście wróżenie z obrazka mówi mi, że będziesz musiał ustawić jeszcze msg.payload = “S”
Naucz się załączać coś więcej niż screen :slight_smile:
W dalszym ciągu będzie problem z zatrzymywaniem i wznawianie pracy.
Cały flow powinien być tak skonstruowany aby zawierał tylko jeden nod RS485 np. przez zrobienie kolejki do wysłania, ale…
Tworzenie pętli nie jest zalecane.

nd2

Zaimportowałem Twój plik, spójrz:

Niby jest połączone “Inject node” z “Delay node”, ale jak próbuje coś zmienić w “Inject node” to połączenie znika i nie da się ponownie połączyć.

A może w starszych wersjach Node-RED dało się tak zrobić a teraz już nie… ? :thinking:

nt1
flows (46).json (1,3 KB)

Tak to napędzaj … w miejscach debug umieść gałęzie z RS

1 polubienie

Opcja kolegi @RobinI30 wydaje się najsensowniesza, tylko przy tak częstym wysyłaniu danych ( co 5 sek) nod delay bym zastąpił triggerem . Tak mnie uczył jeden kolega z tego forum i uważam, że miał rację.

Można też użyć funcji i wtedy wysyłać naprzemiennie wiadomości a i s z ustawionym interwałem

var message = "a";

function sendMessage() {
    node.send({ payload: message });
    if (message === "a") {
        message = "s";
    } else {
        message = "a";
    }
    setTimeout(sendMessage, 2000);
}

sendMessage();

tyle tylko że to raz zainicjowana pętla działająca stale

@MariuszAK … fajna sztuczka :slight_smile: Jednak rekurencyjne wywołanie samej siebie doprowadzi do tego, że skończy Ci się pamięć. Tworzy się sterta obiektów w których nie ma warunku końca.
Taka hipoteza … :stuck_out_tongue_closed_eyes:
Zapuść ten proces na dłużej i sprawdź co dzieje się z pamięcią.

obserwuje to już dłuższy czas skoczyło z 7 do 12% i nie rośnie już , ale ten interwał co 2 s , masakra

To go wywal :slight_smile:
Działa to tak… wywołując funkcje - na stos odkładany jest adres powrotu, po to aby po zakończeniu wywoływanej funkcji wiadomo było gdzie wrócić. Przy takiej konstrukcji, na końcu wywoływana jest kolejna… i kolejny adres ląduje na stosie, nie ma takiego miejsca aby cały stos wyzerował się do stanu początkowego. Prędzej lub później stackoverflow.

1 polubienie

Zrobiłem tak jak zaproponował kolega RobinI30, czyli poprzez “Delay node” i “Change node” i wygląda na to że działa poprawnie :slight_smile:
Być może da się to zrobić lepiej, ale dla mnie jako początkującemu to rozwiązanie wystarcza i jestem zadowolony.
Dzięki wielkie za pomoc.

Jeśli ktoś posiada “Regulator grzałek MEGA PWM MPPT 3kW 13A” to wrzucam plik z gotowcem. Może komuś się przyda. Wyciągnięte wszystkie dane jakie można wyciągnąć z tego regulatora po RS485.

pv.json (21,3 KB)

1 polubienie

To jeszcze pomyśl jak to poprawić
pv1

…tu też będzie (może być kolizja) tym bardziej, że te zdarzenia będą losowe.

Hmmm narazie nie zabserwowałem problemu podczas naciskania przycisków wznowienia/zatrzymania. Na naciśniecia w HA regulator reaguje odrazu. Nic się nie “krzaczy”.
Ale masz rację, w teorii może wystąpić konflikt. Gdy nacisnę wznowienie/zatrzymanie w tym samym momencie co będzie wysyłał “a” lub “S” mogą pojawić się fałszywe dane. Mało prawdopodobne co prawda, bo ze zdalnego wznowienia lub zatrzymania raczej sporadycznie będę korzystał, ale jednak możliwy scenariusz.