基本的なチャイム デバイスタイプは、標準の Matter ベースの Matter.ChimeTrait または Google 独自のカスタム バージョンのトレイト を使用して実装できます。 は、Matter 標準で指定された機能に加えて、外部チャイムもサポートします。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 アプリは、マルチパート チャイム デバイスに対応するように記述する必要があります。詳しくは、マルチパート デバイスをご覧ください。
マルチパート チャイム デバイスは、アプリ内で 1 つのタイルで表される必要があります。Chime デバイスはプライマリ デバイスで、子スピーカーは Chime の一部である必要があります。
スピーカーの音量は、チャイム デバイスのメイン設定として表示されます。
OnOff マッピング
Chime と Speaker の両方のデバイスタイプを持つチャイムの場合、制御アプリの OnOff ボタンは Chime の Enabled 属性にマッピングする必要があります。
Matter デバイス ライブラリの仕様に準拠して、チャイム トレイトの Enabled 属性を False に設定すると、チャイムが無効になるだけでなく、すべての音声と視覚のインジケーターを抑制するグローバル ミュート スイッチのように動作する場合があります。
自動化のサポート
前述のように、ChimeDeviceType には複数のパーツが含まれる可能性があるため、デベロッパーはすべてのチャイムをマルチパート デバイスとして扱うことが推奨されます。チャイムを使用する自動化の場合も同様です。
チャイムは、自動化の開始条件とアクションで使用できます。
自動化で使用される親チャイム デバイスのコンポーネント デバイスは、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 アドレスを確認するには、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
}