WWDC Quick Look 💓 By SwiftGGTeam
Add support for Matter in your smart home app

Add support for Matter in your smart home app

元の動画を見る

ハイライト

Apple は、Matter を iOS、iPadOS、tvOS 15 開発者プレビューの HomeKit に統合し、スマート ホーム アプリが Matter アクセサリを設定、ペアリング、制御できるように新しいセットアップ API と CHIP.framework を提供しました。

主要内容

スマート ホーム アプリは、過去に大きな問題に直面する必要がありました。同じ家に異なるメーカーの照明、コンセント、センサー、中央制御装置が設置されている可能性があるということです。各メーカーは独自のプロトコルを維持しており、アプリ開発者も接続、ペアリング、ステータスの読み取り、リモート制御のための多くの独自のロジックを作成する必要があります。

Matter(スマートホーム接続の標準)は、これを修正したいと考えています。これは、統一プロトコルを使用してスマート ホーム アクセサリを連携させることを目的として、Apple と他の業界関係者によって開発されました。講演の中で、Matter の初期の名前は Connected Home over IP (略して CHIP) だったと述べられましたが、サンプル API には今でもその名前が表示されます。CHIP名前。

Apple のアプローチは 2 層構造になっています。

最初の層は HomeKit です。 iOS 15 開発者プレビューでは、HomeKit は並列プロトコルとして Matter にアクセスします。既存の HomeKit アプリは引き続き元の API を呼び出し、QR コード スキャナーは Matter QR コードを認識し始め、ステータスの読み取り、書き込み、通知、リモート アクセス、シーン、自動化も HomeKit モデルに従います。

2 番目のレイヤーは新しいセットアップ API です。一部のアプリでは、Matter アクセサリを独自のスマート ホーム ハブに接続する必要があります。 Apple は、システム UI、トポロジ オブジェクト、および App Extension コールバックを提供します。アプリは、管理する家と部屋をシステムに通知します。システムはスキャン、ページ フロー、エラー処理を担当し、拡張機能は CHIP.framework を使用したペアリングと構成の完了を担当します。

HomeKit 経由で Matter に接続する

HomeKit の価値は、基礎となるプロトコルを保護することです。ユーザーは同じプロセスを使用してアクセサリを追加し、アプリは同じ API セットを使用してアクセサリを管理します。開発者は、これが HAP デバイスであるか Matter デバイスであるかを最初に判断する必要はありません。

これにより、最も一般的なアクセス コストが解決されます。既存の HomeKit アプリは、アクセサリの追加ポイントを書き換える必要がありません。ユーザーが Matter QR コードをスキャンすると、システムは使い慣れた HomeKit セットアップ プロセスを続行します。

セットアップ API を通じて独自のハブに接続する

アプリが独自のホーム ハブを管理する場合は、アプリが管理する家と部屋をシステムに伝える必要があります。システム UI にはこれらの選択肢が表示されます。ユーザーが選択を完了すると、iOS は内線番号を呼び出します。HMCHIPServiceRequestHandlerサブクラスを使用して、拡張機能に 3 つのこと (アクセサリのペアリング、ルームのリストの返し、名前とルームの構成) を実行させます。

このようにして、アプリは独自のトポロジとハブ ロジックを保持しながら、Apple のシステム レベルのアクセサリの追加エクスペリエンスを取得します。

CHIP.framework を使用してアクセサリを制御する

Matterのデータモデルは、エンドポイント、クラスター、属性、アクションで構成されます。ライトにはライト自体を表すエンドポイントがあり、これにはオン/オフ クラスターが含まれ、クラスターにはスイッチ ステータスを表す属性が含まれます。 CHIP.framework は、これらの概念をコード インターフェイスとして公開します。

開発者は、ペアリングされたデバイスを取得した後、クラスター オブジェクトを作成し、属性の切り替えや読み取りなどの操作を実行できます。この講義では、電球スイッチを例として、デバイス ID からステータスを読み取るまでの完全なパスを示します。

詳細

1. 既存の HomeKit API が Matter QR コードを認識し始める

04:58

講演の中で、Appleはまず、アクセサリを追加するために既存のHomeKitにアクセスできることを披露した。 iOS 15 開発者プレビューでは、このポータルによって呼び出される QR コード スキャナーは、HAP QR コードと Matter QR コードを認識します。

home.addAndSetupAccessories() { error in
    if let error = error {
         print("Error occurred in accessory setup \(error)")
    } else {
         print("Successfully added accessory to HomeKit")
    }
}

キーポイント:

  • home.addAndSetupAccessories()HomeKit システムの追加プロセスを開始します。
  • 閉鎖中error追加プロセスが失敗したかどうかを示します。
  • if let error = errorスキャン、ペアリング、セットアップ中のエラーを処理します。
  • elseこのブランチは、アクセサリが HomeKit に正常に追加されたことを示します。
  • iOS 15 開発者プレビューでは、同じスキャン プロセスが Matter QR コードの認識を開始します。

このコードの重要な点は、「新しいエントリが必要ない」ということです。すでに HomeKit アプリをお持ちで、この API を使用して HAP アクセサリを追加している場合は、同じエントリ ポイントを使用して Matter アクセサリのテストを開始できます。

2. トポロジーオブジェクトを使用して案件セットアップ API を開始する

09:12

アプリが Matter アクセサリを独自のホーム ハブに接続する必要がある場合、まずアプリが管理するホーム リストをシステムに引き渡す必要があります。システムは、このトポロジに基づいて選択ページを表示します。

let homes = proprietaryHomeStorage.homes.map { home in
    HMCHIPServiceHome(uuid: home.uuid, name: home.name)
}

let topology = HMCHIPServiceTopology(homes: homes)
let setupManager = HMAccessorySetupManager()

do {
    try await setupManager.addAndSetUpAccessories(for: topology)
    print("Successfully added accessory to my app")
} catch {
    print("Error occurred in accessory setup \(error)")
}

キーポイント:

  • proprietaryHomeStorage.homesアプリ自体が保存する家族リストです。
  • mapあなた自身の家を次のように変換しますHMCHIPServiceHome、予約するuuidそしてname
  • HMCHIPServiceTopology(homes:)このアプリが管理できる家のコレクションについて説明します。
  • HMAccessorySetupManager()システムアクセサリ設定マネージャーを作成します。
  • try await setupManager.addAndSetUpAccessories(for:)Matter アクセサリの追加プロセスを開始し、Swift async/await を使用して結果を処理します。
  • catchセットアッププロセスでエラーを検出します。

講演では、トポロジにホームが 1 つしかない場合、ユーザーの意図がすでに明らかであるため、システムはホーム選択カードをスキップすると述べました。複数の家がある場合、システムはユーザーにどの家を追加するかを選択するよう求めます。

3. マッチメイキング、ルームリスト、構成を担当する拡張機能

11:27

セットアップ API のシステム UI は、スキャンとページ フローを担当します。実際のペアリングと構成は、アプリ拡張機能によって行われます。拡張機能には継承が必要ですHMCHIPServiceRequestHandler、3 つのメソッドをオーバーライドします。

class RequestHandler: HMCHIPServiceRequestHandler, CHIPDevicePairingDelegate {

    override func rooms(in: HMCHIPServiceHome) async throws -> [HMCHIPServiceRoom] {
        // iOS is querying for rooms that match the given home.  These rooms will be shown in system UI and the selection will be vended back to your extension's `configureAccessory` function
   }

    override func pairAccessory(in: HMCHIPServiceHome, onboardingPayload: String) async throws -> Void {
        // iOS is instructing the extension to pair the accessory via CHIP.framework
   }

    override func configureAccessory(named accessoryName: String, room accessoryRoom: HMCHIPServiceRoom) async throws -> Void {
       // iOS is instructing the extension to apply configuration via CHIP.framework.
    }
}

