기본 초인종 기기 유형은 표준 Matter 기반 Matter.ChimeTrait 또는 Matter 표준에 지정된 기능 외에 외부 초인종을 지원하는 Google의 자체 맞춤 버전 특성 Google.ChimeTrait을 사용하여 구현할 수 있습니다.
차임벨 기기는 Matter.IdentifyTrait도 구현할 수 있습니다. 이 기능은 시각이나 소리로 차임벨 기기를 식별하는 수단을 제공합니다.
기능을 사용하거나 속성을 업데이트하기 전에 항상 기기의 속성 및 명령어 지원을 확인하세요. 자세한 내용은 iOS에서 기기 제어하기를 참고하세요.
| Home API 기기 유형 | 특성 | Swift 샘플 앱 | 사용 사례 |
|---|---|---|---|
|
차임벨
다양한 사전 설치된 소리를 재생할 수 있으며 일반적으로 초인종, 오디오 초인종 또는 비디오 초인종과 함께 사용되는 기기입니다. |
필수 특성 matter ChimeTrait |
초인종 |
기기에 관한 기본 정보 가져오기
BasicInformation 특성에는 공급업체 이름, 공급업체 ID, 제품 ID, 제품 이름 (모델 정보 포함), 기기의 소프트웨어 버전과 같은 정보가 포함됩니다.
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!
멀티파트 지원
차임벨은 차임벨과 선택적으로 스피커를 비롯한 여러 기기 유형으로 구성될 수 있습니다. 또한 일부 차임벨에는 Thread Border Router (TBR)가 포함되어 있습니다. 가장 광범위한 지원을 보장하려면 차임벨을 제어하는 Home API 앱은 멀티파트 차임벨 기기를 수용하도록 작성해야 합니다. 자세한 내용은 멀티파트 기기를 참고하세요.
각 멀티파트 차임벨 기기는 앱에서 단일 타일로 표시되어야 합니다. 차임벨 기기가 기본 기기여야 하며, 하위 스피커는 차임벨 아래의 부분이어야 합니다.
스피커 볼륨이 차임벨 기기의 기본 설정으로 표시되어야 합니다.
OnOff 매핑
차임벨과 스피커 기기 유형이 모두 있는 차임벨의 경우 제어 앱의 OnOff 버튼은 차임벨의 Enabled 속성에 매핑되어야 합니다.
Matter 기기 라이브러리 사양에 따라 차임벨 특성의 Enabled 속성을 False로 설정하면 차임벨을 사용 중지하는 것 외에도 모든 청각 및 시각적 표시기를 억제하는 전역 무음 스위치처럼 작동할 수 있습니다.
자동화 지원
앞서 언급한 것처럼 ChimeDeviceType에는 여러 부분이 있을 수 있으므로 개발자는 모든 차임을 멀티파트 기기로 취급하는 것이 좋습니다. 이는 차임을 사용하는 자동화의 경우에도 마찬가지입니다.
차임벨은 자동화 시작 조건 및 작업에 사용할 수 있습니다.
자동화에 사용되는 상위 차임벨 기기 아래의 구성요소 기기는 AutomationPartPath를 사용하여 참조해야 합니다.
다음 자동화는 차임벨 트레이트와 스피커를 모두 구현하는 멀티파트 차임벨로 자동화를 만드는 방법을 보여줍니다. 현관문이 열리면 자동화가 트리거됩니다.
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 주소를 찾으려면 GeneralDiagnosticsTrait의 networkInterfaces 속성을 사용합니다.
주소는 Data 객체로 반환되며, Network 프레임워크를 사용하여 표준 IPv4 또는 IPv6 문자열로 형식을 지정할 수 있습니다.
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
}