Mit der Automation DSL können Sie komplexere Automatisierungen erstellen als die in DSL-Leitfaden – grundlegende Automatisierungen auf Androidbeschriebenen.
Sequenziell mit mehreren Aktionen
Eine Automatisierung kann mehr als eine Aufgabe ausführen. Anstelle des einzelnen Knotens action können Sie beispielsweise mehrere Knoten action haben, die in sequenzieller Reihenfolge ausgeführt werden:
automation {
sequential {
starter<_>(...)
condition {...}
action {...}
action {...}
action {...}
}
}
Sequenziell mit mehreren parallelen Aktionen
Wenn Sie mehrere Knoten action in einem Knoten parallel platzieren, werden die Aktionen gleichzeitig ausgeführt.
automation {
sequential {
starter<_>(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
}
Wenn sich im Knoten sequential Knoten action befinden, die nach dem Knoten parallel kommen, warten sie mit der Ausführung, bis alle Knoten im Knoten parallel ausgeführt wurden.
Verzögerungen
Mit dem
Schlüsselwort können Sie Pausen in Ihre Automatisierungen einfügen. Es verwendet ein
java.time.Duration
Argument, das angibt, wie lange die Ausführung pausiert werden soll, bevor sie fortgesetzt wird.delayFor Die Pausendauer kann zwischen fünf Sekunden und 24 Stunden liegen.
Beispiel: So schalten Sie eine Lampe viermal ein und aus, mit einer Pause von fünf Sekunden zwischen jedem Ein- und Ausschalten:
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()) }
}
Triggerunterdrückung
Die Triggerunterdrückung ist eine Funktion, mit der Ihre Automatisierung einen starter für einen bestimmten Zeitraum nach dem ersten Auslöseereignis ignorieren kann. Wenn die Automatisierung beispielsweise einen starter hat, der durch die Bewegungserkennung ausgelöst wird, und Sie eine Dauer für die Triggerunterdrückung von fünf Minuten angeben, wird der starter nach dem Auslösen in den nächsten fünf Minuten nicht noch einmal ausgelöst. So wird verhindert, dass die Automatisierung schnell wiederholt ausgelöst wird.
Wenn Sie die Triggerunterdrückung auf Ihre Automatisierung anwenden möchten, verwenden Sie das
suppressFor
Schlüsselwort 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 liegen.
automation {
sequential {
val starterNode = starter<_>(device, OccupancySensor, MotionDetection)
suppressFor(Duration.ofMinutes(30))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}
Die Triggerunterdrückung wirkt sich auf alle starters in einer Automatisierung aus, die vor 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 legen Sie das
maxExecutionCount
Metadatenfeld der Automatisierung fest.
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, sobald 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 Trait-Attributs fest:
- Erstellen Sie einen Knoten
updatein einem Knotenaction, und fügen Sie das entsprechende Trait als Argument für den Knotenupdateein:action(deviceReference, deviceType) { update(trait) { } } - Verwenden Sie im Knoten
updatefür jedes zu ändernde Attribut eine Mutator-Funktion und übergeben Sie ihr den neuen Wert. So bilden Sie den Namen der Mutator-Funktion:- Schreiben Sie den Namen des Attributs groß.
- Fügen Sie das Wort
setvoran.
defaultMoveRate, aktualisieren möchten, verwenden Sie die Mutator-FunktionsetDefaultMoveRate.
Ein Knoten update kann mehrere Mutator-Funktionen haben. Hier ein Beispiel, in dem zwei Attribute aktualisiert werden:
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}