iOS Matter开发问题记录

以下为开发阶段遇到的问题记录。

问题记录模板

问题标题格式:[进度]标题 H3标题

进度值:待探索|探索中|待沟通|沟通中|持续跟进|无法解决|已解决|暂不用关心

问题详细描述

解决问题记录

结论 H4标题

[已解决]开源项目编译不过

通过拉取 Matter 开源库,运行 iOS 相关Demo,无法编译项目。

结论

Apple已提供 Matter.framewrok,暂无需自行集成。该编译可作为Matter功能 Demo 体验。

切换分支后请执行如下命令

  • 同步子模块:git submodule update --init
  • 清理环境(可不执行下面环境编译):source scripts/bootstrap.sh
  • 环境编译:source scripts/activate.sh

[无法解决]能否通过自己的协议在固件开启配对模式?

Matter 设备已经通过三方入网,且绑定到XXX APP,希望通过自己协议,在固件端开启配对模式。

结论

无法解决,固件无法通过协议开启配对模式,开启配对模式必须通过管理员,即需要实现 Commissioner,走 Matter 协议开启。

设备分享相关功能,待 Commissioner 实现后才能开发。

[暂不用关心]HomeKit自行扫码字段申请

在最开始的设计中,尝试自己扫描二维码,在二维码字段上区分 HomeKit 设备和 Matter,从而统一 HomeKit 和 Matter入网入口。在HomeKit 的相关 API 中找到相关方法,但是需要申请com.apple.developer.homekit.allow-setup-payloadcom.apple.developer.matter.allow-setup-payload字段,通过代码级别支持,我们得知了相关字段是需要HomeKit 认证中间商申请,我们才有权使用。同时苹果工程师不建议我们使用自己识别二维码的方式配对设备。随着后续的Matter和 HomeKit接口统一,com.apple.developer.matter.allow-setup-payload字段申请问题也不用关心了。

结论

暂不用申请com.apple.developer.homekit.allow-setup-payload

[已解决]如何配置com.apple.developer.matter.allow-setup-payload?

使用 HomeKit 和MatterSuppor 方案,可能需要配置该字段。

结论

开发者平台中对应项目已提供此字段开关,开启后即可在项目 xxx.entitlements 文件配置该字段。

请按需开启。

[待沟通]HomeKit切换家庭接口不稳定

HomeKit 在15.5支持不传入家庭ID则可以选择家庭的接口,在iOS16.0开发时,配对 Matter 和 HomeKit 设备都可以按照预设选择家庭,但是在其他版本,该接口都出现了异常错误,严重影响正常使用,暂猜测该接口不稳定,评估后暂不使用该接口,同时也会导致用户在配对 Matter时,无法选择有 Hub 的房间。

结论

持续跟进,可能由于固件HomeKit SDK太老。

[已解决]Fabric的定义?

官方文档解释

一个Fabric是一组通过访问交互模型中定义的数据模型元素来交互的节点。一个Fabric是一个安全 域, 使得一组节点在该域内可以被识别并进行通信。当一个节点可以在一个Fabric中被识别和交 互时,它被认为是“在”该Fabric中。当一个交互发生在一个Fabric范围内时,该交互被认为是发生“ 在”该Fabric中(见访问Fabric)。交互发生在一个特定Fabric,或者和具体的Fabric无关(见访 问Fabric)。一个节点可以在一个或多个fabric上被识别和交互。 这里不定义一个Fabric如何建立 以及节点如何加入到Fabric,由较低层规范来定义。

疑问点:

一个 Fabric代表一个生态系统吗?还是代表一个用户

来自 CSA Solutions 回复:

Fabric是一个安全域,它允许一组节点在域的上下文中被识别和通信。 你可以说每个Fabric代表一个公司/生态系统,由具有管理员角色的节点管理,通常也是Commissioner,但可能有多个 Commissioner,Commissioner不是fabric的所有者,它的作用是让新的节点加入fabric。

[已解决]Fabric ID 怎么使用?

Commissioner 初始化时需要指定 FabricID,不知道这个 FabricID 是否需要与RCA一致(不确定 RCA 是否需要指定 FabricID ),还是每个用户使用一个 FabricID? 从苹果的配对结果来看,使用 AppleHome 不同账号,RootPublicKey 一致,Fabric ID 不一致。

Matter 协议文档

