演算子を使用すると、特徴属性の値を特定の値と照合したり、値同士を比較したり、condition
ノードで使用される式を結合したりできます。
演算子は、次の import
ステートメントで使用できます。
import GoogleHomeSDK
比較演算子
次の間にある
式 1 の値が式 2 と式 3 の値の間(両端の値を含む)の場合、true
に評価されます。式のランク付けは、データ型によって異なります。数値や文字列などの単純なデータ型は、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)
}
equals
式 1 が式 2 と等しい場合は true
と評価されます。
式 1 | 式 2 | 結果 |
---|---|---|
6 |
1 |
false |
2 |
2 |
true |
DSL の例
lightOnOffState.onOff.equals(true)
greaterThan
式 1 が式 2 より大きい場合は true
と評価されます。
式 1 | 式 2 | 結果 |
---|---|---|
6 |
1 |
true |
1 |
6 |
false |
DSL の例
// 1555 = 15 degrees C ~ 60 degrees F
temperatureMeasurement.measuredValue.greaterThan(1555)
greaterThanOrEquals
式 1 が式 2 以上の場合、true
と評価されます。
式 1 | 式 2 | 結果 |
---|---|---|
8 |
6 |
true |
6 |
6 |
true |
1 |
6 |
false |
DSL の例
starterNode.measuredValue.greaterThanOrEquals(50)
lessThan
式 1 が式 2 より小さい場合、true
と評価されます。
式 1 | 式 2 | 結果 |
---|---|---|
6 |
1 |
false |
1 |
6 |
true |
DSL の例
// 1555 = 15 degrees C ~ 60 degrees F
temperatureMeasurement.measuredValue.lessThan(1555)
lessThanOrEquals
式 1 が式 2 以下の場合、true
と評価されます。
式 1 | 式 2 | 結果 |
---|---|---|
8 |
6 |
false |
6 |
6 |
true |
1 |
6 |
true |
DSL の例
starterNode.measuredValue.lessThanOrEquals(50)
notEquals
式 1 が式 2 と等しくない場合は、true
と評価されます。
式 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)
論理演算子
と
2 つの式を論理 AND 式で結合し、両方の式が 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())
}
または
2 つの式を論理 OR 式に結合します。
式 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)
}