基本 Chime 裝置類型可使用標準 Matter 型 Matter.ChimeTrait 或 Google 自訂的特徵版本 Google.ChimeTrait 實作,除了 Matter 標準中指定的功能外,還支援外部鈴聲。鈴聲裝置也可以實作 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 應用程式應編寫為可配合多部分電鈴裝置。詳情請參閱「多部分裝置」。
應用程式中應以單一動態磚代表每個多部分鈴聲裝置。Chime 裝置應為主要裝置,而子音箱應為 Chime 底下的零件。
電鈴裝置的主要設定應會顯示喇叭音量。
OnOff 對應
如果鈴聲同時具有 Chime 和 Speaker 裝置類型,控制應用程式中的 OnOff 按鈕應對應至 Chime 的 Enabled 屬性。
根據Matter裝置媒體庫規格,將鈴聲特徵的 Enabled 屬性設為 False,除了停用鈴聲外,還可能像全域靜音切換開關一樣,抑制所有可聽見和可見的指標。
自動化支援
如前所述,由於 ChimeDeviceType 可能有多個零件,因此建議開發人員將所有鈴聲視為多零件裝置,使用鈴聲的自動化作業也是如此。
鈴聲可用於自動化啟動條件和動作。
自動化動作中使用的父項 Chime 裝置下的任何元件裝置,都必須使用 AutomationPartPath 參照。
下列自動化動作示範如何建立自動化動作,其中包含實作 Chime 特徵和 Speaker 的多部分鈴聲。前門開啟時觸發自動化動作:
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
}