تتيح لك عوامل التشغيل التحقّق من قيمة سمات السلوك مقابل قيم معيّنة، ومقارنتها ببعضها البعض، ودمج التعبيرات المستخدَمة في عُقد 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)
}
استخدام التواريخ مع الدالة between()
عند استخدام عامل التشغيل between()
، يمكنك تحديد نطاق من التواريخ:
val exp2 =
time.currentDate.between(
LocalDate.of(2025, Month.OCTOBER, 1),
LocalDate.of(2025, Month.DECEMBER, 15),
)
ومع ذلك، لا يقتصر الأمر على التواريخ الكاملة. تتيح لك لغة Automation DSL أيضًا التعبير عن نطاق من التواريخ بطرق متنوعة:
- استخدام السنة والشهر فقط:
val exp2 =
time.currentDate.yearMonth.between(
YearMonth.of(2024, Month.OCTOBER),
YearMonth.of(2026, Month.JANUARY),
)
- استخدام الشهر واليوم فقط:
val exp2 =
time.currentDate.monthDay.between(
MonthDay.of(Month.OCTOBER, 1),
MonthDay.of(Month.DECEMBER, 15),
)
- استخدام اليوم من الشهر فقط:
val exp2 = time.currentDate.day.between(1, 15)
يساوي
يتم تقييمها إلى 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
العوامل المنطقية
و
تجمع هذه الدالة بين تعبيرَين في تعبير 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))