Android DSL-Leitfaden für komplexe Automatisierungen

Mit der Automation DSL können Sie komplexere Automatisierungen erstellen als die in DSL-Leitfaden – grundlegende Automatisierungen auf Androidbeschriebenen.

Sequenziell mit mehreren Aktionen

Sequenziell mit mehreren Aktionen

Eine Automatisierung kann mehr als eine Aufgabe ausführen. Anstelle des einzelnen Knotens action können Sie beispielsweise mehrere Knoten action haben, die in sequenzieller Reihenfolge ausgeführt werden:

automation {
  sequential {
    starter<_>(...)
    condition {...}
    action {...}
    action {...}
    action {...}
    }
}

Sequenziell mit mehreren parallelen Aktionen

Sequenziell mit mehreren parallelen Aktionen

Wenn Sie mehrere Knoten action in einem Knoten parallel platzieren, werden die Aktionen gleichzeitig ausgeführt.

automation {
  sequential {
    starter<_>(...)
    condition {...}
    parallel {
      action {...}
      action {...}
      action {...}
    }
  }
}

Wenn sich im Knoten sequential Knoten action befinden, die nach dem Knoten parallel kommen, warten sie mit der Ausführung, bis alle Knoten im Knoten parallel ausgeführt wurden.

Verzögerungen

Mit dem Schlüsselwort können Sie Pausen in Ihre Automatisierungen einfügen. Es verwendet ein java.time.Duration Argument, das angibt, wie lange die Ausführung pausiert werden soll, bevor sie fortgesetzt wird.delayFor Die Pausendauer kann zwischen fünf Sekunden und 24 Stunden liegen.

Beispiel: So schalten Sie eine Lampe viermal ein und aus, mit einer Pause von fünf Sekunden zwischen jedem Ein- und Ausschalten:

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

Die Triggerunterdrückung ist eine Funktion, mit der Ihre Automatisierung einen starter für einen bestimmten Zeitraum nach dem ersten Auslöseereignis ignorieren kann. Wenn die Automatisierung beispielsweise einen starter hat, der durch die Bewegungserkennung ausgelöst wird, und Sie eine Dauer für die Triggerunterdrückung von fünf Minuten angeben, wird der starter nach dem Auslösen in den nächsten fünf Minuten nicht noch einmal ausgelöst. So wird verhindert, dass die Automatisierung schnell wiederholt ausgelöst wird.

Wenn Sie die Triggerunterdrückung auf Ihre Automatisierung anwenden möchten, verwenden Sie das suppressFor Schlüsselwort 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 liegen.

automation {
  sequential {
    val starterNode = starter<_>(device, OccupancySensor, MotionDetection)
    suppressFor(Duration.ofMinutes(30))
    action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}

Die Triggerunterdrückung wirkt sich auf alle starters in einer Automatisierung aus, die vor 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 legen Sie das maxExecutionCount Metadatenfeld der Automatisierung fest. 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, sobald 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 Trait-Attributs fest:

  1. Erstellen Sie einen Knoten update in einem Knoten action, und fügen Sie das entsprechende Trait als Argument für den Knoten update ein:
    action(deviceReference, deviceType) {
      update(trait) {
    
      }
    }
  2. Verwenden Sie im Knoten update 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. Schreiben Sie den Namen des Attributs groß.
    2. Fügen Sie das Wort set voran.
    Wenn Sie beispielsweise ein Attribut mit dem Namen defaultMoveRate, aktualisieren möchten, verwenden Sie die Mutator-Funktion setDefaultMoveRate.

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

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