DSL Otomatisasi dapat digunakan untuk membuat otomatisasi yang lebih kompleks daripada yang dibahas dalam panduan DSL - otomatisasi dasar di iOS.
Serial dengan beberapa tindakan
Otomatisasi dapat melakukan lebih dari satu hal. Misalnya, sebagai pengganti node
action
tunggal, Anda dapat memiliki beberapa node action
, yang berjalan dalam urutan
berurutan:
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
action {...}
action {...}
action {...}
}
Serial dengan beberapa tindakan paralel
Jika Anda menempatkan beberapa node action
di node parallel
, tindakan akan dijalankan
secara serentak.
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
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
metode delay(for:)
,
yang menggunakan
argumen 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:
typealias OnOffLightDevice = Matter.OnOffLightDeviceType
typealias OnOffTrait = Matter.OnOffTrait
sequential {
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
delay(for:.seconds(5))
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
delay(for:.seconds(5))
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
delay(for:.seconds(5))
action(light, OnOffLightDevice.self) { OnOffTrait.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, gunakan kata kunci suppress(for:)
dengan argumen Duration
yang mewakili waktu tunggu sebelum merespons pemicu berikutnya.
Durasi penekanan dapat berkisar dari lima detik hingga 24 jam.
typealias OccupancySensorDevice = Matter.OccupancySensorDeviceType
typealias OnOffLightDevice = Matter.OnOffLightDeviceType
typealias MotionDetectionTrait = Google.MotionDetectionTrait
typealias OnOffTrait = Matter.OnOffTrait
automation {
let starterNode = starter(device, OccupancySensorDevice.self, MotionDetectionTrait.self)
starterNode
suppress(for: .seconds(30 * 60) // 30 minutes
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
}
Perhatikan bahwa penekanan pemicu memengaruhi semua starters
dalam otomatisasi yang
mendahului Suppression
.
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
contoh saat dua atribut diperbarui:
typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait
action(fan, FanDeviceType.self) {
update(FanControlTrait.self) {
$0.setFanMode(.on)
}
}