Automatyzacja DSL może służyć do tworzenia automatyzacji bardziej złożonych niż te opisane w przewodniku po DSL – podstawowe automatyzacje na iOS.
Sekwencyjny z wieloma działaniami
Automatyzacja może wykonywać więcej niż 1 czynność. Na przykład zamiast pojedynczego węzła action
możesz mieć wiele węzłów action
, które działają sekwencyjnie:
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
action {...}
action {...}
action {...}
}
Sekwencyjny 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.
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
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
, czekają one na wykonanie, aż wszystkie węzły w węźle parallel
zostaną wykonane.
opóźnieniach,
Możesz wprowadzić przerwy w automatyzacjach za pomocą metody delay(for:)
, która przyjmuje argument 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ć i wyłączyć światło 4 razy z 5-sekundową przerwą między każdym włączeniem lub wyłączeniem:
typealias OnOffLightDevice = Matter.OnOffLightDeviceType
typealias OnOffTrait = Matter.OnOffTrait
sequential {
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
delay(for:.seconds(5))
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
delay(for:.seconds(5))
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
delay(for:.seconds(5))
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
}
Pomijanie aktywatorów
Wyciszanie wyzwalania to funkcja, która pozwala automatyzacji ignorowaćstarter
przez określony czas po początkowym zdarzeniu wyzwalają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 aktywowane, nie zostanie ponownie aktywowane przez kolejne 5 minut. Zapobiega to wielokrotnemu i szybkiemu uruchamianiu automatyzacji.
Aby zastosować w automatyzacji pomijanie zdarzeń, użyj słowa kluczowego suppress(for:)
z argumentem Duration
, który określa, jak długo należy czekać przed reakcją na kolejne zdarzenia.
Czas blokowania może wynosić od 5 sekund do 24 godzin.
typealias OccupancySensorDevice = Matter.OccupancySensorDeviceType
typealias OnOffLightDevice = Matter.OnOffLightDeviceType
typealias MotionDetectionTrait = Google.MotionDetectionTrait
typealias OnOffTrait = Matter.OnOffTrait
automation {
let starterNode = starter(device, OccupancySensorDevice.self, MotionDetectionTrait.self)
starterNode
suppress(for: .seconds(30 * 60) // 30 minutes
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
}
Pamiętaj, że pomijanie reguł wpływa na wszystkie starters
w automatyzacji, które poprzedzają Suppression
.
Ustawianie atrybutów cech w działaniu
Aby ustawić wartość atrybutu cechy:
- 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 przedrostek
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:
typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait
action(fan, FanDeviceType.self) {
update(FanControlTrait.self) {
$0.setFanMode(.on)
}
}