Mit der Automation DSL können Sie Automatisierungen erstellen, die komplexer sind als die im DSL-Leitfaden – grundlegende Automatisierungen 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:
automation {
sequential {
starter<_>(...)
condition {...}
action {...}
action {...}
action {...}
}
}
Sequenziell mit mehreren parallelen Aktionen
Wenn Sie mehrere action
-Knoten in einen parallel
-Knoten einfügen, werden die Aktionen gleichzeitig ausgeführt.
automation {
sequential {
starter<_>(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
}
Wenn sich im sequential
-Knoten action
-Knoten nach dem parallel
-Knoten befinden, wird die Ausführung erst fortgesetzt, wenn alle Knoten im parallel
-Knoten ausgeführt wurden.
Verzögerungen
Mit dem Keyword delayFor
können Sie Pausen in Ihren Automatisierungen einfügen. Es nimmt das Argument java.time.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:
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
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 suppressFor
mit dem Argument java.time.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.
automation {
sequential {
val starterNode = starter<_>(device, OccupancySensor, MotionDetection)
suppressFor(Duration.ofMinutes(30))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}
Hinweis: Die Unterdrückung von Triggern wirkt sich auf alle starters
in einer Automatisierung aus, die vor der suppressFor
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 ist ein Beispiel, bei dem zwei Attribute aktualisiert werden:
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}