Mit Operatoren können Sie den Wert von Trait-Attributen mit bestimmten Werten vergleichen, sie miteinander vergleichen und in condition-Knoten verwendete Ausdrücke kombinieren.
Operatoren werden über die folgenden import-Anweisungen zur Verfügung gestellt:
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 (einschließlich) liegt. Ausdrücke werden je nach Datentyp unterschiedlich eingestuft. Einfache Datentypen wie Zahlen und Strings werden wie in Kotlin eingestuft.
| 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 Automatisierungs-DSL kannst du auch einen Datumsbereich auf verschiedene Arten angeben:
- Nur Jahr und Monat:
val exp2 =
time.currentDate.yearMonth.between(
YearMonth.of(2024, Month.OCTOBER),
YearMonth.of(2026, Month.JANUARY),
)
- Nur Monat und Tag:
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 als 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 mit 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
ergibt true, 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 mit 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 als 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 zu einem logischen ODER-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))