Węzeł rozdzielający na podstawie msg

Szukam rozwiązania na podział przepływu danych w NR. Pewnie jest jakiś node do tego. W msg puszczam dane na zasadzie msg.pomiar_stan, msg.pomiar_wartosc itd. Wysyłam to na noda mqtt out. Ale tam mogę wysłać tylko pojedynczo. Czyli do każdego komunikatu robię funkcje, która przypisuje np. msg.pomiar_stan do msg.payload by to zadziałało. Ale robi się takich nodów sporo. Czyli chodzi mi o taki node, który ma wiele wyjść, a na każdy będzie określona informacja. Filtrowana na podstawie nazwy msg.coś_tam. Jest coś takiego?

zwykły nod function wystarczy

np.
return [msg1,msg2]

wtedy jednym wyjściem najpierw idzie msg1, następnie wysyłany jest msg2

Nie do końca. Nod mqtt out wymaga wysłania do niego informacji w msg.payload. Inna nazwa nie przechodzi. Więc mając funkcję robiącą kilka różnych wyników, muszę tworzyć kolejne funkcje “czyszczące” przepływ danych dla mqtt. Przykładowo dla flow z pyleniem alergenów wygląda to tak (dla jednego alergenu!)


Zastanawiam sie czy da sie to uprościć. Bo patrząc, że wszystkich alergenów jest 16, i dla kazdego 3 wartości, to robi sie całkiem spora grupa nodów.

Chętnie pokazalbym Ci coś więcej ale jestem obecnie poza domem więc dorzucę tylko zrzut ekranu zrobiony na telefonie.


Używam tego do obsługi Volumio, funkcja uruchamia się automatycznie po rozpoczęciu odtwarzania muzyki i pobiera listę odtwarzanych utworów. I jak widać ma 40 wyjść, do każdego wyjścia podpięty bezpośrednio nod mqtt.
Dlatego tyle nodów mqtt bo dzięki temu mam możliwość później bezpośrednio z listy włączyć natychmiast odtwarzanie dowolnego utworu

I to mi pokazuje, ile jeszcze nie wiem. Jestem ciekaw jak rozwiązałeś to wysyłanie na nody mqtt. Bo to by mi sporo ułatwiło.

Każda kolejna wiadomość wychodzi jako msg.

to co na zrzucie powyżej

to return [[msg1],[msg2],[msg3],......] - 1 out, 2 out, 3 out…
W nodzie w zakładce setup konfigurujesz ilość wyjść.

Zresztą wszystko jest w dokumentacji.
https://nodered.org/docs/user-guide/writing-functions

Dzisiaj już Ci za bardzo nie pomogę, ale jutro jak będę w domu to wrzucę zawartość funkcji i wyjaśnię co i dlaczego. Obsługa Node-reda na telefonie jest koszmarna.
Ale jest dokładnie tak jak napisał przedmówca. Kwestia tylko, w zależności od potrzeby, wypracowania odpowiednich msg do poszczególnych wyjść funkcji.

Wszystko zależy w jakiej formie zwracane są dane pylenia.
Jeśli jest to obiekt json to można zapisać całość w jednym temacie mqtt (np. tak jak to robi tasmota) . Dane wyciągać na poziomie samego czujnika w HA za pomocą odpowiedniej konstrukcji value_template: “{{ value_json. … }}”. Jeśli nie, to może łatwiej jest go konwertować na json w NR… a może wystarczy sam nod change… wszystko zależy :slight_smile:

Ja całość robie w NR. Pobieram http requestem z urla dane i wynikowo one idą w json (http://api.zadnegoale.pl/dusts/public/date/2021/region/5). A potem już w funkcjach obrabiam, by wyciągnąć co mnie interesuje.

To sprawdź czy całość da się zapisać w jednym temacie mqtt ( nie wiem czy są jakieś ograniczenia do rozmiaru). Tak jak pisałem… dane wyciągnij w HA indywidualnie w każdym z czujników - podobnie jak to robisz w NR.
Musiałbym to wrzucić do jakiegoś json viewer aby zrozumieć strukturę i coś więcej powiedzieć … ewentualnie jutro.

edit… Jako, że sam nie lubię składni HA zrobiłbym to tak


flows (28).json (2,3 KB)

Wynik w mqtt
alergy1

… pasuje ? :slight_smile: Dalej już z górki - zdefiniować interesujące sensory w HA.

1 polubienie

Jaki serwis udostępnia te informacje :slight_smile: Region 5 co to za część kraju ?
Dzięki za odpowiedź

Śląsk i Wielkpolska (co widać na screenshocie)

Podejrzewam ten, ale @bieniu chyba cahe’uje wyniki u siebie (tak naprawdę nie wiem skąd ma dane)

@RobinI30 to jest genialne. Teraz będę siedział i sprawdzał jak to zrobiłeś :slight_smile: Wygląda prosto i daje dokładnie taki wynik jak chciałem.