Nowy Sensor - Nod Change

Panowie chcę stworzyć nowy sensor do AirVisual zamiast tego który jest w integracjach, na podstawie odczytu z encji GIOŚ. Muszę stworzyć AQI na podstawie PM2.5 z GIOS, nie wiem jak to zrobić za pomocą wzoru (bo wzory zmieniają się z wartościami) to poszedłem na łatwiznę i chciałem zrobić w Node-RED z wykorzystaniem nodu Change, muszę zmienić około 120 wartości (np. z 1 na 4, 2 na 8, 3 na 13, itd.) ale po wprowadzeniu powyżej 10 zmiennych pokazuje mi jakieś dziwne wartości:

Zrzut ekranu 2021-01-10 o 22.39.37

flows-2.json (2,5 KB)

Nie wiem czy są jakieś ograniczenia, czy mój błąd.

Twój błąd :slight_smile:

30 zamienia na 188, bo,

  • najpierw znajduje 3 i zamienia na 13, czyli masz:
    (3)0 -> (13)0
  • później znajduje 30 i zamienia na 88, czyli masz:
    1(30) -> 1(88)

Finalnie:
30 -> 188…

Hmm, o tym nie pomyślałem. Teraz pytanie jak temu zapobiec?

Node function i kawałek kodu (if-y).

Na zasadzie:

if msg.payload="30" then msg.payload =="88";
goto koniec;
if msg.payload="x" then msg.payload =="y";
goto koniec;
if msg.payload="x2" then msg.payload =="y2";
goto koniec;
itd.
koniec:
return msg;

Nie wiem tylko jak ogarnąć “goto” w javascript…

Możesz też trochę naokoło:

znacznik=="false"
if znacznik="false" and msg.payload="x" then msg.payload=="y"
znacznik="true"
if znacznik="false" and msg.payload="x1" then msg.payload=="y1"
znacznik="true"
if znacznik="false" and msg.payload="x2" then msg.payload=="y2"
znacznik="true"
itd.
return msg;

Oczywiście kod musisz dopasować do JS.

Dzięki za podpowiedź, ale jeszcze wpadłem na inny pomysł i zrobiłem trochę prościej.
Do nodu swich wpada mi wartość, w nim zrobiłem 3 zakresy pomiędzy 1-9, 10-99 i 100-120 i do wyjść podłączyłem te wartości do 3 nodów change z tymi tylko wartościami.

Dodatkowo musiałem dodać oddzielnie ścieżki do kilku liczb, np. 1, 10.

Narazie działa, muszę to potestować.

Chyba jednak moje rozwiązanie nie gra, więc muszę spróbować wykorzystać Twoją sugestię.