Mit der Automatisierungs-DSL können Sie komplexere automatisierte Abläufe erstellen als die, die im DSL-Leitfaden – grundlegende automatisierte Abläufe auf 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. Dadurch 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 ist 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 in einemaction-Knoten 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
setvoran.
defaultMoveRateaktualisieren 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)
}
}