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 zur Verfügung gestellt:
import GoogleHomeSDK
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 Swift.
| Ausdruck 1 | Ausdruck 2 | Ausdruck 3 | Ergebnis |
|---|---|---|---|
6 |
1 |
3 |
false |
2 |
1 |
3 |
true |
DSL-Beispiel
let time = stateReader(structure, Google.TimeTrait)
condition {
time.currentTime
.between(
time.sunsetTime,
time.sunriseTime)
}
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
lightOnOffState.onOff.equals(true)
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
// 1555 = 15 degrees C ~ 60 degrees F
temperatureMeasurement.measuredValue.greaterThan(1555)
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
// 1555 = 15 degrees C ~ 60 degrees F
temperatureMeasurement.measuredValue.lessThan(1555)
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(50)
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
occupancySensorStarter.occupancy.notEquals(.occupied)
Arithmetische Operatoren
Infix-Operatoren wie +, -, * oder / werden nicht zum Erstellen von Automatisierungsausdrücken in Swift unterstützt. Verwenden Sie stattdessen die vom SDK bereitgestellten Operatoren wie
Plus oder
Minus.
Hinzufügen
Der Additionsoperator .plus( ).
DSL-Beispiel
var totalCount = 0
...
totalCount = totalCount.plus(1)
Subtrahieren
Der Subtraktionsoperator .minus( ).
DSL-Beispiel
var countdown = 10
...
countdown = countdown.minus(1)
Multiplizieren
Der Multiplikationsoperator .multiply( ).
DSL-Beispiel
val millis = seconds.multiply(1000)
Dividieren
Der Divisionsoperator .divide( ).
DSL-Beispiel
val rpm = revolutions.divide(minutes)
Logische Operatoren
und
Kombiniert zwei Ausdrücke in einem logischen AND-Ausdruck und 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
condition {
let exp1 = armState.armState
let exp2 = doorLockState.lockState
exp1.and(exp2)
}
nicht
Negiert den logischen Wert eines Ausdrucks.
| Ausdruck | Ergebnis |
|---|---|
true |
false |
false |
true |
DSL-Beispiel
condition {
let exp1 = armState.armState
let exp2 = doorLockState.lockState
exp1.and(exp2.not())
}
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
condition {
let exp1 = doorLockState.lockState.equals(.unlocked)
let exp2 = contactSensorState.stateValue.equals(false)
exp1.or(exp2)
}