iOS DSL-Leitfaden für komplexe Automatisierungen

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

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

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:

  1. Erstellen Sie einen update-Knoten innerhalb eines action-Knotens und geben Sie das entsprechende Merkmal als Argument für den update-Knoten an:
    action(deviceReference, deviceType) {
      update(trait) {
    
      }
    }
    
  2. 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:
    1. Geben Sie den Namen des Attributs in Großbuchstaben ein.
    2. Stellen Sie ihr das Wort set voran.
    Wenn Sie beispielsweise ein Attribut namens defaultMoveRate aktualisieren möchten, verwenden Sie eine Mutatorfunktion namens setDefaultMoveRate.

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)
  }
}