DSL-Betreiberreferenz für Android

Mit Operatoren können Sie den Wert von Attributen von Merkmalen mit bestimmten Werten vergleichen, sie miteinander vergleichen und Ausdrücke kombinieren, die in condition-Knoten verwendet werden.

Operatoren werden über die folgenden import-Anweisungen verfügbar gemacht:

import com.google.home.automation.and
import com.google.home.automation.between
import com.google.home.automation.contains
import com.google.home.automation.equals
import com.google.home.automation.greaterThan
import com.google.home.automation.greaterThanOrEquals
import com.google.home.automation.lessThan
import com.google.home.automation.not
import com.google.home.automation.notEquals
import com.google.home.automation.or

Vergleichsoperatoren

zwischen

Wird zu true ausgewertet, wenn der Wert von Ausdruck 1 zwischen dem von Ausdruck 2 und Ausdruck 3 liegt (einschließlich). Ausdrücke werden je nach Datentyp unterschiedlich eingestuft. Einfache Datentypen wie Zahlen und Strings werden genauso eingestuft wie in Kotlin.

Beispiel
Ausdruck 1 Ausdruck 2 Ausdruck 3 Ergebnis
6 1 3 false
2 1 3 true

DSL-Beispiel

val time = stateReader<_>(structure, Time)
condition() {
  expression = time.currentTime
     .between(
      time.sunsetTime,
      time.sunriseTime)
}

Datumsangaben mit between() verwenden

Wenn Sie den Operator between() verwenden, können Sie einen Datumsbereich angeben:

val exp2 =
  time.currentDate.between(
    LocalDate.of(2025, Month.OCTOBER, 1),
    LocalDate.of(2025, Month.DECEMBER, 15),
  )

Sie sind jedoch nicht auf vollständige Datumsangaben beschränkt. Mit der Automation DSL können Sie einen Datumsbereich auch auf verschiedene Arten ausdrücken:

  • Nur mit Jahr und Monat:
val exp2 =
  time.currentDate.yearMonth.between(
    YearMonth.of(2024, Month.OCTOBER),
    YearMonth.of(2026, Month.JANUARY),
  )
  • Nur mit Monat und Tag:
val exp2 =
  time.currentDate.monthDay.between(
    MonthDay.of(Month.OCTOBER, 1),
    MonthDay.of(Month.DECEMBER, 15),
  )
  • Nur mit dem Tag des Monats:
val exp2 = time.currentDate.day.between(1, 15)

ist gleich

Wird zu true ausgewertet, wenn Ausdruck 1 gleich Ausdruck 2 ist.

Beispiel
Ausdruck 1 Ausdruck 2 Ergebnis
6 1 false
2 2 true

DSL-Beispiel

washer.operationalState equals STOPPED

greaterThan

Wird zu true ausgewertet, wenn Ausdruck 1 größer als Ausdruck 2 ist.

Beispiel
Ausdruck 1 Ausdruck 2 Ergebnis
6 1 true
1 6 false

DSL-Beispiel

( blindsPosition.currentPositionLift greaterThan 0u )

greaterThanOrEquals

Wird zu true ausgewertet, wenn Ausdruck 1 größer oder gleich Ausdruck 2 ist.

Beispiel
Ausdruck 1 Ausdruck 2 Ergebnis
8 6 true
6 6 true
1 6 false

DSL-Beispiel

( starterNode.measuredValue greaterThanOrEquals 50 )

lessThan

Wird zu true ausgewertet, wenn Ausdruck 1 kleiner als Ausdruck 2 ist.

Beispiel
Ausdruck 1 Ausdruck 2 Ergebnis
6 1 false
1 6 true

DSL-Beispiel

time.currentTime lessThan LocalTime.of(22,0,0,0)

lessThanOrEquals

Wird zu true ausgewertet, wenn Ausdruck 1 kleiner oder gleich Ausdruck 2 ist.

Beispiel
Ausdruck 1 Ausdruck 2 Ergebnis
8 6 false
6 6 true
1 6 true

DSL-Beispiel

( starterNode.measuredValue lessThanOrEquals 25 )

notEquals

Wird zu true ausgewertet, wenn Ausdruck 1 nicht gleich Ausdruck 2 ist.

Beispiel
Ausdruck 1 Ausdruck 2 Ergebnis
6 1 true
1 6 true
2 2 false

DSL-Beispiel

occupancyStateChange.occupied notEquals 0

Arithmetische Operatoren

Hinzufügen

Der Additionsoperator ( + ).

DSL-Beispiel

var totalCount = 0
...
totalCount = totalCount + 1

Subtrahieren

Der Subtraktionsoperator ( - ).

DSL-Beispiel

var countdown = 10
...
countdown = countdown - 1

Multiplizieren

Der Multiplikationsoperator ( * ).

DSL-Beispiel

val millis = seconds * 1000

Dividieren

Der Divisionsoperator ( / ).

DSL-Beispiel

val rpm = revolutions / minutes

Logische Operatoren

und

Kombiniert zwei Ausdrücke in einem logischen AND-Ausdruck, der zu true ausgewertet wird, wenn beide Ausdrücke true sind.

Beispiel
Ausdruck 1 Ausdruck 2 Ergebnis
false false false
true false false
false true false
true true true

DSL-Beispiel

((device.occupied notEquals 0) and
   time.currentTime.between(time.sunriseTime, time.sunsetTime))

nicht

Negiert den logischen Wert eines Ausdrucks.

Beispiel
Ausdruck Ergebnis
true false
false true

DSL-Beispiel

time.currentTime not (between(time.sunriseTime, time.sunsetTime))

oder

Kombiniert zwei Ausdrücke in einem logischen OR-Ausdruck.

Beispiel
Ausdruck 1 Ausdruck 2 Ergebnis
false false false
true false true
false true true

DSL-Beispiel

(time.currentTime equals LocalTime.of(10,0,0,0)) or
  (time.currentTime equals LocalTime.of(22,0,0,0))