Język DSL automatyzacji umożliwia tworzenie bardziej złożonych automatyzacji niż te opisane w przewodniku po DSL – podstawowe automatyzacje w iOS.
Sekwencyjne z wieloma działaniami
Automatyzacja może wykonywać więcej niż jedną czynność. Na przykład zamiast pojedynczego węzła action możesz mieć kilka węzłów action, które są wykonywane w kolejności sekwencyjnej:
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
action {...}
action {...}
action {...}
}
Sekwencyjne z wieloma działaniami równoległymi
Jeśli umieścisz kilka węzłów action w węźle parallel, działania będą wykonywane jednocześnie.
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
Jeśli w węźle sequential znajdują się 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óźnienia
W automatyzacjach możesz wprowadzać przerwy za pomocą metody
delay(for:),
która przyjmuje argument
Duration
określający, jak długo ma trwać wstrzymanie przed kontynuowaniem wykonywania. Czas trwania wstrzymania może wynosić od 5 sekund do 24 godzin.
Aby na przykład przełączyć światło 4 razy z 5-sekundową przerwą między każdym przełą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() }
}
Tłumienie wyzwalacza
Tłumienie wyzwalacza to funkcja, która umożliwia automatyzacji ignorowanie starter przez określony czas po początkowym zdarzeniu wyzwalającym. Jeśli na przykład automatyzacja ma starter, który jest wyzwalany przez wykrywanie ruchu, a Ty określisz czas tłumienia wyzwalacza na 5 minut, to gdy starter zostanie wyzwolony, nie zostanie wyzwolony ponownie przez następne 5 minut. Zapobiega to szybkiemu i powtarzającemu się wyzwalaniu automatyzacji.
Aby zastosować tłumienie wyzwalacza w automatyzacji, użyj słowa kluczowego
suppress(for:)
z argumentem
Duration
określającym, jak długo należy czekać przed zareagowaniem na kolejne wyzwalacze.
Czas trwania tłumienia 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 tłumienie wyzwalacza 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ł
updatew węźleaction, w tym odpowiednią cechę jako argument węzłaupdate:action(deviceReference, deviceType) { update(trait) { } } - W węźle
updatedla każdego atrybutu, który ma zostać zmodyfikowany, użyj funkcji mutatora i przekaż jej nową wartość. Aby utworzyć nazwę funkcji mutatora:- Zacznij nazwę atrybutu od wielkiej litery.
- Dodaj przed nią słowo
set.
defaultMoveRate, użyj funkcji mutatora o nazwiesetDefaultMoveRate.
Pamiętaj, że węzeł update może mieć wiele funkcji mutatora. Oto przykład, w którym aktualizowane są 2 atrybuty:
typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait
action(fan, FanDeviceType.self) {
update(FanControlTrait.self) {
$0.setFanMode(.on)
}
}