Automatyzacji DSL można używać do tworzenia automatyzacji bardziej złożonych niż te omówione w przewodniku po DSL – podstawowe automatyzacje.
Sekwencyjny z wieloma działaniami
Automatyzacja może wykonywać więcej niż 1 działanie. Na przykład zamiast pojedynczego węzła action
możesz mieć kilka węzłów action
, które działają sekwencyjnie:
automation {
sequential {
starter<_>(...)
condition {...}
action {...}
action {...}
action {...}
}
}
Sekwencyjnie z wieloma równoległymi działaniami
Jeśli w węźle parallel
umieścisz wiele węzłów action
, działania będą wykonywane równolegle.
automation {
sequential {
starter<_>(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
}
Jeśli w węźle sequential
występują węzły action
, które występują po węźle parallel
, oczekują one na wykonanie do momentu, gdy wszystkie węzły w węźle parallel
zostaną wykonane.
opóźnieniach,
Możesz wprowadzić przerwy w automatyzacjach za pomocą słowa kluczowego delayFor
, które przyjmuje argument java.time.Duration
określający, jak długo ma trwać przerwa przed wznowieniem wykonywania. Czas pauzy może wynosić od 5 sekund do 24 godzin.
Aby na przykład włączyć światło 4 razy z 5-sekundową przerwą między każdym włączeniem:
sequential {
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
delayFor(Duration.ofSeconds(5))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
delayFor(Duration.ofSeconds(5))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
delayFor(Duration.ofSeconds(5))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}
Wyciszanie aktywatorów
Wyciszanie zdarzeń to funkcja, która pozwala automatyzacji ignorować zdarzeniestarter
przez określony czas po początkowym zdarzeniu wywołującym. Jeśli na przykład automatyzacja ma działanie starter
, które jest wywoływane przez wykrywanie ruchu, a Ty określisz czas trwania tłumienia działania na 5 minut, to gdy starter
zostanie uruchomione, nie zostanie uruchomione ponownie przez kolejne 5 minut. Zapobiega to wielokrotnemu i szybkiemu uruchamianiu automatyzacji.
Aby zastosować w automatyzacji wykluczenie reguły, użyj słowa kluczowego suppressFor
z argumentem java.time.Duration
, który określa, jak długo należy czekać na reakcję na kolejne reguły.
Czas blokowania może wynosić od 5 sekund do 24 godzin.
automation {
sequential {
val starterNode = starter<_>(device, OccupancySensor, MotionDetection)
suppressFor(Duration.ofMinutes(30))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}
Pamiętaj, że wykluczenie reguły wpływa na wszystkie starters
w automatyzacji, które poprzedzają suppressFor
.
Ustawianie atrybutów cech w działaniu
Aby ustawić wartość atrybutu cech:
- Utwórz węzeł
update
w węźleaction
, podając odpowiednią cechę jako argument węzłaupdate
:action(deviceReference, deviceType) { update(trait) { } }
- W każdym węźle
update
dla każdego atrybutu, który ma zostać zmodyfikowany, użyj funkcji modyfikującej i przekaż jej nową wartość. Aby utworzyć nazwę funkcji mutatora:- Upewnij się, że nazwa atrybutu jest zapisana wielkimi literami.
- Dodaj przed nim słowo
set
.
defaultMoveRate
, użyjesz funkcji modyfikującej o nazwiesetDefaultMoveRate
.
Pamiętaj, że węzeł update
może mieć wiele funkcji modyfikatora. Oto przykład, w którym zaktualizowano 2 atrybuty:
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}