演算子を使用すると、特徴属性の値を特定の値と照合したり、値同士を比較したり、condition
ノードで使用される式を組み合わせたりできます。
演算子は、次の import
ステートメントで使用できます。
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
比較演算子
次の間にある
式 1 の値が式 2 と式 3 の値の範囲内にある場合、true
に評価されます。式のランク付けは、データ型によって異なります。数値や文字列などの単純なデータ型は、Kotlin と同じ方法でランク付けされます。
式 1 | 式 2 | 式 3 | 結果 |
---|---|---|---|
6 |
1 |
3 |
false |
2 |
1 |
3 |
true |
DSL の例
val time = stateReader<_>(structure, Time)
condition() {
expression = time.currentTime
.between(
time.sunsetTime,
time.sunriseTime)
}
equals
式 1 が式 2 と等しい場合は true
と評価されます。
式 1 | 式 2 | 結果 |
---|---|---|
6 |
1 |
false |
2 |
2 |
true |
DSL の例
washer.operationalState equals STOPPED
greaterThan
式 1 が式 2 より大きい場合は true
と評価されます。
式 1 | 式 2 | 結果 |
---|---|---|
6 |
1 |
true |
1 |
6 |
false |
DSL の例
( blindsPosition.currentPositionLift greaterThan 0u )
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 の例
time.currentTime lessThan LocalTime.of(22,0,0,0)
lessThanOrEquals
式 1 が式 2 以下の場合、true
と評価されます。
式 1 | 式 2 | 結果 |
---|---|---|
8 |
6 |
false |
6 |
6 |
true |
1 |
6 |
true |
DSL の例
( starterNode.measuredValue lessThanOrEquals 25 )
notEquals
式 1 が式 2 と等しくない場合は、true
と評価されます。
式 1 | 式 2 | 結果 |
---|---|---|
6 |
1 |
true |
1 |
6 |
true |
2 |
2 |
false |
DSL の例
occupancyStateChange.occupied notEquals 0
算術演算子
追加
加算演算子(+
)。
DSL の例
var totalCount = 0
...
totalCount = totalCount + 1
減算
減算演算子(-
)。
DSL の例
var countdown = 10
...
countdown = countdown - 1
乗算
乗算演算子(*
)。
DSL の例
val millis = seconds * 1000
除算
除算演算子(/
)。
DSL の例
val rpm = revolutions / minutes
論理演算子
と
2 つの式を論理 AND 式で結合し、両方の式が true
の場合に true
と評価します。
式 1 | 式 2 | 結果 |
---|---|---|
false |
false |
false |
true |
false |
false |
false |
true |
false |
true |
true |
true |
DSL の例
((device.occupied notEquals 0) and
time.currentTime.between(time.sunriseTime, time.sunsetTime))
いない
式の論理値を否定します。
式 | 結果 |
---|---|
true |
false |
false |
true |
DSL の例
time.currentTime not (between(time.sunriseTime, time.sunsetTime))
または
2 つの式を論理 OR 式に結合します。
式 1 | 式 2 | 結果 |
---|---|---|
false |
false |
false |
true |
false |
true |
false |
true |
true |
DSL の例
(time.currentTime equals LocalTime.of(10,0,0,0)) or
(time.currentTime equals LocalTime.of(22,0,0,0))