Fabric ID是一个64位值,用于标识Fabric,并限定于特定根CA。例如,具有相同Fabric ID的两 个Fabric,除非其根CA相同,否则不等价。Fabric ID可以被随机地或算法地选择,但应在给定根CA下具有唯一性。在分配Fabric ID之前,如果配网节点认为在当前配网环境中存在适用的Fabric ,应尝试确保复用和连接现有Fabric。用于确定本地Fabric ID是否存在的方法是厂商定义的

结论

根 RCA可以不指定 Fabric

如果RCA指定了 FabricID ,则ICA和 NOC 的 FabricID 必须与 RCA一致。

根据对 Apple 和 Tuya 调查,生态内Root Public Key 一致,不同用户 FabricID 不一致。同一个用户不同设备可以同步控制Matter 设备。

[已确定]NodeID和其范围?

根据协议,NodeID 部分值为保留值。

Operational NodeID范围:0x0000_0000_0000_0001 to 0xFFFF_FFEF_FFFF_FFFF 即:1-18446744004990075000

节点ID是一个64位值,用于标识Fabric中的节点。它可以被随机地或算法地选择,但在将其提供给 节点或以其他方式使用之前,应确保节点ID在Fabric中分配的唯一性

结论

具体生成规则自行商定,只需要符合 NodeID 约束和唯一性。

[已解决]如果我们在 App 内实现Commissioner,我们的 App 需要认证吗?

来自亚洲 Matter 相关负责人Laura Shang [email protected]回复:

App实现commissioner功能应该需要进行Software components认证

来自 CSA Solutions回复:

Matter Application(比如将设备委托到Matter fabric的移动应用程序)都受Matter软件组件认证计划的约束

疑问点:

苹果声称已经认证,但不确定直接使用 Matter.framwork 的状态。

来自Apple高浩回复:

不需要,如果直接使用 Matter.framework 框架。不需要去认证software component

如需认证,通过第三方机构认证。

结论

如果使用Apple Matter 相关库,不需要认证软件模块。

[已解决]操作凭证的证书链(比如 RCA、ICA)如何获取?我们是签发还是从认证机构获取?

自定义 Commissioner 需要一些参数初始化,其中涉及到操作凭证的证书,暂无法确定 RCA怎么获取。

来自亚洲 Matter 相关负责人Laura Shang [email protected]回复

操作证书一般是由生态(如Apple,Amazon)的控制设备或软件来分配的。

来自 CSA Solutions 回复:

每个管理fabric的应用程序所有者都将提供自己的受信任的根CA。这个根CA证书是自签名的,无需验证,而是受信任的,因为它们是由受信任的专员提供的。

证书生成参考资料:Matter开源 – chip-cert – README

结论

RCA 为自签的,具体签发看需求

其中IPK 和 VenderID是必须的。

  • Commissioner 本地签发,需要 IPK、nocSigner(即私钥)、FabricID、VenderID 参数即可,每个Commissioner 都不同,后续也无法同步。
  • 云端签发根证书,云端签发一个RCA(所以应用都使用同一个)、根据 RCA ,根据RCA的私钥生成 nocSigner,自行指定FabricID Commissioner 自己签发自己的 NOC 和设备的 NOC。(如果多设备同步控制注意要同步 IPK 和 FabricID)
  • 【待验证方案】云端签发,云端签发 所有证书和信息,可用于同步控制 Matter 设备。

通过调研,Apple Home 和 涂鸦使用同一个 RCA,但是不同用户 FabricID 不同,猜测是云端统一用不同 FabricID生成 NOC。如果使用云端签发 NOC,就需要移动端加载 NOC和私钥,以初始化 Commissioner.

[探索中]Matter 配对成功后能否通过协议自定义传输信息?

配对成功后,通用步骤需要 mdns 发现目标设备,走 XXX APP 私有协议绑定用户。能否直接通过 Matter 协议进行用户信息交互?

[沟通中]能否直接用Matter.famework进行 Commissioner 实现?

从Apple的Matter Suppor in iOS16可以得出,官方推荐使用MatterSuppor和 HomeKit方式,无法确定能否直接使用 Matter.framework ?

[沟通中]Matter.famework如何解决蓝牙配置问题?

在使用 Matter.framework 实现自定义 Commissioner 时,如果手机没有安装EnableBluetoothCentralMatterClientDeveloperMode.mobileconfig,会在蓝牙交互阶段失败。错误如下

[all]  [1673334091732] [65036:3126860] CHIP: [BLE] BLE:Error writing Characteristics in Chip service on the device:
 [The specified UUID is not allowed for this operation.]
2023-01-10 15:01:31.752887+0800 intellect_socket[65036:3127479] [all]  [1673334091752] [65036:3127479] CHIP: 
[IN] Failed to establish BLE connection: ../../../../../../../../Sources/CHIPFramework/connectedhomeip/src/platform/Darwin/BleConnectionDelegateImpl.mm:260:
 Ble Error 0x00000407: GATT write characteristic operation failed

我们暂时没有找到相关文档解决这个问题。用户是否可以不用安装这个文件即可配对?

已验证 Release 版本 APP同样会发生此错误。

来自 Apple Chirp Gerhardt Gao 回复:

就目前而言,缺少这个文件,无法用 Matter.framework来配对

如果设备没有开启开发者模式,则不需要安装这个文件。

经测试(iOS16.2)不安装该文件,不开启开发者模式,依然报蓝牙交互错误。

[已解决]直接使用 Matter.framework,设备验证失败,如何解决缺少 paa?

错误如下:

[all] [1673335744706] [65474:3146974] CHIP: [CTL] Failed in verifying 'Attestation Information' command received from the device: err 101.
 Look at AttestationVerificationResult enum to understand the errors
2023-01-10 15:29:04.908618+0800 intellect_socket[65474:3146974] MTRDeviceAttestationDelegateBridge::OnDeviceAttestationFailed completed with result: 101
Error Domain=MTRErrorDomain Code=8 "Integrity check failed." UserInfo={NSLocalizedDescription=Integrity check failed., underlyingError=} 

我们设备已经通过认证,且相关证书已经上传到 DCL,我们需要自己设置MTRControllerFactoryParams 的paaCerts 属性吗?我们发现如果没有设置,则会提示设备验证失败。意味着我们需要自行在 DCL 中下载证书进行设备验证吗?

已经尝试设置 paa 参数,不会提示缺少 paa和设备验证失败。

如果需要自己添加 paa 参数,从哪里获取所有已经认证的 Matter 设备的paa 相关证书?

示例值参考:https://on.dcl.csa-iot.org/#/Query/ApprovedCertificatesAll

结论

初始化 Controller 时去加载所有 paa 。

[暂不用关心]直接使用 Matter.framework,设备验证失败,如何解决缺少 CD?

错误如下:

CHIP: [CTL] Client selected error: 601 ``for` `failed ``'Attestation Information'` `for` `device``CHIP: [CTL] Failed to perform commissioning step 8

结论

不同版本代码问题,开源项目会有这个问题,Matter.framework没有该问题。

[已确定]开启配对模式后,原来的二维码和手动码还可以使用吗?

自己代码测试开启配对,可以使用原来二维码和手动码配对。但时候使用其他 APP 开启配对模式,无法再使用原来码配对。

根据 Matter 协议BCM和ECM相关章节可知:

  • 基础入网方式(BCM):节点可选实现,这个流程可以扫描 二维码,或者使用节点的配网信息的手动配对码的形式完成。
  • 增强型入网方式(ECM):节点必须实现,管理员节点会选择一个新的随机数密码 并且会计算后发出相关的PAKE密码的校验码给另一个节点,生成新的码用于配对。

结论

取决使用哪种方法开启配对模式,但是大部分其他应用都是使用 ECM。

需要确定固件是否支持 BCM,自定义 Commissioner 再决定使用哪种方式。

[已解决]IPK 是什么?

IPK: 身份保护密钥,用于保证 CESA(证书认证会话建立)正常进行的(不用于操作通信),在次阶段会鉴于根公钥、Fabric标识符和身份保护密钥Epoch密钥的值,用于计算目的节点标识符的派生操作组密钥。

传入的 IpkValue 应存储在组密钥管理的Cluster(请见[ref_cmd_KeySetWrite])内 的Fabric-scoped槽中, 以供后续CASE使用

注意 IPK 不可轻易替换改变,除非把该 Controller 下的所有要交互的设备的 ipk 都替换了。 否则引起设备后续不能控制(因为CASE 阶段会失败)。

结论

IPK 是 Matter Controller 重要参数,对单一用户,不可随意更改,需要本地化保存(keyChain)

[已解决]如何在两个客户端同步控制?

如果用户在 A手机配对 Matter 设备,如何在 B手机能够控制设备。需要哪些参数同步。

来自开源库https://github.com/project-chip/connectedhomeip/issues/24961 回复

结论

  1. 证书链相关的同步:比如RCA、ICA(如果有的)、NOC(配对节点的,非设备)、fabricID

  2. ipk

[待探索]如何发现周围 Matter 设备?

你可能感兴趣的:(Matter,Matter,HomeKit,CHIP,智能设备)