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
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.
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
Pingi musisz sprawdzać jednym if z użyciem operatora and lub or.
Wygląda lepiej
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.
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.