ใช้คำแนะนำต่อไปนี้เพื่อทำความเข้าใจวิธีใช้โหนด DSL การทำงานอัตโนมัติต่างๆ ในการสร้างการทำงานอัตโนมัติ
DSL การทำงานอัตโนมัติทั้งหมดจะอยู่ในautomation
โหนดเดียว automation
โหนดเป็นขอบเขตระหว่างบริบทภาษา Swift ด้านนอกกับบริบท DSL ที่ฝังอยู่
โฟลว์แบบลำดับ
โฟลว์แบบลำดับเป็นประเภทโฟลว์การทำงานอัตโนมัติเริ่มต้น
ต่อไปนี้คือเทมเพลต DSL ของการทำงานอัตโนมัติพื้นฐานมากที่ใช้โฟลว์ตามลำดับ ซึ่งประกอบด้วยเงื่อนไขเริ่มต้น เงื่อนไข และการดำเนินการ
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
action {...}
}
คุณปรับแต่งได้โดยการเพิ่มโหนดเพิ่มเติม
Starter
โหนดเงื่อนไขเริ่มต้นจะกำหนดสถานการณ์เริ่มต้นที่เปิดใช้งานการทำงานอัตโนมัติ เช่น การเปลี่ยนแปลงสถานะหรือค่า การทำงานอัตโนมัติต้องมีตัวเริ่มต้นอย่างน้อย 1 รายการ ไม่เช่นนั้นการตรวจสอบจะไม่สำเร็จ หากต้องการเพิ่มทริกเกอร์มากกว่า 1 รายการในการทำงานอัตโนมัติ คุณต้องใช้โหนด select
การจัดอันดับเริ่มต้นตามแอตทริบิวต์ลักษณะ
เมื่อประกาศโหนดเริ่มต้นที่อิงตามแอตทริบิวต์ลักษณะ ให้ระบุข้อมูลต่อไปนี้
- อุปกรณ์
- ประเภทอุปกรณ์ที่ลักษณะเป็นของ
- ลักษณะ
starter(
thermostat,
Matter.TemperatureSensorDeviceType.self,
Matter.TemperatureMeasurementTrait.self
)
ต้องระบุพารามิเตอร์ประเภทอุปกรณ์เนื่องจากจะช่วยให้คุณระบุประเภทอุปกรณ์ภายในอุปกรณ์ที่การทำงานอัตโนมัติจะกำหนดเป้าหมายได้ เช่น อุปกรณ์อาจประกอบด้วย
FanDeviceType
และ
HeatingCoolingUnitDeviceType
ซึ่งทั้ง 2 อย่างมีลักษณะ
OnOffTrait
การระบุประเภทอุปกรณ์จะช่วยให้ไม่เกิดความคลุมเครือเกี่ยวกับส่วนใดของ
อุปกรณ์ที่ทริกเกอร์การทำงานอัตโนมัติ
เงื่อนไขเริ่มต้นตามเหตุการณ์
เมื่อประกาศโหนดเริ่มต้นที่อิงตามเหตุการณ์ ให้ระบุข้อมูลต่อไปนี้
- อุปกรณ์
- ประเภทอุปกรณ์ที่ลักษณะเป็นของ
- กิจกรรม
starter(
doorbell,
Google.GoogleDoorbellDeviceType.self,
Google.DoorbellPressTrait.DoorbellPressedEvent
)
เริ่มต้นโดยอิงตามโครงสร้างและเหตุการณ์ที่มีพารามิเตอร์
เหตุการณ์บางอย่างอาจมีพารามิเตอร์ ดังนั้นคุณจึงต้องรวมพารามิเตอร์เหล่านี้ไว้ในตัวเริ่มต้นด้วย
ตัวอย่างเช่น เงื่อนไขเริ่มต้นนี้ใช้
TimeTrait
ของ ScheduledEvent
เพื่อเปิดใช้งานการทำงานอัตโนมัติที่เวลา 07:00 น.
typealias TimeTrait = Google.TimeTrait
let earlyMorning = starter(
structure,
TimeTrait.ScheduledEvent.self
) {
TimeTrait.ScheduledEvent.clockTime(TimeOfDay(hours: 7, minutes: 0))
}
Manual starter
การเริ่มต้นด้วยตนเองคือการเริ่มต้นประเภทพิเศษที่ช่วยให้ผู้ใช้เรียกใช้การทำงานอัตโนมัติด้วยตนเองได้
เมื่อประกาศตัวแปรเริ่มต้นด้วยตนเอง
- อย่าระบุลักษณะหรือประเภทอุปกรณ์
- ระบุองค์ประกอบ UI ที่เรียกใช้
Automation.execute()
เมื่อวางทริกเกอร์ที่กำหนดเองในselect
โฟลว์พร้อมกับทริกเกอร์อื่น ทริกเกอร์ที่กำหนดเองจะลบล้างทริกเกอร์อื่น
select {
manualStarter()
starter(
thermostat,
Matter.TemperatureSensorDeviceType.self,
Matter.TemperatureMeasurementTrait.self
)
}
โปรดทราบว่าระบบจะประเมินcondition
โหนดที่ตามหลังตัวเริ่มต้นที่กำหนดเอง
และอาจบล็อกการดำเนินการของระบบอัตโนมัติ ทั้งนี้ขึ้นอยู่กับcondition
นิพจน์
วิธีหนึ่งในการจัดโครงสร้างการทำงานอัตโนมัติเพื่อให้โหนด condition
ไม่บล็อกการทำงานอัตโนมัติที่เปิดใช้งานด้วยเงื่อนไขเริ่มต้นด้วยตนเองคือการใส่เงื่อนไขเริ่มต้นอื่นๆ
ในโฟลว์ตามลำดับที่แยกต่างหากพร้อมกับ condition
ของโฟลว์นั้น
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
select {
sequential {
starter(...)
condition {...}
}
sequential {
manualStarter()
}
}
action {...}
}
อ้างอิงค่าของแอตทริบิวต์
หากต้องการใช้ค่าของแอตทริบิวต์ในนิพจน์ ให้ใช้ไวยากรณ์ต่อไปนี้
หากใช้ stateReader
ให้ทำดังนี้
typealias TimeTrait = Google.TimeTrait
let time = stateReader(structure, TimeTrait.self)
time
let currTime = time.currentTime
หากใช้ starter
ให้ทำดังนี้
typealias LaundryWasherDeviceType = Matter.LaundryWasherDeviceType
typealias OnOffTrait = Google.OnOffTrait
let starterNode = starter(device1, LaundryWasherDeviceType.self, OnOffTrait.self)
starterNode
condition {
starterNode.onOff.equals(true)
}
โหนดและนิพจน์เงื่อนไข
โหนดเงื่อนไขแสดงถึงจุดตัดสินใจที่กำหนดว่าการทำงานอัตโนมัติจะดำเนินต่อไปหรือไม่ การทำงานอัตโนมัติมีโหนด condition
ได้หลายรายการ
หากนิพจน์ของโหนด condition
ใดก็ตามประเมินเป็น false
การดำเนินการของ
การทำงานอัตโนมัติทั้งหมดจะสิ้นสุดลง
ภายในโหนด condition
คุณสามารถรวมเกณฑ์เงื่อนไขหลายรายการได้โดยใช้ตัวดำเนินการต่างๆ ตราบใดที่นิพจน์ประเมินเป็นค่าบูลีนเดียว หากค่าที่ได้เป็น
true
แสดงว่าตรงตามเงื่อนไขและระบบจะดำเนินการอัตโนมัติกับโหนดถัดไป
ต่อไป หากเป็น false
ระบบจะหยุดการดำเนินการอัตโนมัติ ณ จุดนั้น
นิพจน์จะสร้างขึ้นในลักษณะเดียวกับนิพจน์ใน Swift และอาจมี ค่าดั้งเดิม เช่น ตัวเลข อักขระ สตริง และบูลีน รวมถึง ค่า Enum การจัดกลุ่มนิพจน์ย่อยด้วยวงเล็บช่วยให้คุณควบคุม ลำดับการประเมินนิพจน์ย่อยได้
ต่อไปนี้คือตัวอย่างของ condition
ซึ่งรวมนิพจน์ย่อยหลายรายการไว้ในนิพจน์เดียว
condition {
let exp1 = starterNode.lockState.equals(.unlocked)
let exp2 = stateReaderNode.lockState.equals(true)
let exp3 = occupancySensingDevice.occupied.notEquals(0)
(exp1.and(exp2)).or(exp3)
}
คุณอาจอ้างอิงค่าของลักษณะที่เข้าถึงผ่านเงื่อนไขเริ่มต้นได้
typealias OnOffTrait = Matter.OnOffTrait
let starterNode = starter(device, OnOffTrait.self)
starterNode
condition {
starterNode.onOff.equals(true)
}
val starterNode = starter<_>(device, OnOff)
condition() { expression = starterNode.onOff equals true }
stateReader
อีกวิธีในการอ้างอิงค่าแอตทริบิวต์ลักษณะในโหนด condition
คือใช้โหนด stateReader
โดยให้บันทึกค่าแอตทริบิวต์ลักษณะในโหนด stateReader
ก่อน stateReader
ใช้ structure
และลักษณะเป็นอาร์กิวเมนต์
typealias ActivatedCarbonFilterMonitoringTrait = Matter.ActivatedCarbonFilterMonitoringTrait
let filterMonitoringState = stateReader(structure, ActivatedCarbonFilterMonitoringTrait.self)
จากนั้นอ้างอิง stateReader
ในโหนด condition
ดังนี้
condition {
filterMonitoringState.changeIndication.equals(.warning)
}
การใช้โอเปอเรเตอร์เปรียบเทียบ
และ
โอเปอเรเตอร์เชิงตรรกะ
สามารถใช้ stateReaders
หลายรายการในโหนด condition
ได้
typealias ArmDisarm = Google.ArmDisarmTrait
typealias DoorLockDevice = Matter.DoorLockDeviceType
typealias DoorLock = Matter.DoorLockTrait
let armState = stateReader(doorLock, DoorLockDevice.self, ArmDisarm )
let doorLockState = stateReader(doorLock, DoorLockDevice.self, DoorLock)
armState
doorLockState
condition {
let exp1 = armState.armState
let exp2 = doorLockState.lockState
exp1.and(exp2)
}
ระยะเวลาของเงื่อนไข
นอกเหนือจากนิพจน์บูลีนในเงื่อนไขแล้ว คุณยังระบุกรอบเวลา ที่นิพจน์ต้องเป็นจริงเพื่อเรียกใช้การทำงานอัตโนมัติได้ด้วย ตัวอย่างเช่น คุณกำหนดเงื่อนไขให้ทำงานได้ก็ต่อเมื่อไฟเปิดอยู่เป็นเวลา 10 นาที
condition(for: .seconds(600)) {
lightStateReader.onOff.equals(true)
}
ระยะเวลาอาจอยู่ในช่วง 1-30 นาที
โหนดการดำเนินการ
โหนดการดำเนินการคือที่ที่การทำงานของการทำงานอัตโนมัติเกิดขึ้น
ในตัวอย่างนี้ การดำเนินการจะเรียกใช้คำสั่ง
AssistantBroadcastTrait
's
broadcast()
action(speaker, SpeakerDeviceType.self) {
Google.AssistantBroadcastTrait.broadcast(msg: "Oven Cycle Complete")
}