DSL Otomatisasi dapat digunakan untuk membuat otomatisasi yang lebih kompleks daripada yang dibahas dalam panduan DSL - otomatisasi dasar.
Berurutan dengan beberapa tindakan
Otomatisasi dapat melakukan lebih dari satu hal. Misalnya, sebagai ganti node
action
tunggal, Anda dapat memiliki beberapa node action
, yang berjalan dalam urutan
berurutan:
automation {
sequential {
starter<_>(...)
condition {...}
action {...}
action {...}
action {...}
}
}
Serial dengan beberapa tindakan paralel
Jika Anda menempatkan beberapa node action
di node parallel
, tindakan akan dijalankan
secara serentak.
automation {
sequential {
starter<_>(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
}
Jika ada node action
di node sequential
yang muncul setelah node parallel
, node tersebut akan menunggu untuk dieksekusi hingga semua node dalam node parallel
selesai dieksekusi.
Keterlambatan
Anda dapat memasukkan jeda dalam otomatisasi menggunakan kata kunci delayFor
, yang menggunakan argumen java.time.Duration
yang mewakili berapa lama jeda sebelum melanjutkan eksekusi. Durasi
jeda dapat berlangsung selama lima detik atau hingga 24 jam.
Misalnya, untuk mengalihkan lampu empat kali dengan jeda lima detik di antara setiap pengalihan:
sequential {
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
delayFor(Duration.ofSeconds(5))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
delayFor(Duration.ofSeconds(5))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
delayFor(Duration.ofSeconds(5))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}
Pencegahan pemicu
Penekanan pemicu adalah kemampuan yang memungkinkan otomatisasi Anda mengabaikan
starter
selama jangka waktu tertentu setelah peristiwa pemicu awal. Misalnya, jika otomatisasi memiliki starter
yang dipicu oleh deteksi gerakan,
dan jika Anda menentukan durasi penekanan pemicu selama lima menit, saat
starter
dipicu, pemicu tidak akan dipicu lagi selama lima menit ke depan. Hal ini
mencegah otomatisasi memicu berulang kali dengan cepat.
Untuk menerapkan penekanan pemicu ke otomatisasi Anda, gunakan kata kunci suppressFor
dengan argumen
java.time.Duration
yang mewakili berapa lama waktu tunggu sebelum merespons pemicu berikutnya.
Durasi penekanan dapat berkisar dari lima detik hingga 24 jam.
automation {
sequential {
val starterNode = starter<_>(device, OccupancySensor, MotionDetection)
suppressFor(Duration.ofMinutes(30))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}
Perhatikan bahwa penekanan pemicu memengaruhi semua starters
dalam otomatisasi yang
mendahului suppressFor
.
Menetapkan atribut ciri dalam tindakan
Untuk menetapkan nilai atribut sifat:
- Buat node
update
dalam nodeaction
, termasuk karakteristik yang relevan sebagai argumen ke nodeupdate
:action(deviceReference, deviceType) { update(trait) { } }
- Dalam node
update
, untuk setiap atribut yang akan diubah, gunakan fungsi pengubah, dan teruskan nilai baru. Untuk membentuk nama fungsi pengubah:- Menulis nama atribut dengan huruf besar
- Beri awalan dengan kata
set
.
defaultMoveRate
, Anda akan menggunakan fungsi pengubah yang disebutsetDefaultMoveRate
.
Perhatikan bahwa node update
dapat memiliki beberapa fungsi pengubah. Berikut adalah
contoh saat dua atribut diperbarui:
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}