ภาพรวมของแนวคิดพื้นฐานของ Automation DSL ใน Android
คอมโพเนนต์การทำงานอัตโนมัติ
การทำงานอัตโนมัติประกอบด้วยคอมโพเนนต์พื้นฐานต่อไปนี้ ซึ่งโดยทั่วไปจะได้รับการประเมินตามลำดับนี้
- เงื่อนไขเริ่มต้น \- กำหนดเงื่อนไขเริ่มต้นที่จะเปิดใช้งานการทำงานอัตโนมัติ เช่น การเปลี่ยนแปลงลักษณะ การทำงานอัตโนมัติต้องมีเงื่อนไขเริ่มต้น
- เงื่อนไข \- ข้อจำกัดเพิ่มเติมที่จะประเมินหลังจากเปิดใช้งานการทำงานอัตโนมัติ นิพจน์ในเงื่อนไขต้องประเมินเป็น
trueเพื่อให้การดำเนินการของการทำงานอัตโนมัติดำเนินต่อไปได้ - การดำเนินการ \- คำสั่งหรือการอัปเดตสถานะที่จะดำเนินการเมื่อเป็นไปตามเงื่อนไขทั้งหมด
ตัวอย่างเช่น คุณอาจมีการทำงานอัตโนมัติที่หรี่ไฟในห้องเมื่อเปิดทีวีในห้องนั้นระหว่างพระอาทิตย์ตกถึงพระอาทิตย์ขึ้น ในตัวอย่างนี้
- เงื่อนไขเริ่มต้น \- มีการเปิดทีวี ซึ่งเป็นการเปลี่ยนแปลงสถานะในลักษณะของทีวี
- เงื่อนไข— ระบบจะประเมินเวลาปัจจุบันของบ้านที่ทีวีตั้งอยู่
- การดำเนินการ \- ไฟในห้องเดียวกับทีวีจะหรี่ลง
การทำงานอัตโนมัติจะเปิดใช้งานเมื่อเปิดทีวีในห้อง แต่จะดำเนินการก็ต่อเมื่อเป็นไปตามเงื่อนไข "เวลาอยู่ระหว่างพระอาทิตย์ตกถึงพระอาทิตย์ขึ้น"
นอกเหนือจากโครงสร้างพื้นฐานแล้ว การทำงานอัตโนมัติใน Home API ยังมี ข้อมูลเมตา เช่น ชื่อ และ คำอธิบาย ซึ่งนักพัฒนาแอปและผู้ใช้สามารถใช้เพื่อระบุ การทำงานอัตโนมัติได้
โหนด
ใน Home API โครงสร้างเชิงตรรกะของการทำงานอัตโนมัติประกอบด้วยโหนด โหนดเป็นหน่วยนามธรรมที่นำกลับมาใช้ซ้ำได้ ซึ่งแสดงลักษณะการทำงานของเอนทิตีหรือโฟลว์การดำเนินการ แต่ละโหนดอาจมีตัวแปรอินพุต รวมถึงตัวแปรเอาต์พุตที่โหนดอื่นๆ อาจใช้
| โหนด | ประเภทโหนด | การใช้งาน Kotlin | คำอธิบาย |
|---|---|---|---|
| เงื่อนไขเริ่มต้น | เชิงพฤติกรรม |
StarterNodeDsl
|
เริ่มการทำงานอัตโนมัติเมื่อสถานะ (แอตทริบิวต์ใดก็ได้) ของลักษณะมีการเปลี่ยนแปลง |
| StateReader | เชิงพฤติกรรม |
StateReaderNodeDsl
|
อ่านแอตทริบิวต์ลักษณะและช่วยให้คุณบันทึกค่าของแอตทริบิวต์เพื่อใช้ใน โหนดเงื่อนไขได้ |
| การดำเนินการ | เชิงพฤติกรรม |
ActionNodeDsl
|
เรียกใช้คำสั่งลักษณะ |
| ตามลำดับ | โฟลว์การดำเนินการ |
SequentialFlow
|
ดำเนินการโหนดการดำเนินการที่ซ้อนกันตามลำดับ นี่คือลักษณะการทำงานของการดำเนินการเริ่มต้น |
| Parallel | โฟลว์การดำเนินการ |
ParallelFlow
|
ดำเนินการโหนดการดำเนินการที่ซ้อนกันแบบขนาน |
| เงื่อนไข | โฟลว์การดำเนินการ |
ConditionNodeDsl
|
เปลี่ยนโฟลว์การดำเนินการตามเงื่อนไขโดยอิงตามการประเมินนิพจน์เชิงตรรกะ เงื่อนไขอาจเชื่อมโยงกับเงื่อนไขเริ่มต้น (เงื่อนไขเฉพาะของเงื่อนไขเริ่มต้น ) หรือเป็นแบบส่วนกลาง (ใช้กับเงื่อนไขเริ่มต้นทั้งหมด) |
| เลือก | โฟลว์การดำเนินการ |
SelectFlow
|
อนุญาตให้เงื่อนไขเริ่มต้นมากกว่า 1 รายการเปิดใช้งานการทำงานอัตโนมัติ |
| นิพจน์ | ค่า |
Expression
|
อาจเป็นค่าของแอตทริบิวต์ลักษณะ ค่าคงที่ หรือค่าตัวอักษร และต้องประเมินเป็นรายการ ตัวเลข บูลีน หรือสตริง |
โหนดเชิงพฤติกรรม
โหนดต่างๆ เช่น เงื่อนไขเริ่มต้นและการดำเนินการเป็นโหนดเชิงพฤติกรรม เงื่อนไขเริ่มต้นจะเปิดใช้งานการทำงานอัตโนมัติตามการเปลี่ยนแปลงแอตทริบิวต์ของอุปกรณ์ การดำเนินการจะออกคำสั่งอุปกรณ์หรืออัปเดตแอตทริบิวต์
โดยทั่วไปโหนดเชิงพฤติกรรมจะเชื่อมโยงกับลักษณะของอุปกรณ์และสถานะลักษณะเอาต์พุตเพื่อใช้เป็นอินพุตในโหนดอื่นๆ
โหนดโฟลว์การดำเนินการ
โหนดบางโหนดแสดงโฟลว์การดำเนินการ เช่น แบบตามลำดับและแบบขนาน โหนดแต่ละโหนดเหล่านี้มีโหนดเชิงพฤติกรรมที่กำหนดการทำงานอัตโนมัติ
ตัวอย่างเช่น โฟลว์ตามลำดับ อาจมีโหนดที่ดำเนินการตามลำดับ โดยทั่วไปโหนดเหล่านี้จะเป็นเงื่อนไขเริ่มต้น เงื่อนไข และการดำเนินการ
โฟลว์แบบขนาน อาจมีโหนดการดำเนินการหลายโหนดที่ดำเนินการพร้อมกัน เช่น การเปิดไฟหลายดวงพร้อมกัน โหนดที่ตามหลังโฟลว์แบบขนานจะไม่ดำเนินการจนกว่าสาขาทั้งหมดของโฟลว์แบบขนานจะเสร็จสิ้น
โฟลว์การดำเนินการอีกประเภทหนึ่งคือโฟลว์เงื่อนไข ซึ่งสามารถเปลี่ยน โฟลว์การดำเนินการตามการประเมินนิพจน์
ตัวอย่างเช่น คุณอาจมีการทำงานอัตโนมัติที่ดำเนินการตามเงื่อนไขว่าขณะนั้นเป็นเวลากลางคืนหรือไม่ โหนดเงื่อนไขจะตรวจสอบเวลาของวัน จากนั้นจะทำตามเส้นทางการดำเนินการที่เหมาะสมโดยอิงตามการประเมินนั้น
โฟลว์การเลือก มีประโยชน์เมื่อคุณต้องการมีเงื่อนไขเริ่มต้นมากกว่า 1 รายการที่สามารถเปิดใช้งานการทำงานอัตโนมัติได้ เมื่อคุณใส่เงื่อนไขเริ่มต้น 2 รายการขึ้นไปในโฟลว์ select เงื่อนไขเริ่มต้นใดก็ได้จะเปิดใช้งานการทำงานอัตโนมัติได้
ตัวอย่างเช่น คุณสามารถเขียนการทำงานอัตโนมัติที่ลดมู่ลี่เมื่อพระอาทิตย์ตก หากอุณหภูมิสูงเกินเกณฑ์ที่กำหนด หรือหากความสว่างเกินเกณฑ์ เงื่อนไขเริ่มต้น 3 รายการแยกกันจะจัดการสถานการณ์แต่ละสถานการณ์ และทั้ง 3 รายการจะรวมอยู่ในโฟลว์ select
โฟลว์ที่ซ้อนกัน
ในการทำงานอัตโนมัติที่ซับซ้อน โหนดโฟลว์การดำเนินการสามารถซ้อนกันได้ ตัวอย่างเช่น คุณอาจมีโฟลว์ตามลำดับที่ดำเนินการโฟลว์แบบขนาน
โหนด DSL สามารถซ้อนกันและรวมกันได้หลายวิธีเพื่อให้ตรงกับความต้องการเฉพาะของคุณ โดยเป็นไปตามข้อจำกัดที่ระบุไว้ในตารางต่อไปนี้ คอลัมน์ Builder จะลิงก์ไปยังเอกสารประกอบของ Kotlin Type-Safe Builder ซึ่งให้รายละเอียดเกี่ยวกับสิ่งที่อนุญาตให้ใช้ในโหนดแต่ละประเภท
| โหนด | อาจมีโหนดและข้อมูลประเภทต่อไปนี้ | ต้องอยู่ในโหนดประเภทใดประเภทหนึ่งต่อไปนี้ |
|---|---|---|
| เงื่อนไขเริ่มต้น | นิพจน์ | เลือก, ตามลำดับ |
| ManualStarter | เลือก, ตามลำดับ | |
| StateReader | นิพจน์ (โดยทั่วไปประกอบด้วยค่าแอตทริบิวต์ลักษณะ) | การดำเนินการ, เงื่อนไข |
| การดำเนินการ | คำสั่ง, เอนทิตี, นิพจน์ | Parallel, เลือก, ตามลำดับ |
| ตามลำดับ | Parallel, เลือก, ตามลำดับ | |
| Parallel | การดำเนินการ | ตามลำดับ |
| เงื่อนไข | นิพจน์ | Parallel, ตามลำดับ |
| เลือก | เงื่อนไข, ตามลำดับ, เงื่อนไขเริ่มต้น, ManualStarter | ตามลำดับ และต้องเป็นโหนดแรกในโฟลว์ |
Automation DSL
ใน Home API การทำงานอัตโนมัติจะกำหนดโดยใช้ Automation DSL (ภาษาเฉพาะโดเมน) Automation DSL ได้รับการติดตั้งใช้งานเป็น Kotlin DSL (ภาษาเฉพาะโดเมน), โดยใช้ Kotlin Type-Safe Builder และได้รับการออกแบบมาโดยเฉพาะสำหรับการกำหนด เทมเพลตการทำงานอัตโนมัติ
เมื่อคอมไพล์การทำงานอัตโนมัติ Kotlin Type-Safe Builder จะสร้างคลาสข้อมูล Kotlin ที่จะแปลงเป็นอนุกรมเป็น JSON ของบัฟเฟอร์โปรโตคอล ซึ่งใช้เพื่อเรียกใช้บริการการทำงานอัตโนมัติของ Google
Automation DSL ช่วยลดความซับซ้อนและปรับปรุงกระบวนการสร้างการทำงานอัตโนมัติ โดยใช้โมเดลข้อมูลเดียวกันกับลักษณะมาตรฐานของ Matter และลักษณะsmart homeที่ แสดงใน Device API มาตั้งแต่ต้น
นอกจากนี้ Automation DSL ยังกำหนดตรรกะของการทำงานอัตโนมัติในแง่ของประเภทอุปกรณ์นามธรรม ซึ่งแตกต่างจากอินสแตนซ์อุปกรณ์เฉพาะที่อยู่ในบ้านของผู้ใช้ โดยอนุญาตให้นักพัฒนาแอประบุพารามิเตอร์อินพุตที่อาจใช้ในรันไทม์เพื่อระบุอินสแตนซ์อุปกรณ์จริง รวมถึงค่าพารามิเตอร์ที่สำคัญอื่นๆ
ไวยากรณ์ DSL คล้ายกับไวยากรณ์ของ Kotlin และมีความปลอดภัยด้านประเภทเท่ากัน แต่การทำงานอัตโนมัติที่เขียนด้วย Automation DSL จะง่ายกว่าและกระชับกว่าการทำงานอัตโนมัติเดียวกันที่เขียนด้วย Kotlin ล้วนๆ
ตัวอย่าง
ตัวอย่างต่อไปนี้เป็นการทำงานอัตโนมัติที่เปิดอุปกรณ์ ซึ่งเขียนโดยใช้ 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()) }
}
}
การทำงานอัตโนมัตินี้เป็นพื้นฐานมาก กล่าวคือ เมื่อ device1 ซึ่งเป็นไฟเปิดขึ้น (แอตทริบิวต์ onOff เปลี่ยนเป็น true) ระบบจะส่งคำสั่ง on() เพื่อเปิด device2
การทำงานอัตโนมัติใช้โหนด sequential ซึ่งบ่งชี้ว่าโหนดจะทำงานตามลำดับ
ภายในโหนด sequential จะมีโหนดเชิงพฤติกรรม เช่น starter, condition และ action เอาต์พุตของโหนด starter จะกำหนดให้กับตัวแปรเพื่อใช้ในโหนด condition