UWAGA: Strona oraz Forum Smart'ny Dom nie będzie dostępne 23 Grudnia 2024 ze względu na przenoszenie serwisu na mocniejszą maszynę.
W tym czasie polecam poświęcenie swojego czasu na pomoc partnerowi w przygotowaniu udanych Świąt 😉
Za niedogodności z góry przepraszam, admin
Cześć
Mam do włączników dotykowych przypisane reguły uruchamiające odpowiednie sceny. SW1 uruchamia SCENA_1, SW2 uruchamia SCENA_2.
rule "SCENE_1_ON" when Item SW1 changed from OFF to ON then Scene_1.sendCommand(ON) end rule "SCENE_1_OFF" when Item SW1 changed from ON to OFF then Scene_1.sendCommand(OFF) end rule "SCENE_2_ON" when Item SW2 changed from OFF to ON then Scene_2.sendCommand(ON) end rule "SCENE_2_OFF" when Item SW2 changed from ON to OFF then Scene_2.sendCommand(OFF) end
W jaki sposób wykonać to przypisanie aby możliwe było uruchomienie tylko jednej z nich. Tzn wywołanie pierwszej deaktywuje drugą, a wywołanie drugiej deaktywuje pierwszą.
1) Uruchom SCENA_1
Jeśli SCENA_2 jest aktywna -> deaktywuj SCENA_2 i uruchom SCENA_1
2) Uruchom SCENA_2
Jeśli SCENA_1 jest aktywna -> Deaktywuj SCENA_1 i uruchom SCENA_2
Z góry dziękuję za pomoc
Cześć, wewnątrz reguły możesz odnosić się też do innych "itemów". Czyli nawet jeśli wyzwalaczem reguły jest switch1 to możesz wysłać polecenie do switch2. Generalnie jeśli masz sytuację w której potrzebujesz "resetować" stan to możesz zrobić grupę, która będzie miała wszystkie oprawy. Wówczas na początku każdej reguły dajesz G_Lights.sendCommand(OFF) i później już ON tylko do opraw, które powinny być aktywne w danej scenie.
wewnątrz reguły możesz odnosić się też do innych "itemów". Czyli nawet jeśli wyzwalaczem reguły jest switch1 to możesz wysłać polecenie do switch2.
Tak zdaję sobie z tego sprawę. Kombinuję na różne sposoby. Z warunkowaniem i bez....efekt ten sam. tj:
Uruchom SCENA1 -> deaktywacja SCENA2 -> SCENA1 uruchamia się na chwilę i też się deaktywuje
@carpov Pytanie, dość prozaiczne - czy nie masz jakoś połączonych itemów? Jeśli obserwujesz zachowanie takie jak wyżej to warto sprawdzić w logach czy nie dostajesz jakiegoś dodatkowego stanu po wykonaniu reguły (evnet.log).
Dobra mam. Może mało eleganckie rozwiązanie ale w końcu działa. Sprawdziłem logi. Rzeczywiście operację deaktywacji i aktywacji scen "nachodziły" na siebie wzajemnie. Ma tu też prawdopodobnie znaczenie szybkość działania sterownika RGBW.
INACZEJ mówiąc kiedy sterownik otrzymał polecenie aktywacji danej sceny , deaktywacja jeszcze trwała...dlatego dodałem opóźnienia przed aktywacją danych scen
rule "R1_BLUE_SCENE_ON" when Item TSW1_SW1 changed from OFF to ON then TSW1_SW2.sendCommand(OFF) Thread::sleep(500) Scene_BLUE.sendCommand(ON) end rule "R2_BLUE_SCENE_OFF" when Item TSW1_SW1 changed from ON to OFF then Scene_BLUE.sendCommand(OFF) end rule "R3_WHITE_SCENE_ON" when Item TSW1_SW2 changed from OFF to ON then TSW1_SW1.sendCommand(OFF) Thread::sleep(500) Scene_WHITE.sendCommand(ON) end rule "R4_WHITE_SCENE_OFF" when Item TSW1_SW2 changed from ON to OFF then Scene_WHITE.sendCommand(OFF) end
Potestuje to. Na razie jest OK
@carpov hej, do rozważenia może zamiast 4 items do scen zrobić jeden
np.: Item sceny, który może mieć np. 4 wartości (4 sceny)
A pózniej w zależności od wartości sceny robić odpowiednie akcje
- może trochę uprości.
Tak mam zrobione u siebie i efekt w UI jest jak na załączonych screenach z BasicUI oraz HabPanela. NIe trzeba się bawić w ustawianie/zmienianie stanów każdego z tych przycisków do Scen.
- u mnie te sceny odpowiadają za światło, security, TV, czujniki ruchu, domofon.
U góry : Rano, Dzień itd
To samo co powyżej ale po lewej u góry przycisk [Tryb Dzienny], po wciśnięciu którego pojawiają się sceny do wyboru
Mogę dodać że w 2.5/3.0 można dla itemu w metadanych określić "stateDescription" a także mapowanie lcizb/cyfr/ciągów na wartość opisową. Pozwala to na korzystanie w logice z porównań opartych o liczby lub skróty.
Prezentowanie dla użytkownika jest wówczas niezależne od "identyfikatora technicznego" scen a w samym interfejsie użytkownika (pod 3.0) można zrobić pętlę po możliwych stanach itema (bodajże loop+item states).