Prosta funkcja w Node Red

Witam.

Szukałem tego po sieci ale nie bardzo mogę znaleźć - potrzebuję Waszej pomocy.

Mam prostą automatyzację w NR odnośnie odbioru śmieci. Generalnie wszystko działa prawidłowo jak w danym dniu jest informacja o jednym zbiorze śmieci, gorzej jest jak w jednym dniu mam odbiór 2 zbiorów (zmieszane i bio). Nie umiem napisać funkcji w NR aby obie wartości payload mi wyskoczyły w powiadomieniu. Rozłożyłem już sobie flow kompletnie na “części pierwsze” ale nie potrafię zadziałać z tą funkcją:/

Pożyczyłem sobie od Artura system powiadomień:)

msg.wiadomosc =
{
    "temat": "Jutro Śmieci!",
    "tresc": msg.Tworzywa + msg.Zmieszane + msg.Bio,
    "typ": "info_rodzice"
}
return msg;

Chciałbym aby format wiadomości przychodzącej był:

“Jutro Śmieci! Bio + Tworzywa itp”

A póki co dostaję:

“Jutro Śmieci! unnamedBiounnamed” :smiley:

Z góry dziekuję za pomoc :wink:

Nie widzę co masz w środku ale musisz wszystkie po kolei sprawdzić i jak jest aktywne to dopisać do wiadomości

masz tu moje, najpierw sprawdzasz czy któreś śmieci są aktywne, a potem dodajesz do wiadomości po kolei jakie to są śmieci

[{"id":"f17c4f77.6cb36","type":"api-current-state","z":"2cdff75c.5c6178","name":"zmieszane","server":"4d0e02c9.2307bc","version":2,"outputs":2,"halt_if":"0","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.smieci_zmieszane","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"x":1190,"y":280,"wires":[["2953ad14.d534e2"],["b9a3a337.805a1"]]},{"id":"2953ad14.d534e2","type":"function","z":"2cdff75c.5c6178","name":"odpadów zmieszanych","func":"msg.wiadomosc = msg.wiadomosc+\n    \"odpadów zmieszanych\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1390,"y":280,"wires":[["b9a3a337.805a1"]]},{"id":"b6ce1e2.4ccdce","type":"function","z":"2cdff75c.5c6178","name":"Śmieci dziś","func":"msg.wiadomosc = msg.wiadomosc+\n    \" Przypominam, dziś jest wywóz śmieci\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1010,"y":280,"wires":[["f17c4f77.6cb36","6ea6494c.b7a898"]]},{"id":"b9a3a337.805a1","type":"api-current-state","z":"2cdff75c.5c6178","name":"Plastik","server":"4d0e02c9.2307bc","version":2,"outputs":2,"halt_if":"0","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.smieci_plastikowe","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"x":1210,"y":330,"wires":[["7d2d6ba0.47b294"],["7531f564.098d2c"]]},{"id":"7d2d6ba0.47b294","type":"function","z":"2cdff75c.5c6178","name":"plasiku","func":"msg.wiadomosc = msg.wiadomosc+\n    \", plastików\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1350,"y":330,"wires":[["7531f564.098d2c"]]},{"id":"7531f564.098d2c","type":"api-current-state","z":"2cdff75c.5c6178","name":"papier","server":"4d0e02c9.2307bc","version":2,"outputs":2,"halt_if":"0","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.smieci_papier","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"x":1210,"y":370,"wires":[["1772b03f.c4e2f"],["c4be894e.373bd8"]]},{"id":"1772b03f.c4e2f","type":"function","z":"2cdff75c.5c6178","name":"papieru","func":"msg.wiadomosc = msg.wiadomosc+\n    \", papieru\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1350,"y":370,"wires":[["c4be894e.373bd8"]]},{"id":"c4be894e.373bd8","type":"api-current-state","z":"2cdff75c.5c6178","name":"Szkło","server":"4d0e02c9.2307bc","version":2,"outputs":2,"halt_if":"0","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.smieci_szklo","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"x":1210,"y":410,"wires":[["63a47f61.6cbb"],["e7349680.7531d8"]]},{"id":"63a47f61.6cbb","type":"function","z":"2cdff75c.5c6178","name":"szkła","func":"msg.wiadomosc = msg.wiadomosc+\n    \", szkła\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1340,"y":410,"wires":[["e7349680.7531d8"]]},{"id":"e7349680.7531d8","type":"api-current-state","z":"2cdff75c.5c6178","name":"Popiół","server":"4d0e02c9.2307bc","version":2,"outputs":2,"halt_if":"0","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.smieci_popiol","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"x":1210,"y":450,"wires":[["789b81f8.9db95"],["e3e81b21b176dd0c","48385daf.e5d1d4"]]},{"id":"789b81f8.9db95","type":"function","z":"2cdff75c.5c6178","name":"popiołu","func":"msg.wiadomosc = msg.wiadomosc+\n    \", popiołu\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":1350,"y":450,"wires":[["e3e81b21b176dd0c","48385daf.e5d1d4"]]},{"id":"1c0ce08e.71b47f","type":"api-current-state","z":"2cdff75c.5c6178","name":"zmieszane","server":"4d0e02c9.2307bc","version":2,"outputs":2,"halt_if":"0","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.smieci_zmieszane","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"zmieszane1","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"x":710,"y":280,"wires":[["b6ce1e2.4ccdce"],["ce56bec.a63074"]]},{"id":"992e50b7.48424","type":"api-current-state","z":"2cdff75c.5c6178","name":"papier","server":"4d0e02c9.2307bc","version":2,"outputs":2,"halt_if":"0","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.smieci_papier","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"papier1","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"x":690,"y":360,"wires":[["b6ce1e2.4ccdce"],["3d8b8372.15586c"]]},{"id":"3d8b8372.15586c","type":"api-current-state","z":"2cdff75c.5c6178","name":"Szkło","server":"4d0e02c9.2307bc","version":2,"outputs":2,"halt_if":"0","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.smieci_szklo","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"szklo1","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"x":690,"y":400,"wires":[["b6ce1e2.4ccdce"],["c4b71ec0.60879"]]},{"id":"c4b71ec0.60879","type":"api-current-state","z":"2cdff75c.5c6178","name":"Popiół","server":"4d0e02c9.2307bc","version":2,"outputs":2,"halt_if":"0","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.smieci_popiol","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"popiol1","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"x":690,"y":440,"wires":[["b6ce1e2.4ccdce"],["e3e81b21b176dd0c","48385daf.e5d1d4"]]},{"id":"ce56bec.a63074","type":"api-current-state","z":"2cdff75c.5c6178","name":"Śmieci textylia","server":"4d0e02c9.2307bc","version":2,"outputs":2,"halt_if":"0","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.smieci_plastikowe","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"plastik2","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"x":720,"y":320,"wires":[["b6ce1e2.4ccdce"],["992e50b7.48424"]]},{"id":"48385daf.e5d1d4","type":"function","z":"2cdff75c.5c6178","name":"KOMUNIKAT","func":"msg.komunikat =\n{\n    \"data\":\n    {\n        \"message\": msg.wiadomosc,\n    }\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":910,"y":520,"wires":[["c14565e4.0bfe78","8f8b1008.b1686","e19e8f72.89d5a","e742eefa.c4a05"]]},{"id":"4d0e02c9.2307bc","type":"server","name":"Asystent domowy","version":1,"legacy":false,"addon":false,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]

Ślicznie Ci dziękuję:) Bawię się tym chwilę ale nie mogę sobie dalej poradzić:/

Zrobiłem tak jak pisałeś i nie wiem co w tej funkcji

flows.json (4.4 KB)

Nie wiem za cholerę jak tą funkcję napisać, a jak wszystko połączę to mi wyskakuje kompletnie coś dziwnego:/

No ale nie masz żadnej funkcji w tym flow, o czym piszesz?
Podmień sobie w tym moim na swoje encje, dodaj wszędzie debugi i zobaczysz czy dobrze idzie.

Połączyłem to tak:

image

Debug mam taki:

image

W komunikacie mam “undefined” (logiczne, ponieważ dziś nie jest dzień na tworzywa sztuczne). jak to połączyć aby w funkcji wyskakiwały tylko komunikaty które są aktywne?;/

flows (1).json (3.7 KB)

No bo ja mam w każdej funkcji dodanie do poprzedniej wiadomości kolejnego elementu,

msg.wiadomosc = msg.wiadomosc+
    "odpadów zmieszanych";
return msg;

a skoro nie masz poprzedniej wiadomości przed tym flow to z pierwszej funkcji usuń “msg.wiadomosc+” no bo nie została jeszcze wcześniej określona i tak jaki pisałem dodajesz debuga pod KAŻDE wyjście w momencie jak nie działa i nie rozumiesz, wtedy widzisz krok po kroku w którym miejscu jest coś nie tak.

To samo wyskakuje:/

flows (2).json (4.4 KB)

ojeny… przeciez nie poszlo do pierwszego bo pierwsze smieci off
fgbnhgfngfn
dodaj na samym poczatku za inject noda funkcji:

msg.wiadomosc = "Dzisiaj jest wywóz, ";
return msg;

Widzę że nie do końca rozumiesz.
Spokojnie
podepnij pod KAŻDE wyjście debuga i powoli sobie analizuj, krok po kroku,
jest to maksymalnie prosty proces, musisz go nie tylko zrobić ale i dobrze zrozumieć
bo przy następny jaki będziesz robić dalej nie będziesz wiedział jak to działa.

No właśnie miałem to pisać, że nie do końca to mój mózg ogarnął…

Dobra, trochę pomyślałem i teraz wiem undefined tyczyło funkcji przed nodem tworzywa, a nie samego noda tworzywa…

Jednak musze się doszkolić z funkcji…

@bartik22 posprawdzałem cały flow, troszkę to zmodyfikowałem ale robi pieknie. Ślicznie Ci dziękuję za pomoc!:)))

To super.
Teraz dla utrwalenia zrób sobie nowy proces np. sprawdzanie czy któreś światło w domu jest włączone, albo jakieś drzwi otwarte jak wychodzisz z domu.

Dokładnie, będę się tym bawił:)

Jeszcze raz Ci serdecznie dziękuję za pomoc :wink: