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

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 ทริกเกอร์ ระบบจะไม่ทริกเกอร์อีกเป็นเวลา 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

ตั้งค่าแอตทริบิวต์ลักษณะในการดำเนินการ

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

  1. สร้างโหนด update ภายในโหนด action โดยใส่ลักษณะที่เกี่ยวข้องเป็นอาร์กิวเมนต์ของโหนด update ดังนี้
    action(deviceReference, deviceType) {
      update(trait) {
    
      }
    }
    
  2. ภายในโหนด update ให้ใช้ฟังก์ชันตัวเปลี่ยนรูปแบบและส่งค่าใหม่ให้กับแต่ละแอตทริบิวต์ที่จะแก้ไข วิธีสร้างชื่อของฟังก์ชันตัวเปลี่ยนรูปแบบมีดังนี้
    1. ใช้อักษรตัวพิมพ์ใหญ่สำหรับชื่อแอตทริบิวต์
    2. ใส่คำว่า set นำหน้า
    ตัวอย่างเช่น หากต้องการอัปเดตแอตทริบิวต์ชื่อ defaultMoveRate คุณจะใช้ฟังก์ชันตัวเปลี่ยนรูปแบบชื่อ setDefaultMoveRate

โปรดทราบว่าโหนด update อาจมีฟังก์ชันตัวแปลงหลายรายการ ต่อไปนี้คือตัวอย่างการอัปเดตแอตทริบิวต์ 2 รายการ

typealias FanDeviceType = Matter.FanDeviceType
typealias FanControlTrait = Matter.FanControlTrait

action(fan, FanDeviceType.self) {
  update(FanControlTrait.self) {
    $0.setFanMode(.on)
  }
}