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