DSL 运算符参考文档

借助运算符,您可以检查 trait 属性的值是否与特定值相符、将这些值进行比较,以及组合 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)
}

等于

如果表达式 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

逻辑运算符

将两个表达式组合到一个逻辑 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))

将两个表达式组合为一个逻辑 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))