การอ้างอิงผู้ให้บริการ DSL

โอเปอเรเตอร์ช่วยให้คุณตรวจสอบค่าของแอตทริบิวต์ลักษณะเทียบกับค่าที่เฉพาะเจาะจง เปรียบเทียบค่าเหล่านั้น และรวมนิพจน์ที่ใช้ในโหนด 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

โอเปอเรเตอร์การเปรียบเทียบ

ระหว่าง

ประเมินเป็น true เมื่อค่าของนิพจน์ 1 อยู่ระหว่างค่าของนิพจน์ 2 และนิพจน์ 3 (รวม) นิพจน์จะได้รับการจัดอันดับแตกต่างกันไปตามประเภทข้อมูล ประเภทข้อมูลพื้นฐาน เช่น ตัวเลขและสตริง จะจัดอันดับในลักษณะเดียวกับใน 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)
}

เท่ากับ

ประเมินเป็น true เมื่อนิพจน์ 1 เท่ากับนิพจน์ 2

ตัวอย่าง
นิพจน์ 1 นิพจน์ 2 ผลลัพธ์
6 1 false
2 2 true

ตัวอย่าง DSL

washer.operationalState equals STOPPED

greaterThan

ประเมินเป็น true เมื่อนิพจน์ 1 มากกว่านิพจน์ 2

ตัวอย่าง
นิพจน์ 1 นิพจน์ 2 ผลลัพธ์
6 1 true
1 6 false

ตัวอย่าง DSL

( blindsPosition.currentPositionLift greaterThan 0u )

greaterThanOrEquals

ประเมินเป็น true เมื่อนิพจน์ 1 มากกว่าหรือเท่ากับนิพจน์ 2

ตัวอย่าง
นิพจน์ 1 นิพจน์ 2 ผลลัพธ์
8 6 true
6 6 true
1 6 false

ตัวอย่าง DSL

( starterNode.measuredValue greaterThanOrEquals 50 )

lessThan

ประเมินเป็น true เมื่อนิพจน์ 1 น้อยกว่านิพจน์ 2

ตัวอย่าง
นิพจน์ 1 นิพจน์ 2 ผลลัพธ์
6 1 false
1 6 true

ตัวอย่าง DSL

time.currentTime lessThan LocalTime.of(22,0,0,0)

lessThanOrEquals

ประเมินเป็น true เมื่อนิพจน์ 1 น้อยกว่าหรือเท่ากับนิพจน์ 2

ตัวอย่าง
นิพจน์ 1 นิพจน์ 2 ผลลัพธ์
8 6 false
6 6 true
1 6 true

ตัวอย่าง DSL

( starterNode.measuredValue lessThanOrEquals 25 )

notEquals

ประเมินเป็น true เมื่อนิพจน์ 1 ไม่เท่ากับนิพจน์ 2

ตัวอย่าง
นิพจน์ 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 รายการในนิพจน์เชิงตรรกะ & ซึ่งจะประเมินเป็น true เมื่อนิพจน์ทั้ง 2 รายการเป็น 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))