คู่มือ iOS DSL สําหรับการทำงานอัตโนมัติที่ซับซ้อน

คุณใช้ 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

วิธีตั้งค่าแอตทริบิวต์ลักษณะ

  1. สร้างโหนด update ภายในโหนด action โดยรวมลักษณะที่เกี่ยวข้องเป็นอาร์กิวเมนต์ไปยังโหนด update
    action(deviceReference, deviceType) {
      update(trait) {
    
      }
    }
    
  2. ภายในโหนด update ให้ใช้ฟังก์ชัน Mutator และส่งค่าใหม่ไปยังแอตทริบิวต์แต่ละรายการที่จะแก้ไข วิธีตั้งชื่อฟังก์ชัน Mutator
    1. ขึ้นต้นชื่อแอตทริบิวต์ด้วยตัวพิมพ์ใหญ่
    2. โดยใส่คำว่า 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)
  }
}