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, alih-alih satu node
action
, Anda dapat memiliki beberapa node action
, yang berjalan dalam urutan
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 menggunakan argumen
java.time.Duration
yang menunjukkan berapa lama jeda sebelum melanjutkan eksekusi. Durasi jeda dapat berkisar dari lima detik 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()) }
}
Peredaman 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, maka saat starter
dipicu, starter
tidak akan dipicu lagi selama lima menit berikutnya. Hal ini
mencegah otomatisasi dipicu berulang kali dengan cepat.
Untuk menerapkan penekanan pemicu ke otomatisasi, gunakan kata kunci
suppressFor
dengan argumen
java.time.Duration
yang menunjukkan berapa lama harus menunggu 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
.
Membatasi jumlah eksekusi
Anda dapat membatasi jumlah waktu yang diizinkan untuk menjalankan otomatisasi.
Misalnya, Anda mungkin ingin menyiapkan otomatisasi sekali jalan yang menjalankan penyedot debu saat Anda tidak berada di rumah selama seharian.
Untuk melakukannya, tetapkan kolom metadata
maxExecutionCount
otomatisasi.
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 langsung dihapus setelah selesai dieksekusi untuk terakhir
kalinya dan maxExecutionCount
tercapai. Entri histori otomatisasi tetap ada di tab Google Home app (GHA) Aktivitas, termasuk automation_id
.
Menetapkan atribut sifat dalam tindakan
Untuk menetapkan nilai atribut karakteristik:
- Buat node
update
dalam nodeaction
, termasuk trait 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:- Menggunakan huruf kapital pada 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)
}
}