DSL Otomatisasi dapat digunakan untuk membuat otomatisasi yang lebih kompleks daripada yang dibahas dalam panduan DSL - otomatisasi dasar di Android.
Berurutan dengan beberapa tindakan
Otomatisasi dapat melakukan lebih dari satu hal. Misalnya, sebagai pengganti satu node action, Anda dapat memiliki beberapa node action, yang berjalan secara berurutan:
automation {
sequential {
starter<_>(...)
condition {...}
action {...}
action {...}
action {...}
}
}
Berurutan dengan beberapa tindakan paralel
Jika Anda menempatkan beberapa node action dalam node parallel, tindakan akan dieksekusi secara bersamaan.
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 memperkenalkan jeda dalam otomatisasi menggunakan kata kunci
delayFor, yang memerlukan argumen
java.time.Duration
yang menunjukkan durasi jeda sebelum melanjutkan eksekusi. Durasi jeda dapat sesingkat lima detik atau selama 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
Pencegahan 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 pencegahan pemicu selama lima menit, saat starter dipicu, starter tidak akan dipicu lagi selama lima menit berikutnya. Hal ini mencegah otomatisasi dipicu berulang kali dengan cepat.
Untuk menerapkan pencegahan pemicu ke otomatisasi, gunakan kata kunci
suppressFor
dengan argumen
java.time.Duration
yang menunjukkan durasi tunggu sebelum merespons pemicu berikutnya.
Durasi pencegahan dapat sesingkat lima detik atau selama 24 jam.
automation {
sequential {
val starterNode = starter<_>(device, OccupancySensor, MotionDetection)
suppressFor(Duration.ofMinutes(30))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}
Perhatikan bahwa pencegahan pemicu memengaruhi semua starters dalam otomatisasi yang mendahului suppressFor.
Membatasi jumlah eksekusi
Anda dapat membatasi jumlah otomatisasi yang diizinkan untuk dijalankan.
Misalnya, Anda mungkin ingin menyiapkan otomatisasi satu kali yang menjalankan penyedot debu saat Anda tidak berada di rumah selama sehari.
Untuk melakukannya, tetapkan kolom metadata otomatisasi
maxExecutionCount.
Contoh berikut adalah otomatisasi yang hanya dapat dieksekusi satu kali:
automation { // The automation can only be executed once. maxExecutionCount = 1 // When the door lock state changes sequential { val doorLockEvent = starter<_>(doorLock, DoorLockDevice, LockOperationEvent) // if the door is unlocked condition() { expression = (doorLockEvent.lockOperationType equals LockOperationTypeEnum.Unlock) } // turn the light on action(light, DimmableLightDevice) { command(OnOff.on()) } } }
Otomatisasi akan segera dihapus setelah selesai dieksekusi untuk terakhir kalinya dan maxExecutionCount tercapai. Entri histori otomatisasi tetap berada
di tab Google Home app (GHA) Aktivitas, termasuk automation_id.
Menetapkan atribut karakteristik dalam tindakan
Untuk menetapkan nilai atribut karakteristik:
- Buat node
updatedalam 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 mutator, dan teruskan nilai baru. Untuk membentuk nama fungsi mutator:- Kapitalisasi nama atribut
- Awali dengan kata
set.
defaultMoveRate, Anda akan menggunakan fungsi mutator yang disebutsetDefaultMoveRate.
Perhatikan bahwa node update dapat memiliki beberapa fungsi mutator. Berikut contoh saat dua atribut diperbarui:
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}