Bạn có thể sử dụng DSL tự động hoá để tạo các quy trình tự động hoá phức tạp hơn những quy trình được thảo luận trong Hướng dẫn về DSL – quy trình tự động hoá cơ bản trên iOS.
Tuần tự với nhiều hành động
Một quy trình tự động hoá có thể thực hiện nhiều việc. Ví dụ: thay vì một nút action, bạn có thể có nhiều nút action chạy theo thứ tự tuần tự:
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
action {...}
action {...}
action {...}
}
Tuần tự với nhiều hành động song song
Nếu bạn đặt nhiều nút action trong một nút parallel, các hành động sẽ thực thi đồng thời.
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
Nếu có các nút action trong nút sequential xuất hiện sau nút parallel, thì các nút này sẽ chờ thực thi cho đến khi tất cả các nút trong nút parallel thực thi xong.
Các hoạt động gây trở ngại giao thông
Bạn có thể tạm dừng trong quy trình tự động hoá bằng phương thức
delay(for:).
Phương thức này nhận một đối số
Duration
biểu thị khoảng thời gian tạm dừng trước khi tiếp tục thực thi. Thời gian tạm dừng có thể ngắn nhất là 5 giây hoặc dài nhất là 24 giờ.
Ví dụ: để bật/tắt đèn 4 lần với thời gian tạm dừng 5 giây giữa mỗi lần bật/tắt:
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() }
}
Ngăn chặn trình kích hoạt
Ngăn chặn trình kích hoạt là một khả năng cho phép quy trình tự động hoá bỏ qua starter trong một khoảng thời gian cụ thể sau sự kiện kích hoạt ban đầu. Ví dụ: nếu quy trình tự động hoá có starter được kích hoạt bằng tính năng phát hiện chuyển động và nếu bạn chỉ định thời gian ngăn chặn trình kích hoạt là 5 phút, thì khi starter kích hoạt, quy trình này sẽ không kích hoạt lại trong 5 phút tiếp theo. Điều này giúp ngăn quy trình tự động hoá kích hoạt nhanh chóng nhiều lần.
Để áp dụng tính năng ngăn chặn trình kích hoạt cho quy trình tự động hoá, hãy sử dụng từ khoá
suppress(for:)
với đối số
Duration
biểu thị khoảng thời gian chờ trước khi phản hồi các trình kích hoạt tiếp theo.
Thời gian ngăn chặn có thể ngắn nhất là 5 giây hoặc dài nhất là 24 giờ.
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() }
}
Xin lưu ý rằng tính năng ngăn chặn trình kích hoạt ảnh hưởng đến tất cả starters trong một quy trình tự động hoá trước Suppression.
Thiết lập thuộc tính đặc điểm trong một hành động
Cách thiết lập giá trị của thuộc tính đặc điểm:
- Tạo nút
updatetrong nútaction, bao gồm đặc điểm có liên quan làm đối số cho nútupdatenode:action(deviceReference, deviceType) { update(trait) { } } - Trong nút
update, đối với mỗi thuộc tính cần sửa đổi, hãy sử dụng hàm biến đổi và truyền giá trị mới cho hàm đó. Cách tạo tên của hàm biến đổi:- Viết hoa tên của thuộc tính
- Thêm tiền tố
setvào tên đó.
defaultMoveRate, bạn sẽ sử dụng hàm biến đổi có tên làsetDefaultMoveRate.
Xin lưu ý rằng nút update có thể có nhiều hàm biến đổi. Dưới đây là ví dụ về trường hợp 2 thuộc tính được cập nhật:
typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait
action(fan, FanDeviceType.self) {
update(FanControlTrait.self) {
$0.setFanMode(.on)
}
}