iOS DSL-Leitfaden für komplexe Automatisierungen

Mit der Automatisierungs-DSL können Sie komplexere automatisierte Abläufe erstellen als die, die im DSL-Leitfaden – grundlegende automatisierte Abläufe unter iOS beschrieben werden.

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 haben, die sequenziell 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 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 der Methode delay(for:) können Sie Pausen in Ihre Automatisierungen einfügen. Sie verwendet das Argument 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:

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

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 suppress(for:) mit einem 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.

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

Die Unterdrückung von Triggern wirkt sich auf alle starters in einer Automatisierung aus, die vor dem Suppression stehen.

Trait-Attribute in einer Aktion festlegen

So legen Sie den Wert eines Attributs für ein Merkmal fest:

  1. Erstellen Sie einen update-Knoten in einem action-Knoten und geben Sie das entsprechende Attribut als Argument für den update-Knoten an:
    action(deviceReference, deviceType) {
      update(trait) {
    
      }
    }
    
  2. 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:
    1. Attributnamen großschreiben
    2. Stellen Sie das Wort set voran.
    Wenn Sie beispielsweise ein Attribut mit dem Namen defaultMoveRate aktualisieren möchten, verwenden Sie eine Mutator-Funktion mit dem Namen setDefaultMoveRate.

Ein update-Knoten kann mehrere Mutator-Funktionen haben. Hier ist ein Beispiel, in dem zwei Attribute aktualisiert werden:

typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait

action(fan, FanDeviceType.self) {
  update(FanControlTrait.self) {
    $0.setFanMode(.on)
  }
}