Formuła matematyczna

Zastanawiam w jaki sposób skonfigurować node function aby policzył prostą formułę matematyczną.
Mam dane z czujnika analogowego (wilgotność gleby) podpiętego do Wemos D1 Mini. Oczywiście są one z zakresu 1-1024. Moim zamiarem jest aby wyświetlane były w postaci procentowej ale też nie interesuje mnie cały zakres. Gdy czujnik jest w suchej glebie wartość wynosi 270, gdy w ekstremalnie mokrej - 630.
Równanie matematyczne, które chcę zastosować wygląda następująco:
(x - 270) / (630-270) * 100

Możecie mnie naprowadzić jak to ugryźć?

Wyszukane :

// create shorter references for message properties
temp = msg.payload[0].HeatTreatTemperature;
time = msg.payload[0].HeatTreatTimeInSeconds;

a = (temp-820.7)/(0.0239time); // part of the numerator
b = (temp-820.7)/(0.0239
time); // part of the denominator

numerator = 3.792 * Math.pow(2.71828, a); // plug in “a”
denominator = 1621.5 + Math.pow(2.71828, b); // plug in “b”

msg.payload = numerator/denominator;

return msg;

Odpowiedź powyżej to chyba do tego tematu:

Zakres to 0 - 1023 (rozdzielczość 10 bit). Wyrażenie dla Ciebie (x-270)/3,6
Otrzymasz wartości w % dla zakresu od 270 do 630 (270 = 0%; 630 = 100%).

Dziękuję @artpc
Co prawda Twój przykład jest mocno zaawansowany ale dzięki niemu doszedłem jak to zrobić. Dopiero powoli zaczynam rozumieć podstawy JS.

hum = (msg.payload-270)/(630-270)*100
msg.payload = hum;
return msg;

Witam.
Mam podobny problem, ale z 2 zmiennymi.
Chciałem zrobić sobie w NR wyliczenie z zapasu prądu dla prosumenta, ale nie chce mi przejść formuła, gdy dorzucam drugą zmienną.

msg.payload = msg.payloadp * 0.8 - msg.payloadz

Jeśli mam 2x tą samą zmienną, to działa, ale jak już są 2 różne zmienne to wyrzuca mi “NaN”.

Pomożecie, jak temu zaradzić?

Wrzuć ten kawałek to się zobaczy. Przeważnie jest tak, że mówisz jedno a robisz drugie :wink:

Nie za bardzo wiem, co masz na myśli, ale spróbuję :wink:



tauron_p

Na oko widać, że już jest źle.
Te niebieskie powinny być szeregowo - zrób export, bo nie widać co siedzi w środku.
Przy równoległy do funkcji dochodzą dwie wiadomości - w jednej produkcja w drugiej zużycie - nigdy razem, więc funkcja nie potrafi tego obliczyć.
msg.magazyn pewnie nie istnieje …

Najprościej to zmień inject na coś takiego.
magazyn

… edit … W międzyczasie coś dopisałeś więc export sobie odpuść, ale na przyszłość się tego naucz :slight_smile:

magazyn1

Połącz szeregowo i zmień inject - będzie OK

2 polubienia

Dzięki, jesteś wielki, wszystko działa :slight_smile:
Widzę, że muszę się wiele nauczyć.