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