Bạn có thể dùng DSL tự động hoá để tạo các quy trình tự động hoá phức tạp hơn so với 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 Android.
Tuần tự với nhiều hành động
Một thao tác tự động có thể làm nhiều việc. Ví dụ: thay vì một nút action
duy nhất, bạn có thể có nhiều nút action
chạy theo thứ tự tuần tự:
automation {
sequential {
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 thao tác sẽ thực thi đồng thời.
automation {
sequential {
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ẽ đợi 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 quy trình tự động hoá bằng cách sử dụng từ khoá delayFor
. Từ khoá này nhận một đối số java.time.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, mỗi lần cách nhau 5 giây:
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()) }
}
Chặn điều kiện kích hoạt
Tính năng ngăn chặn kích hoạt cho phép quy trình tự động hoá của bạn bỏ qua một 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 lượng ngăn chặn 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 ngăn quy trình tự động hoá kích hoạt liên tục và nhanh chóng.
Để áp dụng tính năng chặn kích hoạt cho quy trình tự động hoá, hãy sử dụng từ khoá suppressFor
với đối số java.time.Duration
biểu thị khoảng thời gian chờ trước khi phản hồi các sự kiện kích hoạt tiếp theo.
Thời gian chặn có thể ngắn nhất là 5 giây hoặc dài nhất là 24 giờ.
automation {
sequential {
val starterNode = starter<_>(device, OccupancySensor, MotionDetection)
suppressFor(Duration.ofMinutes(30))
action(light, OnOffLightDevice) { command(OnOff.toggle()) }
}
Xin lưu ý rằng tính năng chặn sự kiện kích hoạt sẽ ảnh hưởng đến tất cả starters
trong một quy trình tự động hoá diễn ra trước suppressFor
.
Giới hạn số lần thực thi
Bạn có thể giới hạn số lần được phép chạy một quy trình tự động hoá.
Ví dụ: bạn có thể muốn thiết lập một chương trình tự động hoá một lần để chạy máy hút bụi khi bạn vắng nhà cả ngày.
Để thực hiện việc này, hãy đặt trường siêu dữ liệu maxExecutionCount
của quy trình tự động hoá.
Ví dụ sau đây là một quy trình tự động hoá chỉ có thể thực thi một lần:
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()) } } }
Quy trình tự động hoá sẽ bị xoá ngay sau khi hoàn tất lần thực thi cuối cùng và đạt đến maxExecutionCount
. Mục nhập nhật ký của quy trình tự động hoá vẫn còn trong thẻ Google Home app (GHA) Hoạt động, bao gồm cả automation_id
.
Đặt thuộc tính đặc điểm trong một hành động
Cách đặt giá trị cho một thuộc tính đặc điểm:
- Tạo một nút
update
trong nútaction
, bao gồm cả đặc điểm liên quan làm đối số cho nútupdate
: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 dùng một hàm đột biến và truyền giá trị mới cho hàm đó. Cách đặt tên cho hàm sửa đổi:- Viết hoa tên thuộc tính
- Thêm từ
set
vào trước tên hàm.
defaultMoveRate
, bạn sẽ sử dụng một hàm sửa đổi có tên làsetDefaultMoveRate
.
Xin lưu ý rằng một nút update
có thể có nhiều hàm biến đổi. Sau đây là ví dụ về trường hợp cập nhật 2 thuộc tính:
action(device, Fan) {
update(FanControl) {
setPercentSetting(50u)
setRockSetting(FanControlCluster.RockBitmap.rockUpDown)
}
}