Mam ESP32 DEV-KIT i zainstalowana Tasmotę. Potrzebuję utworzyć regułę która będzie uruchamiać Przekaźnik1 (Power1) w momencie kiedy będą włączone Przekaźnik5 oraz Przekaźnik10 jednocześnie. Z tego co wyczytałem nie ma możliwości w Tasmocie używać operatorów logicznynych takich jak: and; or itp.
Na forum niemieckim podpowiedziano mi aby użyć reguły:
ON Power10#State=1 DO IF(Power5#State=1) DO Power1 1 ENDON
ON Power5#State=1 DO IF(Power10#State=1) DO Power1 1 ENDON
jednak ona u mnie nie działa. Bardzo prosze o jakieś podpowiedzi
Też już tak próbowałem i dalej nic. W dokumentacji piszę coś że nie we wszystkich wersjach jest dostępna funkcja IF - ale myślę że w ESP32 Tamota PL to juz jest.
Tak - Skopiowałem to co napisałeś
Uruchamiam regułę Rule1 1
i nic
W konsoli mam takie informacje:
11:04:13.738 RSL: RESULT = {"POWER5":"ON"}
11:04:13.739 RSL: POWER5 = ON
11:04:14.769 RSL: RESULT = {"POWER10":"ON"}
11:04:14.770 RSL: POWER10 = ON
11:04:14.809 RUL: POWER10#STATE=1 performs 'IF(Power5#State=1) Power1 1 ENDIF'
11:04:14.812 RSL: RESULT = {"If":"Done"}
Wczytałem na próbę inną wersję Tasmoty (Tasmota English, Tasmota Development) i dalej to samo. Reguła nie uruchamia Power1. Ma ktoś jszcze jakis pomysł?
Można to też obskoczyć z wykorzystaniem MEM<x> (zmiennej), która będzie śledzić stan danego przekaźnika i będzie odniesieniem w regule dla drugiego przekaźnika.
Do przetestowania:
Rule1
ON Power5#State=1 DO Mem1 1 ENDON
ON Power5#State=0 DO Mem1 0 ENDON
Rule2
ON Power10#State=1 DO Backlog Mem2 1; Power1 %mem1% ENDON
ON Power10#State=0 DO Backlog Mem2 0; Power1 0 ENDON
Działanie:
Gdy oba przekaźniki (Power5 i Power10) są włączone:
Mem1=1 i Mem2=1, co powoduje włączenie Power1.
Gdy którykolwiek z przekaźników (Power5 lub Power10) zostaje wyłączony:
Stan Mem1 lub Mem2 zmienia się na 0, a Power1 zostaje wyłączone.
Zapisałem to w duch zestawach reguł dla lepszej czytelności.
W Tasmota możesz używać więcej niż trzech reguł, jest to wyjaśnione w dokumentacji. Rule1; Rule2; Rule3 - to zestawy reguł tworzone dla budowania wzajemnych funkcji pomiędzy nimi. Podstawowa regułą zbudowana jest jako wiersz o składni: ON <trigger> DO <command> [ENDON | BREAK]
Dla pojedynczego zestawu reguł (Rule1) ograniczeniem jest ilość przesyłanych znaków (zazwyczaj do 1500) i wielkość bufora MCU. Podsumowując zapis można sprowadzić do jednego zestawu, bo nie występują w automatyzacji zależności między Rule1 a Rule2:
Rule1
ON Power5#State=1 DO Mem1 1 ENDON
ON Power5#State=0 DO Mem1 0 ENDON
ON Power10#State=1 DO Backlog Mem2 1; Power1 %mem1% ENDON
ON Power10#State=0 DO Backlog Mem2 0; Power1 0 ENDON
Nadal mylisz pojęcia, pojedynczą regułą jest ON <trigger> DO <command> [ENDON | BREAK]
i takich ciągów możesz mieć spokojnie do 1000 znaków (spacje i wielkość znaków się nie liczą) w jednym zestawie reguł np. rule1.
Przestudiuj dokładnie dokumentację reguł, zapoznaj się z przykładami i zrozumiesz dokładniej jak to działa.
P.S.
Zakładamy, że wgrywasz długi ciąg reguły i w konsoli otrzymujesz informacje o przepełnieniu bufora (jakoś tak) lub chcesz dopisać ciąg dalszy dla danej reguły, zachowując wcześniejsze zapisy, to używasz do tego separatora w postaci znaku +.
Gdyby komuś brakowało czegoś w standardowych kompilacjach plików bin, to może sobie łatwo i bez wiedzy programisty do kompilować potrzebne elementy dzięki projektowi: