以下为开发阶段遇到的问题记录。
问题标题格式:[进度]标题 H3标题
进度值:待探索|探索中|待沟通|沟通中|持续跟进|无法解决|已解决|暂不用关心
问题详细描述
解决问题记录
结论 H4标题
通过拉取 Matter 开源库,运行 iOS 相关Demo,无法编译项目。
Apple已提供 Matter.framewrok,暂无需自行集成。该编译可作为Matter功能 Demo 体验。
切换分支后请执行如下命令
Matter 设备已经通过三方入网,且绑定到XXX APP,希望通过自己协议,在固件端开启配对模式。
无法解决,固件无法通过协议开启配对模式,开启配对模式必须通过管理员,即需要实现 Commissioner,走 Matter 协议开启。
设备分享相关功能,待 Commissioner 实现后才能开发。
在最开始的设计中,尝试自己扫描二维码,在二维码字段上区分 HomeKit 设备和 Matter,从而统一 HomeKit 和 Matter入网入口。在HomeKit 的相关 API 中找到相关方法,但是需要申请com.apple.developer.homekit.allow-setup-payload
和com.apple.developer.matter.allow-setup-payload
字段,通过代码级别支持,我们得知了相关字段是需要HomeKit 认证中间商申请,我们才有权使用。同时苹果工程师不建议我们使用自己识别二维码的方式配对设备。随着后续的Matter和 HomeKit接口统一,com.apple.developer.matter.allow-setup-payload
字段申请问题也不用关心了。
暂不用申请com.apple.developer.homekit.allow-setup-payload
使用 HomeKit 和MatterSuppor 方案,可能需要配置该字段。
开发者平台中对应项目已提供此字段开关,开启后即可在项目 xxx.entitlements
文件配置该字段。
请按需开启。
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代表一个生态系统吗?还是代表一个用户
来自 CSA Solutions 回复:
Fabric是一个安全域,它允许一组节点在域的上下文中被识别和通信。 你可以说每个Fabric代表一个公司/生态系统,由具有管理员角色的节点管理,通常也是Commissioner,但可能有多个 Commissioner,Commissioner不是fabric的所有者,它的作用是让新的节点加入fabric。
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 部分值为保留值。
Operational NodeID范围:0x0000_0000_0000_0001 to 0xFFFF_FFEF_FFFF_FFFF 即:1-18446744004990075000
节点ID是一个64位值,用于标识Fabric中的节点。它可以被随机地或算法地选择,但在将其提供给 节点或以其他方式使用之前,应确保节点ID在Fabric中分配的唯一性
具体生成规则自行商定,只需要符合 NodeID 约束和唯一性。
来自亚洲 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 相关库,不需要认证软件模块。
自定义 Commissioner 需要一些参数初始化,其中涉及到操作凭证的证书,暂无法确定 RCA怎么获取。
来自亚洲 Matter 相关负责人Laura Shang [email protected]回复
操作证书一般是由生态(如Apple,Amazon)的控制设备或软件来分配的。
来自 CSA Solutions 回复:
每个管理fabric的应用程序所有者都将提供自己的受信任的根CA。这个根CA证书是自签名的,无需验证,而是受信任的,因为它们是由受信任的专员提供的。
证书生成参考资料:Matter开源 – chip-cert – README
RCA 为自签的,具体签发看需求
其中IPK 和 VenderID是必须的。
通过调研,Apple Home 和 涂鸦使用同一个 RCA,但是不同用户 FabricID 不同,猜测是云端统一用不同 FabricID生成 NOC。如果使用云端签发 NOC,就需要移动端加载 NOC和私钥,以初始化 Commissioner.
配对成功后,通用步骤需要 mdns 发现目标设备,走 XXX APP 私有协议绑定用户。能否直接通过 Matter 协议进行用户信息交互?
从Apple的Matter Suppor in iOS16可以得出,官方推荐使用MatterSuppor和 HomeKit方式,无法确定能否直接使用 Matter.framework ?
在使用 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)不安装该文件,不开启开发者模式,依然报蓝牙交互错误。
错误如下:
[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 。
错误如下:
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相关章节可知:
取决使用哪种方法开启配对模式,但是大部分其他应用都是使用 ECM。
需要确定固件是否支持 BCM,自定义 Commissioner 再决定使用哪种方式。
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 回复
证书链相关的同步:比如RCA、ICA(如果有的)、NOC(配对节点的,非设备)、fabricID
ipk