Mit der Automation DSL können Sie automatisierte Abläufe erstellen, die komplexer sind als die im DSL-Leitfaden – grundlegende automatisierte Abläufe auf iOS-Geräten beschriebenen.
Sequenziell mit mehreren Aktionen
Eine Automatisierung kann mehrere Aktionen ausführen. Anstelle des einzelnen action
-Knotens können Sie beispielsweise mehrere action
-Knoten verwenden, die in sequenzieller Reihenfolge ausgeführt werden:
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
action {...}
action {...}
action {...}
}
Sequenziell mit mehreren parallelen Aktionen
Wenn Sie mehrere action
-Knoten in einem parallel
-Knoten platzieren, werden die Aktionen gleichzeitig ausgeführt.
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
Wenn sich im Knoten sequential
nach dem Knoten parallel
action
Knoten befinden, wird die Ausführung der Knoten im Knoten parallel
abgewartet.
Verzögerungen
Mit der Methode delay(for:)
können Sie Pausen in Ihren Automatisierungen einfügen. Sie nimmt das Argument Duration
entgegen, das angibt, wie lange die Pause dauern soll, bevor die Ausführung fortgesetzt wird. Die Pause kann zwischen fünf Sekunden und 24 Stunden dauern.
So schalten Sie beispielsweise eine Lampe viermal mit einer Pause von fünf Sekunden zwischen den einzelnen Schaltvorgängen ein und aus:
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() }
}
Triggerunterdrückung
Mit der Triggerunterdrückung kann Ihre Automatisierung nach dem ersten auslösenden Ereignis einen starter
für einen bestimmten Zeitraum ignorieren. Wenn die Automatisierung beispielsweise eine starter
hat, die durch Bewegungserkennung ausgelöst wird, und Sie eine Dauer von fünf Minuten für die Auslöseunterdrückung angeben, wird die starter
nach dem Auslösen erst nach fünf Minuten wieder ausgelöst. So wird verhindert, dass die Automatisierung immer wieder schnell ausgelöst wird.
Wenn Sie die Triggerunterdrückung auf Ihre Automatisierung anwenden möchten, verwenden Sie das Keyword suppress(for:)
mit dem Argument Duration
, das angibt, wie lange gewartet werden soll, bevor auf nachfolgende Trigger reagiert wird.
Die Dauer der Unterdrückung kann zwischen fünf Sekunden und 24 Stunden liegen.
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() }
}
Hinweis: Die Unterdrückung von Triggern wirkt sich auf alle starters
in einer Automatisierung aus, die vor der Suppression
stehen.
Merkmalsattribute in einer Aktion festlegen
So legen Sie den Wert eines Merkmalattributs fest:
- Erstellen Sie einen
update
-Knoten innerhalb einesaction
-Knotens und geben Sie das entsprechende Merkmal als Argument für denupdate
-Knoten an:action(deviceReference, deviceType) { update(trait) { } }
- Verwenden Sie innerhalb des
update
-Knotens für jedes Attribut, das geändert werden soll, eine Mutatorfunktion und übergeben Sie ihr den neuen Wert. So bilden Sie den Namen der Mutatorfunktion:- Geben Sie den Namen des Attributs in Großbuchstaben ein.
- Stellen Sie ihr das Wort
set
voran.
defaultMoveRate
aktualisieren möchten, verwenden Sie eine Mutatorfunktion namenssetDefaultMoveRate
.
Ein update
-Knoten kann mehrere Mutatorfunktionen haben. Hier ein Beispiel, bei dem zwei Attribute aktualisiert werden:
typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait
action(fan, FanDeviceType.self) {
update(FanControlTrait.self) {
$0.setFanMode(.on)
}
}