คุณสามารถใช้ Automation DSL เพื่อสร้างการทำงานอัตโนมัติที่ซับซ้อนกว่า ที่กล่าวถึงใน คู่มือ DSL - การทำงานอัตโนมัติพื้นฐานใน iOS
การทำงานตามลำดับที่มีการดำเนินการหลายรายการ
การทำงานอัตโนมัติสามารถทำได้มากกว่า 1 อย่าง เช่น คุณสามารถมีโหนด action หลายโหนดแทนโหนด action โหนดเดียว ซึ่งจะทำงานตามลำดับ
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
action {...}
action {...}
action {...}
}
การทำงานตามลำดับที่มีการดำเนินการแบบขนานหลายรายการ
หากคุณวางโหนด action หลายโหนดในโหนด parallel การดำเนินการจะทำงานพร้อมกัน
import GoogleHomeSDK
import GoogleHomeTypes
automation (
...
) {
starter(...)
condition {...}
parallel {
action {...}
action {...}
action {...}
}
}
หากมีโหนด action ในโหนด sequential ที่อยู่หลังโหนด parallel โหนดเหล่านั้นจะรอให้โหนดทั้งหมดภายในโหนด parallel ทำงานเสร็จก่อนจึงจะเริ่มทำงาน
ความล่าช้า
คุณสามารถหยุดการทำงานอัตโนมัติชั่วคราวได้โดยใช้วิธี
delay(for:) ซึ่งรับอาร์กิวเมนต์
Duration
ที่แสดงระยะเวลาที่จะหยุดชั่วคราวก่อนดำเนินการต่อ ระยะเวลาหยุดชั่วคราวอาจสั้นเพียง 5 วินาทีหรือนานถึง 24 ชั่วโมง
ตัวอย่างเช่น หากต้องการเปิด/ปิดไฟ 4 ครั้งโดยหยุดชั่วคราว 5 วินาทีระหว่างการเปิด/ปิดแต่ละครั้ง ให้ทำดังนี้
typealias OnOffLightDevice = Matter.OnOffLightDeviceType
typealias OnOffTrait = Matter.OnOffTrait
sequential {
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
delay(for:.seconds(5))
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
delay(for:.seconds(5))
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
delay(for:.seconds(5))
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
}
การระงับการทริกเกอร์
การระงับการทริกเกอร์เป็นความสามารถที่ช่วยให้การทำงานอัตโนมัติละเว้น starter เป็นระยะเวลาที่กำหนดหลังจากเหตุการณ์ทริกเกอร์เริ่มต้น ตัวอย่างเช่น หากการทำงานอัตโนมัติมี starter ที่ทริกเกอร์โดยการตรวจจับการเคลื่อนไหว และหากคุณระบุระยะเวลาการระงับการทริกเกอร์เป็น 5 นาที เมื่อ starter ทริกเกอร์แล้ว starter จะไม่ทริกเกอร์อีกครั้งในอีก 5 นาทีถัดไป ซึ่งจะป้องกันไม่ให้การทำงานอัตโนมัติทริกเกอร์ซ้ำๆ อย่างรวดเร็ว
หากต้องการใช้การระงับการทริกเกอร์กับการทำงานอัตโนมัติ ให้ใช้คีย์เวิร์ด
suppress(for:)
พร้อมอาร์กิวเมนต์
Duration
ที่แสดงระยะเวลาที่จะรอการตอบสนองต่อการทริกเกอร์ครั้งต่อๆ ไป
ระยะเวลาการระงับอาจสั้นเพียง 5 วินาทีหรือนานถึง 24 ชั่วโมง
typealias OccupancySensorDevice = Matter.OccupancySensorDeviceType
typealias OnOffLightDevice = Matter.OnOffLightDeviceType
typealias MotionDetectionTrait = Google.MotionDetectionTrait
typealias OnOffTrait = Matter.OnOffTrait
automation {
let starterNode = starter(device, OccupancySensorDevice.self, MotionDetectionTrait.self)
starterNode
suppress(for: .seconds(30 * 60) // 30 minutes
action(light, OnOffLightDevice.self) { OnOffTrait.toggle() }
}
โปรดทราบว่าการระงับการทริกเกอร์จะส่งผลต่อ starters ทั้งหมดในการทำงานอัตโนมัติที่
อยู่ก่อน Suppression
ตั้งค่าแอตทริบิวต์ลักษณะในการดำเนินการ
วิธีตั้งค่าแอตทริบิวต์ลักษณะ
- สร้างโหนด
updateภายในโหนดactionโดยใส่ลักษณะที่เกี่ยวข้องเป็นอาร์กิวเมนต์ของโหนดupdateaction(deviceReference, deviceType) { update(trait) { } } - ภายในโหนด
updateให้ใช้ฟังก์ชัน Mutator สำหรับแต่ละแอตทริบิวต์ที่จะแก้ไข และส่งค่าใหม่ไปยังฟังก์ชันดังกล่าว วิธีสร้างชื่อฟังก์ชัน Mutator- ขึ้นต้นชื่อแอตทริบิวต์ด้วยตัวพิมพ์ใหญ่
- นำหน้าด้วยคำว่า
set
defaultMoveRate, คุณจะต้องใช้ฟังก์ชัน Mutator ที่ชื่อว่าsetDefaultMoveRate.
โปรดทราบว่าโหนด update สามารถมีฟังก์ชัน Mutator ได้หลายฟังก์ชัน ตัวอย่างต่อไปนี้แสดงการอัปเดตแอตทริบิวต์ 2 รายการ
typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait
action(fan, FanDeviceType.self) {
update(FanControlTrait.self) {
$0.setFanMode(.on)
}
}