คู่มืออุปกรณ์ Chime สำหรับ iOS

ประเภทอุปกรณ์กริ่งพื้นฐานอาจใช้ได้โดยใช้Matterตามมาตรฐาน Matter.ChimeTrait หรือลักษณะภาษาของเวอร์ชันที่กำหนดเองของ Google เอง Google.ChimeTrait ซึ่งนอกเหนือจากความสามารถที่ระบุไว้ในมาตรฐานMatterแล้ว ยังรองรับกริ่งภายนอกด้วย อุปกรณ์กริ่งประตูอาจใช้ Matter.IdentifyTrait ซึ่งเป็นวิธีระบุอุปกรณ์กริ่งประตูด้วยภาพหรือเสียง

โปรดตรวจสอบการรองรับแอตทริบิวต์และคำสั่งสำหรับอุปกรณ์ก่อนที่จะใช้ฟีเจอร์หรือพยายามอัปเดตแอตทริบิวต์ ดูข้อมูลเพิ่มเติมได้ที่ควบคุมอุปกรณ์ใน iOS

ประเภทอุปกรณ์ API สำหรับ Home ลักษณะ แอปตัวอย่าง Swift กรณีการใช้งาน

กริ่ง

ChimeDeviceType

home.matter.0000.types.0146

อุปกรณ์ที่เล่นเสียงจากเสียงที่ติดตั้งไว้ล่วงหน้าได้หลากหลาย และมักใช้กับกริ่งประตู กริ่งประตูเสียง หรือกริ่งประตูแบบบันทึกวิดีโอได้

ลักษณะที่ต้องระบุ
     matter ChimeTrait

ลักษณะที่ไม่บังคับ
     matter IdentifyTrait
กริ่งประตู

ดูข้อมูลพื้นฐานเกี่ยวกับอุปกรณ์

   ติดตั้งใช้งานในแอปตัวอย่างสำหรับ iOS   

ลักษณะBasicInformation ประกอบด้วยข้อมูล เช่น ชื่อผู้ให้บริการ รหัสผู้ให้บริการ รหัสผลิตภัณฑ์ ชื่อผลิตภัณฑ์ (รวมถึงข้อมูลรุ่น) และเวอร์ชันซอฟต์แวร์ของอุปกรณ์

let vendorName = basicInfoTrait.attributes.vendorName!
let vendorID = basicInfoTrait.attributes.vendorID!
let productID = basicInfoTrait.attributes.productID!
let productName = basicInfoTrait.attributes.productName!
let softwareVersion = basicInfoTrait.attributes.softwareVersion!

การรองรับหลายพาร์ท

กริ่งอาจประกอบด้วยอุปกรณ์หลายประเภท รวมถึง Chime และลำโพง (ไม่บังคับ) นอกจากนี้ กริ่งบางรุ่นยังมี Thread Border Router (TBR) หากต้องการให้การรองรับครอบคลุมมากที่สุด แอปที่ใช้ Home API ซึ่ง ควบคุมกริ่งควรเขียนให้รองรับอุปกรณ์กริ่งแบบหลายส่วน ดูข้อมูลเพิ่มเติมได้ที่ อุปกรณ์แบบหลายพาร์ท

อุปกรณ์กริ่งประตูแบบหลายส่วนแต่ละเครื่องควรแสดงในแอปด้วยไทล์เดียว อุปกรณ์ Chime ควรเป็นอุปกรณ์หลัก และลำโพงย่อยควรเป็นส่วนหนึ่งของ Chime

ระดับเสียงของลำโพงควรปรากฏเป็นการตั้งค่าหลักของอุปกรณ์ Chime

การแมปเปิด/ปิด

สำหรับกริ่งที่มีทั้งประเภทอุปกรณ์กริ่งและลำโพง ควรแมปปุ่มเปิด/ปิดในแอปควบคุมกับแอตทริบิวต์ Enabled ของกริ่ง

ตามMatterข้อกำหนดของคลังอุปกรณ์ การตั้งค่าแอตทริบิวต์ Enabled ของลักษณะ False อาจทำหน้าที่เป็นสวิตช์ปิดเสียงส่วนกลางที่ระงับตัวบ่งชี้ที่มองเห็นได้และได้ยินทั้งหมด นอกเหนือจากการปิดใช้False

การสนับสนุนการทำงานอัตโนมัติ

ดังที่กล่าวไว้ก่อนหน้านี้ เนื่องจากChimeDeviceTypeอาจมีหลายส่วน เราจึงขอแนะนำให้นักพัฒนาแอปถือว่าเสียงกริ่งทั้งหมดเป็นอุปกรณ์แบบหลายส่วน และข้อความนี้ ยังคงเป็นจริงในกรณีของการทำงานอัตโนมัติที่ใช้เสียงกริ่ง

