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.
| 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.
| 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.
| 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.
| 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.
| 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.
| 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.
| 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.
| 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.
| 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.
| 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))