Đây là thông tin tổng quan về các khái niệm cơ bản của DSL Tự động hoá trên Android.
Thành phần tự động hoá
Một quy trình tự động hoá bao gồm các thành phần cơ bản sau đây, thường được đánh giá theo thứ tự này:
- Điều kiện khởi động – Xác định các điều kiện ban đầu kích hoạt quy trình tự động hoá, chẳng hạn như thay đổi về đặc điểm. Quy trình tự động hoá phải có một điều kiện khởi động.
- Điều kiện – Mọi ràng buộc bổ sung cần đánh giá sau khi một quy trình tự động hoá được kích hoạt. Biểu thức trong Điều kiện phải có giá trị là
true
để các hành động của quy trình tự động hoá có thể tiếp tục. - Hành động – Các lệnh hoặc nội dung cập nhật trạng thái được thực hiện khi tất cả điều kiện đã được đáp ứng.
Ví dụ: có thể bạn có một quy trình tự động làm mờ đèn trong phòng khi TV trong phòng đó bật trong khoảng thời gian từ hoàng hôn đến bình minh. Trong ví dụ này:
- Starter – TV đã được bật, đây là một thay đổi về trạng thái trên đặc điểm TV.
- Điều kiện – Hệ thống sẽ đánh giá thời gian hiện tại của nhà mà TV đang ở.
- Hành động – Đèn trong cùng phòng với TV sẽ mờ đi.
Chế độ tự động hoá sẽ được kích hoạt khi TV trong phòng bật, nhưng chế độ tự động hoá chỉ thực hiện nếu điều kiện "thời gian nằm trong khoảng từ hoàng hôn đến bình minh" được đáp ứng.
Ngoài cấu trúc cơ bản, các quy trình tự động hoá trong Home API cũng chứa siêu dữ liệu, chẳng hạn như name và description. Bạn có thể dùng siêu dữ liệu này để xác định các quy trình tự động hoá cho nhà phát triển và người dùng.
Nút
Trong Home API, cấu trúc logic của một quy trình tự động hoá bao gồm các nút. Các nút là những đơn vị trừu tượng, có thể sử dụng lại, đại diện cho hành vi của thực thể hoặc các luồng thực thi. Mỗi nút có thể có các biến đầu vào, cũng như các biến đầu ra mà các nút khác có thể sử dụng.
Nút | Kiểu Nút | Triển khai Kotlin | Mô tả |
---|---|---|---|
Starter | Hành vi |
StarterNodeDsl
|
Bắt đầu một quy trình tự động hoá khi trạng thái của một đặc điểm (bất kỳ thuộc tính nào) thay đổi. |
StateReader | Hành vi |
StateReaderNodeDsl
|
Đọc một thuộc tính đặc điểm và cho phép bạn ghi lại giá trị của thuộc tính đó để sử dụng trong các nút điều kiện. |
Hành động | Hành vi |
ActionNodeDsl
|
Gọi(các) lệnh đặc điểm. |
Tuần tự | Luồng thực thi |
SequentialFlow
|
Thực thi các nút hành động lồng nhau theo trình tự. Đây là hành vi thực thi mặc định. |
Song song | Luồng thực thi |
ParallelFlow
|
Thực thi các nút hành động lồng nhau song song. |
Tình trạng | Luồng thực thi |
ConditionNodeDsl
|
Thay đổi có điều kiện luồng thực thi dựa trên việc đánh giá các biểu thức logic. Bạn có thể liên kết các điều kiện với một điều kiện khởi động (điều kiện cụ thể của điều kiện khởi động) hoặc là điều kiện chung (áp dụng cho tất cả điều kiện khởi động). |
Chọn | Luồng thực thi |
SelectFlow
|
Cho phép nhiều điều kiện khởi động kích hoạt một quy trình tự động hoá. |
Biểu thức | Giá trị |
Expression
|
Có thể là giá trị của thuộc tính đặc điểm, hằng số hoặc giá trị cố định và phải đánh giá thành một danh sách, số, giá trị boolean hoặc chuỗi. |
Nút hành vi
Các nút như điều kiện khởi động và hành động là các nút hành vi. Trình kích hoạt sẽ kích hoạt một quy trình tự động hoá dựa trên các thay đổi về thuộc tính của thiết bị. Các thao tác sẽ phát lệnh cho thiết bị hoặc cập nhật các thuộc tính.
Các nút hành vi thường được liên kết với các đặc điểm của thiết bị và trạng thái đặc điểm đầu ra để dùng làm dữ liệu đầu vào trong các nút khác.
Nút luồng thực thi
Một số nút biểu thị các luồng thực thi, chẳng hạn như tuần tự và song song. Mỗi nút này chứa các nút hành vi xác định quy trình tự động hoá.
Ví dụ: một quy trình tuần tự có thể chứa các nút thực thi theo thứ tự tuần tự. Thông thường, đây sẽ là điểm bắt đầu, điều kiện và hành động.
Một luồng song song có thể có nhiều nút hành động thực thi cùng một lúc, chẳng hạn như bật nhiều đèn cùng một lúc. Các nút theo một luồng song song sẽ không thực thi cho đến khi tất cả các nhánh của luồng song song kết thúc.
Một loại luồng thực thi khác là luồng điều kiện, có thể thay đổi luồng thực thi dựa trên việc đánh giá một biểu thức.
Ví dụ: có thể bạn có một quy trình tự động hoá thực hiện một hành động dựa trên việc có phải là ban đêm hay không. Nút điều kiện kiểm tra thời gian trong ngày, sau đó đi theo đường dẫn thực thi thích hợp dựa trên kết quả đánh giá đó.
Luồng chọn rất hữu ích khi bạn muốn có nhiều hơn một điểm bắt đầu có thể kích hoạt quy trình tự động hoá. Khi bạn đặt hai hoặc nhiều điều kiện khởi động trong một quy trình select
, bất kỳ điều kiện khởi động nào trong số đó đều có thể kích hoạt quy trình tự động hoá.
Ví dụ: bạn có thể viết một quy trình tự động hoá để hạ rèm xuống khi mặt trời lặn, nếu nhiệt độ tăng lên trên một ngưỡng nhất định hoặc nếu độ sáng vượt quá một ngưỡng. Ba chương trình khởi động riêng biệt sẽ xử lý từng trường hợp trong số này và cả ba chương trình sẽ được gói trong một quy trình select
.
Luồng lồng nhau
Trong các quy trình tự động hoá phức tạp, các nút luồng thực thi cũng có thể được lồng vào nhau. Ví dụ: bạn có thể có một luồng tuần tự thực thi một luồng song song.
Bạn có thể lồng và kết hợp các nút DSL theo nhiều cách để đáp ứng nhu cầu cụ thể của mình, theo các ràng buộc được nêu trong bảng sau. Cột Trình tạo liên kết đến tài liệu về trình tạo an toàn kiểu của Kotlin, trong đó nêu chi tiết những gì được phép sử dụng trong từng loại nút.
Nút | Có thể chứa loại nút và dữ liệu sau | Phải thuộc một trong các loại nút sau |
---|---|---|
Starter | Cụm từ | Chọn, Tuần tự |
ManualStarter | Chọn, Tuần tự | |
StateReader | Biểu thức (thường bao gồm một giá trị thuộc tính đặc điểm) | Hành động, Điều kiện |
Hành động | Lệnh, Thực thể, Biểu thức | Song song, Chọn, Tuần tự |
Tuần tự | Song song, Chọn, Tuần tự | |
Song song | Hành động | Tuần tự |
Tình trạng | Cụm từ | Song song, Tuần tự |
Chọn | Điều kiện, Tuần tự, Trình kích hoạt, ManualStarter | Tuần tự và phải là nút đầu tiên trong luồng |
DSL tự động hoá
Trong Home API, các quy trình tự động hoá được xác định bằng cách sử dụng Automation DSL (Ngôn ngữ dành riêng cho miền). Automation DSL được triển khai dưới dạng Kotlin DSL (ngôn ngữ dành riêng cho miền), sử dụng các trình tạo an toàn về kiểu của Kotlin và được thiết kế đặc biệt để xác định các mẫu tự động hoá.
Khi một quy trình tự động hoá được biên dịch, các trình tạo an toàn về kiểu Kotlin sẽ tạo ra các lớp dữ liệu Kotlin, sau đó được chuyển đổi tuần tự thành JSON của vùng đệm giao thức. JSON này được dùng để thực hiện các lệnh gọi đến Dịch vụ tự động hoá của Google.
DSL tự động hoá giúp đơn giản hoá và hợp lý hoá quy trình tạo các quy tắc tự động hoá. Nền tảng này sử dụng cùng một mô hình dữ liệu gồm các đặc điểm tiêu chuẩn Matter và đặc điểm smart home có trong Device API.
Automation DSL cũng xác định logic của một quy trình tự động hoá theo các loại thiết bị trừu tượng, thay vì các phiên bản thiết bị cụ thể nằm trong nhà của người dùng. Thao tác này cho phép nhà phát triển cung cấp các tham số đầu vào có thể được dùng trong thời gian chạy để chỉ định các phiên bản thiết bị thực tế, cũng như các giá trị tham số quan trọng khác.
Cú pháp DSL tương tự như cú pháp của Kotlin và cũng an toàn về kiểu, nhưng một quy trình tự động hoá được viết bằng Automation DSL sẽ đơn giản và ngắn gọn hơn so với cùng một quy trình tự động hoá được viết bằng Kotlin thuần tuý.
Ví dụ:
Sau đây là một ví dụ về quy trình tự động hoá bật một thiết bị, được viết bằng Automation DSL:
val automation = automation {
name = "MyFirstAutomation"
description = "If light1 is on, turn on light2."
isActive = true
sequential {
val onOffTrait = starter<_>(device1, OnOffLightDevice, OnOff)
condition() { expression = onOffTrait.onOff equals true }
action(device2, OnOffLightDevice) { command(OnOff.on()) }
}
}
Quy trình tự động hoá này rất cơ bản: khi device1
, một đèn sáng (thuộc tính onOff
thay đổi thành true
), sau đó gửi lệnh on()
để bật device2
.
Quy trình tự động hoá này sử dụng một nút sequential
, cho biết rằng các nút của quy trình sẽ chạy theo thứ tự tuần tự.
Trong nút sequential
là các nút hành vi như starter
, condition
và action
. Đầu ra của nút starter
được chỉ định cho một biến để sử dụng trong nút condition
.