キーポイント:

  • RequestHandler拡張機能のメインのリクエスト処理クラスです。
  • HMCHIPServiceRequestHandleriOSからのセットアップリクエストを受信します。
  • CHIPDevicePairingDelegateCHIP.framework ペアリング プロセスに参加するために使用されます。
  • rooms(in:)指定されたホームの下にある部屋のリストを返します。システム UI はこれらの部屋をユーザーに表示します。
  • pairAccessory(in:onboardingPayload:)スキャンされた Matter オンボーディング ペイロードを受信し、CHIP.framework 経由で安全なペアリングを確立します。
  • configureAccessory(named:room:)ユーザーが入力したアクセサリ名と部屋を受け取り、CHIP.frameworkを通じて設定を書き込みます。

講演では、開発者がこれら 3 つのメソッドを実装した後、UI 表示、ステップ切り替え、エラー処理がシステムによって処理されることが明確に述べられました。これにより、アプリはコードをホーム ハブと Matter ペアリング ロジックに集中させることができます。

4. Matter データ モデルを理解する

12:29

Matter アクセサリは、データ モデルを通じて機能を公開します。スピーチはエンドポイント(エンドポイント)、クラスター(能力集合)、アトリビュート(状態値)、アクション(アクション)の4つの階層で説明されます。

// Matter data model used in the session:
// Accessory
// └── Endpoint: lightEndpoint
//     └── Cluster: CHIPOnOff
//         └── Attribute: OnOff
//             ├── Action: toggle
//             └── Action: readAttributeOnOff

キーポイント:

  • Endpoint情報エンドポイントやライトエンドポイントなど、アクセサリ内の個別にアドレス指定可能な論理機能を表します。
  • Cluster明るさ、色、電力制御などのエンドポイントの機能を表します。
  • Attributeライトのスイッチ状態など、アクセサリーの状態を示します。
  • Action読み取り、書き込み、レポートなど、属性によってサポートされる操作を表します。
  • スピーチはクラスタを HomeKit サービスと比較し、HomeKit の特性に帰属します。

この構造は、その後に続く制御コードを理解するのに役立ちます。まずデバイスを見つけ、次にエンドポイントを見つけ、次にクラスターを作成し、最後に属性に対する操作を開始します。

5. CHIP.framework を使用してライトのスイッチ状態を制御します

14:27

Apple は、CHIP.framework を介してライト アクセサリを操作する方法をデモンストレーションします。コードは共有コントローラーから始まり、ペアリングされたデバイスを取得し、次にオン/オフ クラスターを作成し、最後に切り替えを実行してステータスを読み取ります。

let controller = CHIPDeviceController.shared()
do {
    let device = try controller.getPairedDevice(accessoryDeviceID)
    let onOffCluster = CHIPOnOff(device: device,
                               endpoint: lightEndpoint,
                                  queue: DispatchQueue.main)
    onOffCluster?.toggle({ (error, values) in
        // Error handling code here
    })
    onOffCluster?.readAttributeOnOff(responseHandler: { error, response in
        if let state = response?[VALUE_KEY] as? NSInteger {
           updateLightState(state: state)
        }
    })
} catch {
    print("Error occurred in accessory control \(error)")
}

キーポイント:

  • CHIPDeviceController.shared()CHIP.frameworkの共有コントローラを取得します。
  • controller.getPairedDevice(accessoryDeviceID)ペアリング時に割り当てられたデバイス ID を使用して、アクセサリ ハンドルを取得します。
  • CHIPOnOff(device:endpoint:queue:)指定されたライト エンドポイントのオン/オフ クラスター ハンドルを作成します。
  • DispatchQueue.mainコールバック キューを指定します。この例では、アプリケーション インターフェイスのステータスを更新するために使用されます。
  • onOffCluster?.toggleオン/オフ属性の状態を切り替えるリクエスト。
  • readAttributeOnOffオン/オフ属性の現在のステータスを読み取るように要求します。
  • response?[VALUE_KEY] as? NSInteger応答辞書からステータス値を取得します。
  • updateLightState(state:)アプリの内部状態または読み取り結果を使用してインターフェイスを更新します。
  • catchペアリングされたデバイスの取得失敗などの制御エラーを処理します。

