Android 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 Android 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:

automation {
  sequential {
    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.

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. So 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 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, 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:

  1. Erstellen Sie einen update-Knoten innerhalb eines action-Knotens 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:

action(device, Fan) {
  update(FanControl) {
    setPercentSetting(50u)
    setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
  }
}