DSL-Betreiberreferenz für Android

Mit Operatoren können Sie den Wert von Attributen für Merkmale 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 auch einen Datumsbereich auf verschiedene Arten angeben:

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

ist gleich

Wird mit 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 mit 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 mit 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 mit 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 Ausdruck wird zu true ausgewertet, 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 Wahrheitswert eines Ausdrucks.

Beispiel
Ausdruck Ergebnis
true false
false true

DSL-Beispiel

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

oder

Kombiniert zwei Ausdrücke zu 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))