Rok temu działo a teraz nie nawilżacznie

brakuje mi pomysłów czy podpowie ktoś czemu msg.payload przy każdorazowym zmianie temperatury wychodzi ‘off’ i nawilżacz się wyłącza mimo nie osiągniętego celu (wg planu przy poniżej 52 powinien się włączyć a powyżej 58 wyłączyć tylko że gdy wilgotność zmieni się np z 55 na 56 to też wychodzi off - rok temu wszystko działało jak trzeba

zmienna SypWilg wygląda tak:

potem wpada tu:

a to co wychodzi z funkcji wpada tutaj (ale to zawsze jest off)
image

może msg.payload przyjmuje off bo tak jest ustawione w linijce nr 6 i wcale nie przechodzi przez warunek if ale nie wiem jak to sprawdzić

W kodzie masz dwa zakresy dla Wilgotnosc:

  • Jeśli Wilgotnosc <= 52, msg.payload jest ustawiane na 'on'.
  • Jeśli Wilgotnosc >= 58, msg.payload jest ustawiane na 'off'.

To oznacza, że jeśli Wilgotnosc znajduje się między 52 a 58, żaden z tych warunków nie zostanie spełniony, i msg.payload pozostanie 'off'

Poza tym sprawdzasz też warunki, tylko gdy time jest 'on'. Jeśli time jest inne niż 'on', msg.payload pozostanie 'off', ponieważ kod wewnątrz instrukcji if (time === 'on') nigdy się nie wykona.

2 Likes

Dodaj statusy w punktach kontrolnych
https://nodered.org/docs/creating-nodes/status

1 Like

tak lepiej chyba prawda?

dodalem warunek Min i Max żeby było łatwiej sterować całym flow

w formule na początku daje msg.payload na 1 żeby domyślnie przyjął coś z czapy ale bałem się że jak tego nie zrobie to może będzie krzyczał jakieś błędy

następnie sprawdzam pingi dla urządzenia 1 i 2 i jeżeli oba są off to msg.payload off bo nikogo nie ma w domu

następnie jak ktoś w domu jest to o ile czas jest odpowiedni to niech pracuje od wilgotnosci poniżej Min do Max lub niech nie pracuje gdy już było Max i spada az do Min

Lepiej, ale nie dobrze. Teraz obecność 2 osoby jest kluczowa - nie ma znaczenia co bylo wcześniej sprawdzane.
Jesli tą osobą jesteś ty, to wcześniej nawet nie wiedziałeś, że nie działa… bo w domu Cię nie było :wink:
Pingi musisz sprawdzać jednym if z użyciem operatora and lub or.

Coś takiego zrobiłem:

to znacz że && to jest AND a || jest OR? Kiedyś mi bardzo brakowało tych operatorów ale wtedy nie mogłem ich znaleźć.

Wygląda lepiej :slight_smile:
O ile na początku zamieściłeś źródło funkcji, to nie wiem co Cię podkusiło aby je później usunąć?
Jeśli ktoś chciałby teraz coś poprawić - to zapomnij, bo nikomu nie będzie się chciało przepisywać tego z obrazka.
Widzimy tylko kawałek procesu i nie ma pewności, że po restarcie NR się to nie wyłoży (obecność zmiennych kontekstowy bez inicjacji).
Dobrą praktyką jest aby na wszelki wypadek ustawiać wartości domyślne.

var Max = flow.get('Max') || 55
1 Like

Dzięki! Bardzo sobie cenię te rady bo nie jestem zbyt dobry w tym języku programowania.
Rozumiem że te znaki nierówności < i > są ok? Bo już żeby dać coś równie się to trzeba dać == zamiast =

Ten Twój zapis oznacza że jak zmienia Max będzie pusta czy coś to przyjmie wartość 55?

hm… to jest tak, że znak = nie porównuje nic tylko przypisuje zmienną, nie sprawdza wartości, to znaczy, że max = 10 przypisuje wartość 10 do zmiennej max. Zapis max == 10 powoduje luźne porównania czyli sprawdza, czy wartości są równe, z automatyczną konwersją typów. Więc jeśli masz zapisane pod max jakąś zmienną to porówna np. (string) 50 czy jest równy 10, (string) 55 zostanie przekonwertowany na (number). Kolejny operator === dokona także porównania ale ścisłego sprawdzi czy wartości i typy są identyczne, bez konwersji typów (jeśli max będzie stringiem to wynik będzie false bo 10 to number).

Coś w tym stylu → jeśli flow.get('Max') zwróci wartość “false” , to zmiennej Max zostanie przypisana wartość domyślna 55.

2 Likes

Ekstra
A jak daje znaki większe lub mniejsze to sprawdza string? Czy typ też? Jeżeli string to skąd wie że string 50 jest większe od string 60?

Jeżeli dajesz II 55 to przypisujesz liczbę czy string?

Liczbę (number).
Zawsze możesz sprawdzać co podaje na wyjściu dany nod podłączając “debug”, string jest na czerwono, number na niebiesko …
deb

1 Like

Dlatego dobrym zwyczajem jest nie pozostawiać przypadkowi automatycznej konwersji i świadomie używać spójnych typów.

1 Like