Mit der Automatisierungs-DSL können Sie komplexere automatisierte Abläufe erstellen als die, die im DSL-Leitfaden – grundlegende automatisierte Abläufe unter Android beschrieben werden.
Sequenziell mit mehreren Aktionen
Eine Automatisierung kann mehrere Aktionen ausführen. Anstelle des einzelnen action
-Knotens können Sie beispielsweise mehrere action
-Knoten haben, die sequenziell ausgeführt werden:
automation {
sequential {
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.
automation {
sequential {
starter<_>(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
}
Wenn es im Knoten sequential
action
Knoten gibt, die nach dem Knoten parallel
kommen, wird mit der Ausführung gewartet, bis alle Knoten im Knoten parallel
ausgeführt wurden.
Verzögerungen
Mit dem Keyword delayFor
können Sie Pausen in Ihre Automatisierungen einfügen. Es verwendet das Argument java.time.Duration
, das angibt, wie lange die Ausführung pausiert werden soll. Die Pausendauer kann zwischen fünf Sekunden und 24 Stunden betragen.
Wenn Sie beispielsweise eine Lampe viermal mit einer Pause von fünf Sekunden zwischen den einzelnen Schaltvorgängen ein- und ausschalten möchten, geben Sie Folgendes ein:
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()) }
}
Trigger-Unterdrückung
Mit der Triggerunterdrückung können Sie festlegen, dass Ihre Automatisierung einen starter
für einen bestimmten Zeitraum nach dem ursprünglichen Triggerereignis ignoriert. Wenn die Automatisierung beispielsweise eine starter
hat, die durch die Bewegungserkennung ausgelöst wird, und Sie eine Dauer für die Triggerunterdrückung von fünf Minuten festlegen, wird die starter
nach dem Auslösen in den nächsten fünf Minuten nicht noch einmal ausgelöst. So wird verhindert, dass die Automatisierung schnell hintereinander ausgelöst wird.
Wenn Sie die Triggerunterdrückung auf Ihre Automatisierung anwenden möchten, verwenden Sie das Keyword suppressFor
mit einem java.time.Duration
-Argument, das angibt, wie lange gewartet werden soll, bevor auf nachfolgende Trigger reagiert wird.
Die Unterdrückungsdauer kann zwischen fünf Sekunden und 24 Stunden betragen.
automation {
sequential {
val starterNode = starter<_>(device, OccupancySensor, MotionDetection)
suppressFor(Duration.ofMinutes(30))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}
Die Unterdrückung von Triggern wirkt sich auf alle starters
in einer Automatisierung aus, die vor dem suppressFor
stehen.
Anzahl der Ausführungen begrenzen
Sie können die Anzahl der Ausführungen einer Automatisierung begrenzen.
Sie können beispielsweise eine einmalige Automatisierung einrichten, die den Staubsauger laufen lässt, während Sie den ganzen Tag nicht zu Hause sind.
Dazu müssen Sie das Metadatenfeld maxExecutionCount
der Automatisierung festlegen.
Das folgende Beispiel zeigt eine Automatisierung, die nur einmal ausgeführt werden kann:
automation { // The automation can only be executed once. maxExecutionCount = 1 // When the door lock state changes sequential { val doorLockEvent = starter<_>(doorLock, DoorLockDevice, LockOperationEvent) // if the door is unlocked condition() { expression = (doorLockEvent.lockOperationType equals LockOperationTypeEnum.Unlock) } // turn the light on action(light, DimmableLightDevice) { command(OnOff.on()) } } }
Die Automatisierung wird sofort gelöscht, nachdem sie zum letzten Mal ausgeführt wurde und maxExecutionCount
erreicht ist. Der Verlaufseintrag der Automatisierung bleibt auf dem Tab Google Home app (GHA) Aktivität erhalten, einschließlich der automation_id
.
Trait-Attribute in einer Aktion festlegen
So legen Sie den Wert eines Attributs für ein Merkmal fest:
- Erstellen Sie einen
update
-Knoten innerhalb einesaction
-Knotens und geben Sie das entsprechende Attribut als Argument für denupdate
-Knoten an:action(deviceReference, deviceType) { update(trait) { } }
- Verwenden Sie im
update
-Knoten für jedes zu ändernde Attribut eine Mutator-Funktion und übergeben Sie ihr den neuen Wert. So bilden Sie den Namen der Mutator-Funktion:- Attributnamen großschreiben
- Stellen Sie das Wort
set
voran.
defaultMoveRate
aktualisieren möchten, verwenden Sie eine Mutator-Funktion mit dem NamensetDefaultMoveRate
.
Ein update
-Knoten kann mehrere Mutator-Funktionen haben. Hier ist ein Beispiel, in dem zwei Attribute aktualisiert werden:
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}