Proces zmiany wartości przyciskiem

Panowie mam prośbę o pomoc, mam wentyator który ma trzy tryby: Low, medium, high, chciałbym klikając w ikonę w lovelace, żeby się zmieniały tryby. Chciałbym to przenieść do NodeRed - próbowałem kilka wersji procesu, ale niestety nie działa wyskakuje błąd.

Mam utworzonego pomocnika input_boolean, zmiana jest wywoływana przez usługę fan.set_speed, a encja fan.wentylator

Pomocnik input_boolean przyjmuje tylko dwie wartości: on/off, true/false a Ty masz 3 stany wentylatora czyli powinieneś skorzystać z pomocnika “pole wyboru” albo “liczba”.

Właśnie o to mi chodziło, bo chcę żeby przyjął stan on, zmienił mi tryb działania (na kolejny) i przyjął stan na off.
Podobne działanie do tego jak robił @artur w filmiku czyszczenia alarmów.

@artur czy jesteś w stanie pomóc w tej kwestii, bo siedzę nad tym i nie mogę ruszyć dalej.

Gdzie dokładnie masz problem?

  1. Wciskasz przycisk w lovelance;
  2. NR odczytuje wciśnięcie i zaczyna proces
  3. Sprawdzasz aktualny fan_speed
  4. W zależności od 3 ustawiasz fan.set_speed
  5. Wyłączasz przycisk (tylko dlatego, że jest włączony?)

Pomocnika używasz tylko do startu procesu? Może lepiej zrobić pusty skrypt i “events/call_service” czekać na jego wywołanie? + pomocnik pole wyboru np.
image

To może po kolei.
Wciskam ikonę -> uruchamia się proces w NR który zmienia się na jeden z wybranych trybów (Silent, medium, fast) -> i wyłącza się proces. Jak kliknę po raz kolejny to zmienia mi się na kolejny tryb.
Za pomocnika użyłem input-bolean.

Załącz może proces NR to będzie prościej coś podpowiedzieć.

Zacząłem tworzyć coś takiego dla zmiany trybów w odkurzaczu (takie samo działanie dla wentylatora):

flows-2.json (4,8 KB)

@pawelwaz jutro mogę popatrzeć na proces ale generalnie schemat jest taki, że ustawiasz trigger reagujący na on później odczytujesz aktualny stan wiatraka następnie w switchu masz zdefiniowane te trzy tryby i teraz dla każdego z nich masz nod call service który zmienia tryb na inny a później ustawia włącznik na off :grinning:

Mam nadzieję, że pomoże
flow.fan.comments.json (5,8 KB)

Każda wskazówka jest cenna, ale jeszcze nie udało mi się rozwiązać tego problemu.

@artur założenie rzeczywiście jest proste, rozwiązanie tego założenia trochę bardziej skomplikowane dla mnie - jeszcze popróbuję.

@pawelwaz właśnie importuje Twój proces do siebie daj chwilę zobaczę jak mogę pomóc

A Ty chcesz żeby tam losowo się tryb włączał czy chcesz w jakiejś konkretnej sekwencji np: silent->standrad->turbo->…->inny?

@pawelwaz widzę tu kilka problemów

  1. W switchu weryfikujesz msg.payload i przyrównujesz ją do danego trybu np silent, ale w msg.payload nigdzie wcześniej nie masz zasilenia nazwą trybu. Masz funkcję która robi to:
msg.payload = Math.round(Math.random()*1)

Czyli zwraca Tobie liczbę losową z przedziału od 0-1 ponieważ masz zaokrąglenie to albo masz 0 albo 1 w payload. Więc porównujesz msg.payload (0/1) do trybu np silent. Co oczywiście nigdy nie będzie prawdą więc ten proces nie zadziała.
2. Ja rozumiałem, że ten proces ma zmieniać tryb pracy na włączonym odkurzaczu. Jeżeli dobrze to rozumiem to powinieneś te dwa nody
image
zamienić na nod który odczyta aktualny tryb. Wtedy miałbyś w msg.payload aktualny tryb i wtedy switch miałby sens. Bo byś przyrównał np Silent == Silent
3. Jeżeli punkt 2 dobrze rozumiem i byś wykonał go tak jak napisałem to wtedy powinieneś zmienić to:
image
Zmiana powinna być następująca:
Dla trybu Silent nie powinieneś ustawiać silent tylko np standard. Dla trybu standard np silent.
Wtedy osiągnąłbyś następujący efekt:

  1. Odkurzacz chodzi w trybie silent
  2. włączasz przycisk w HA
  3. proces odczytuje aktualny tryb
  4. w switch wychodzi silent==silent więc wybiera ścieżkę dla silent
  5. tam jest ustawiony standard więc następuje zmiana trybu
  6. wyłączany przełącznik
  7. Możesz proces uruchomić od nowa tylko teraz w punkcie 4 będzie przyrównanie standard==standard a tam będzie np uruchomienie trybu turbo i tak bez końca

To wszystko co napisałem oczywiście ma sens o ile zrozumiałem co chcesz osiągnąć

Po koleji silent->standard->medium->turbo->gentle->silent->medium…itd.

@pawelwaz no to w takim razie powyższa moja instrukcja ma sens

W sumie trochę okrężną drogą to zrobiłem, ale naprowadziliście mnie. Stworzyłem dodatkowo sensor.tryb oraz stworzyłem dodatkowo script do zmiany trybów i się udało. Efekt jest taki, że klikając na karcie odkurzacza (jak pracuje albo jest wyłączony) ikonę vacuum - zmienia mi się tryb
Zrzut ekranu 2020-10-21 o 14.02.40
To samo będę robił dla wiatraka i pewnie dla oczyszczacza i nawilżacza (natomiast do tych wykorzystam pomocnika pole wyboru).
Dziękuję

Panowie chcę pójść za ciosem i dokończyć te wszystkie karty.
Pierwsza prawie skończona Roborocka S5:
Zrzut ekranu 2020-10-21 o 17.43.42
Chcę zrobić jeszcze w NR automatyzację związaną z pomocnikiem (pole wyboru) czyli wybór pomieszczenia, po wybraniu np. Kuchni robot jedzie do kuchni, po wybraniu pole powraca do napisu “wybierz pomieszczenie”

Druga to podobnie jak powyższa le przy polu wyboru zostaje w wybranym miejscu, no i jeszcze drugi pomocnik number.
Zrzut ekranu 2020-10-21 o 17.44.12

Naprowadzicie mnie, przy polu wyboru wyzwalaczem jest input_select muszę przechodzić przez jakiś nod który odczyta stan czy odrazu do nodu switch (w którym są wszystkie pomieszczenia) i do call serwice?

@pawelwaz nod debug Twoim przyjacielem :slight_smile: podepnij go do nodu wyzwalającego i będziesz wiedział czy masz wszystkie dane do switch czy nie.

Tak zrobiłem, już jedno mam gotowe. Jeszcze pozostałe karty i będzie zrobione.

1 Like