คุณใช้กริ่งในเงื่อนไขเริ่มต้นและการดำเนินการของการทำงานอัตโนมัติได้

อุปกรณ์ที่เป็นส่วนประกอบใดๆ ภายใต้อุปกรณ์ Chime หลักที่ใช้ในการ ระบบอัตโนมัติจะต้องอ้างอิงโดยใช้ AutomationPartPath

การทำงานอัตโนมัติต่อไปนี้แสดงวิธีสร้างการทำงานอัตโนมัติด้วย เสียงกริ่งหลายส่วนที่ใช้ลักษณะ Chime รวมถึงลำโพง ระบบจะทริกเกอร์การทำงานอัตโนมัติเมื่อเปิดประตูหน้า

import GoogleHomeSDK
import GoogleHomeTypes

typealias ChimeTrait = Matter.ChimeTrait
typealias OpenCloseTrait = Google.OpenCloseTrait

// Fetch devices using the multipart device model.
let multipartDevices = try await home.devices(enableMultipartDevices: true).list()

guard let chimeParentDevice = multipartDevices.first(where: {
  $0.types.contains(ChimeDeviceType.self)
}) else { return }

guard let doorDevice = multipartDevices.first(where: {
  $0.types.contains(GoogleDoorDeviceType.self)
}) else { return }

// Extract the AutomationPartPath for the specific Chime part
guard let chimeType = await chimeParentDevice.types.get(ChimeDeviceType.self),
  let chimePartPath = chimeParentDevice.automationPart(chimeType) else {
  return
}

let starterNode = starter(doorDevice, GoogleDoorDeviceType.self, OpenCloseTrait.self)

let doorOpenClose = stateReader(doorDevice, GoogleDoorDeviceType.self, OpenCloseTrait.self)

// Build the automation
let chimeAutomation = automation(
  name: "Multipart Chime Demo",
  description: "Activate the chime when the door is opened"
) {
starterNode
condition {
  starterNode.openPercent.unwrapOptional().greaterThan(0)
}
  // Action: Play a chime sound
  action(chimePartPath) {
    ChimeTrait.playChimeSound()
  }
}

ดูข้อมูลเพิ่มเติมเกี่ยวกับการทำงานอัตโนมัติโดยใช้อุปกรณ์แบบหลายส่วนได้ที่การทำงานอัตโนมัติของอุปกรณ์แบบหลายส่วน

ตรวจสอบการเชื่อมต่อสำหรับอุปกรณ์

ระบบจะตรวจสอบการเชื่อมต่อของอุปกรณ์ที่ระดับประเภทอุปกรณ์ เนื่องจากอุปกรณ์บางเครื่องรองรับอุปกรณ์หลายประเภท สถานะที่ส่งคืนคือ การรวมสถานะการเชื่อมต่อของลักษณะทั้งหมดในอุปกรณ์นั้น

let lightConnectivity =
  dimmableLightDeviceType.metadata.sourceConnectivity
  .connectivityState

สถานะ partiallyOnline อาจปรากฏในกรณีที่มีอุปกรณ์หลายประเภท เมื่อไม่มีการเชื่อมต่ออินเทอร์เน็ต Matter มาตรฐาน อาจยังออนไลน์อยู่เนื่องจากการกำหนดเส้นทางในพื้นที่ แต่ลักษณะที่อิงตามระบบคลาวด์จะ ออฟไลน์

รับที่อยู่ IP ของอุปกรณ์

หากต้องการค้นหาที่อยู่ IP ของอุปกรณ์ ให้ใช้แอตทริบิวต์ networkInterfaces ของ GeneralDiagnosticsTrait ระบบจะแสดงที่อยู่เป็นออบเจ็กต์ Data ซึ่งคุณจัดรูปแบบเป็นสตริง IPv4 หรือ IPv6 มาตรฐานได้โดยใช้เฟรมเวิร์ก Network ดังนี้

func getIpAddresses(trait: Matter.GeneralDiagnosticsTrait) -> [String] {
  let interfaces = trait.attributes.networkInterfaces ?? []
  var ipAddresses: [String] = []

  for interface in interfaces {
    for data in interface.iPv4Addresses {
      if let ipv4 = IPv4Address(data) {
        ipAddresses.append(String(describing: ipv4))
      }
    }
    for data in interface.iPv6Addresses {
      if let ipv6 = IPv6Address(data) {
        ipAddresses.append(String(describing: ipv6))
      }
    }
  }

  return ipAddresses
}