このコードは、Matter データ モデルの実際の使用法 (デバイス ID 位置決めアクセサリ、エンドポイント位置決めライト、クラスター位置決め電力制御機能、属性操作完了ステータスの読み取りと制御) に対応しています。

6. 接続されている複数の管理者を管理する

15:29

Matter を使用すると、複数の管理者が同じアクセサリに同時に接続できます。したがって、ホーム アプリには接続済みサービス領域が追加され、ユーザーはアクセサリが現在どの管理者に接続されているかを確認したり、ペアリング モードを再度有効にして新しい管理者がアクセスできるようにしたりできます。

// Home app management model described in the session:
// 1. Show connected admins under Connected Services.
// 2. Let users manage connected admins.
// 3. Let users turn on pairing mode again.

キーポイント:

  • Connected Servicesホーム アプリ内の、接続されている管理者が表示される領域です。
  • 複数の管理者により、ユーザーは同じ Matter アクセサリを複数のエコシステムまたはハブに接続できます。
  • ペアリング モードを再度有効にすると、新しい管理者は同じアクセサリに接続できるようになります。
  • 機能のこの部分はホーム アプリによってデモンストレーションされており、サードパーティ API コードはスピーチでは示されていません。

これはアプリの設計にとって重要です。アクセサリは複数のシステムで管理されている可能性があり、アプリのステータス ページは「同じデバイスが他の当事者によって管理されている」という現実を受け入れることができる必要があります。

重要ポイント

  1. やるべきこと: 既存の HomeKit アプリにエントリを追加して、Matter アクセサリを追加します。 実行する価値がある理由:addAndSetupAccessories()iOS 15の開発者プレビューでQRコードが認識されるようになります。 開始方法: アプリ内の既存の HomeKit 追加フローをチェックして、それが呼び出されることを確認します。home.addAndSetupAccessories()次に、開発者プロファイルと Matter 開発者プレビュー環境を使用してスキャン コードをテストします。

  2. やるべきこと: 独自のスマート ホーム ハブに対してシステム レベルの Matter アクセサリ セットアップ プロセスを実行します。 実行する価値がある理由:HMAccessorySetupManagerシステム UI を使用してコードをスキャンしてホームを選択すると、拡張機能はビジネス ロジックのみを処理します。 開始方法: 自分の家をHMCHIPServiceHome、作成するHMCHIPServiceTopology、 電話addAndSetUpAccessories(for:)、そして気づきますHMCHIPServiceRequestHandler拡大。

  3. やるべきこと: Matter 電球コントロール ページを作成します。 実行する価値がある理由: CHIP.framework は、コントローラー、デバイス、クラスター、および属性の操作パスを公開します。 開始方法: を使用しますCHIPDeviceController.shared()コントローラーを取得するには、次を使用しますgetPairedDeviceデバイスを取得してからパスしますCHIPOnOff埋め込むtoggleそしてreadAttributeOnOff

  4. 操作方法: デバイスの詳細ページに部屋とアクセサリの構成ステータスを表示します。 実行する価値がある理由: セットアップ API を使用すると、ユーザーが選択できるようになります。HMCHIPServiceRoom拡張子にアクセサリ名を付けます。 開始方法:configureAccessory(named:room:)名前、部屋、アクセサリ ID をアプリ自体のストレージに書き込むと、デバイスの詳細ページがこのデータを読み取ります。

  5. 対処方法: ユーザーに「このアクセサリには他のマネージャーが存在する可能性があります」というメッセージを表示します。 実行する価値がある理由: Matter は複数の管理者をサポートしており、Home アプリには接続されたサービスが表示されます。 開始方法: デバイス管理ページの接続されたサービス領域を設計して、アクセサリが複数の管理者によって管理できることを示します。利用可能な特定の API は、Apple のその後のドキュメントと Matter オープン ソース API の対象となります。

関連セッション

コメント

GitHub Issues · utterances