คุณใช้ 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
ทริกเกอร์ ก็จะไม่ทริกเกอร์อีกเป็นเวลา 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
ตั้งค่าแอตทริบิวต์ลักษณะใน Action
วิธีตั้งค่าแอตทริบิวต์ลักษณะ
- สร้างโหนด
update
ภายในโหนดaction
โดยรวมลักษณะที่เกี่ยวข้องเป็นอาร์กิวเมนต์ไปยังโหนดupdate
action(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)
}
}