Операторы позволяют вам сверять значения атрибутов признаков с конкретными значениями, сравнивать их друг с другом и комбинировать выражения, используемые в узлах condition
.
Операторы доступны через следующие операторы import
:
import GoogleHomeSDK
Операторы сравнения
между
Возвращает значение true
, если значение выражения 1 находится между значениями выражения 2 и выражения 3 (включительно). Выражения ранжируются по-разному в зависимости от типа данных. Простые типы данных, такие как числа и строки, ранжируются так же, как и в Swift.
Выражение 1 | Выражение 2 | Выражение 3 | Результат |
---|---|---|---|
6 | 1 | 3 | false |
2 | 1 | 3 | true |
Пример DSL
let time = stateReader(structure, Google.TimeTrait)
condition {
time.currentTime
.between(
time.sunsetTime,
time.sunriseTime)
}
равно
Возвращает значение true
, когда Выражение 1 равно Выражению 2.
Выражение 1 | Выражение 2 | Результат |
---|---|---|
6 | 1 | false |
2 | 2 | true |
Пример DSL
lightOnOffState.onOff.equals(true)
больше, чем
Возвращает значение true
, если выражение 1 больше, чем выражение 2.
Выражение 1 | Выражение 2 | Результат |
---|---|---|
6 | 1 | true |
1 | 6 | false |
Пример DSL
// 1555 = 15 degrees C ~ 60 degrees F
temperatureMeasurement.measuredValue.greaterThan(1555)
большечеморравс
Возвращает значение true
, если выражение 1 больше или равно выражению 2.
Выражение 1 | Выражение 2 | Результат |
---|---|---|
8 | 6 | true |
6 | 6 | true |
1 | 6 | false |
Пример DSL
starterNode.measuredValue.greaterThanOrEquals(50)
меньше, чем
принимает значение true
, если выражение 1 меньше выражения 2.
Выражение 1 | Выражение 2 | Результат |
---|---|---|
6 | 1 | false |
1 | 6 | true |
Пример DSL
// 1555 = 15 degrees C ~ 60 degrees F
temperatureMeasurement.measuredValue.lessThan(1555)
МеньшеТханОРевалс
Возвращает значение true
, если выражение 1 меньше или равно выражению 2.
Выражение 1 | Выражение 2 | Результат |
---|---|---|
8 | 6 | false |
6 | 6 | true |
1 | 6 | true |
Пример DSL
starterNode.measuredValue.lessThanOrEquals(50)
notEquals
Возвращает значение true
, если выражение 1 не равно выражению 2.
Выражение 1 | Выражение 2 | Результат |
---|---|---|
6 | 1 | true |
1 | 6 | true |
2 | 2 | false |
Пример DSL
occupancySensorStarter.occupancy.notEquals(.occupied)
Арифметические операторы
Инфиксные операторы, такие как +, -, * или /, не поддерживаются для создания выражений автоматизации в Swift. Вместо этого используйте операторы, предоставляемые SDK, например Plus
или Minus
.
Добавлять
Оператор сложения .plus( )
.
Пример DSL
var totalCount = 0
...
totalCount = totalCount.plus(1)
Вычесть
Оператор вычитания .minus( )
.
Пример DSL
var countdown = 10
...
countdown = countdown.minus(1)
Умножить
Оператор умножения .multiply( )
.
Пример DSL
val millis = seconds.multiply(1000)
Разделять
Оператор деления .divide( )
.
Пример DSL
val rpm = revolutions.divide(minutes)
Логические операторы
и
Объединяет два выражения в логическое выражение И, вычисляя значение true
, если оба выражения имеют true
.
Выражение 1 | Выражение 2 | Результат |
---|---|---|
false | false | false |
true | false | false |
false | true | false |
true | true | true |
Пример DSL
condition {
let exp1 = armState.armState
let exp2 = doorLockState.lockState
exp1.and(exp2)
}
нет
Отменяет логическое значение выражения.
Выражение | Результат |
---|---|
true | false |
false | true |
Пример DSL
condition {
let exp1 = armState.armState
let exp2 = doorLockState.lockState
exp1.and(exp2.not())
}
или
Объединяет два выражения в логическое выражение ИЛИ.
Выражение 1 | Выражение 2 | Результат |
---|---|---|
false | false | false |
true | false | true |
false | true | true |
Пример DSL
condition {
let exp1 = doorLockState.lockState.equals(.unlocked)
let exp2 = contactSensorState.stateValue.equals(false)
exp1.or(exp2)
}