更新请关注:Matter协议开发者指南:使用Matter SDK构建智能家居应用

智能家居的演变从根本上改变了我们日常生活中与技术互动的方式。从语音助手到自动化照明和安防系统,机遇似乎无穷无尽。然而,开在这个迅速扩张的领域中,开发者面临的最大挑战之一是确保互操作性,即各种智能设备无论品牌或平台如何,都能无缝协同工作的能力。
Matter是什么?为何它对智能家居协议至关重要?
MMatter 是一种全新的开源智能家居设备标准,旨在让您家中所有联网设备协同工作------无论品牌或平台如何。可以将其视为所有智能设备的通用语言,无论是智能灯具、恒温器、门锁还是安防摄像头。
在Matter出现之前,这就像一个令人沮丧的技术谜题。您可能拥有Alexa音箱、Google Nest恒温器和其他品牌的智能灯泡,但它们并不总是能良好协作。这是因为每个品牌都使用自己的系统,要将它们全部连接起来非常麻烦。Matter改变了这种现状。
为什么 Matter 对开发者和智能家居连接如此重要?
1. 万物互联
Matter确保无论您选择哪个品牌,智能设备都能相互通信。无论是Apple、Amazon还是Google设备,它们都能在你家中无缝协同工作。
2. 增强安全性
Matter将安全功能直接内置于系统中。您的设备会对数据进行加密,确保一切安全无虞。这对于控制门锁或摄像头等设备来说无疑是一种极大的保障。
3. 开发者更轻松
对于开发者而言,Matter 意味着他们能够创建一款适用于所有主流平台的应用程序或解决方案。无需再为每个系统(如Google Home、Apple HomeKit或Alexa)重复造轮子。这不仅效率更高,还能节省大量时间。
4. 面向未来
苹果、谷歌、亚马逊等大公司都在支持Matter,这意味着它旨在跟上新技术和潮流的发展。它的设计初衷是支持未来的设备,因此您的智能设备不会很快过时。
5. 消费者更安心
对于普通人来说,MMatter 确保你能够放心购买新的智能设备。你无需担心这些设备能否能与你现有设备协同工作。无论是现在还是将来,所有设备都能轻松实现同步。
简而言之,Matter通过将我们家中所有技术整合成一个连贯、安全且面向未来的系统,让我们的生活更轻松、更智能。对于开发者和消费者来说都是一个变革性的存在,确保所有设备都能平稳、安全地协同工作。
本指南将指导您完成在 iOS 应用程序中添加 Matter 设备的过程,为您提供构建安全、可互操作且面向未来的智能家居解决方案所需的工具。
准备进入智能家居集成的世界吧!
我们将使用 HomeKit,轻松地把 Matter 设备作为配件添加到我们的 iOS 应用程序中。Apple推荐HomeKit作为将Matter设备集成到iOS生态系统的最佳解决方案。作为Apple设备上Matter的中央枢纽,HomeKit 提供了一种流畅且安全的方式来管理这些设备。它处理所有关键任务,包括设备认证、安全密钥交换、网络详细信息共享以及设备设置。
通过使用 HomeKit,我们也在让我们的应用程序具备面向未来的能力。Apple公司确保 HomeKit 与最新的 Matter 标准、iOS 更新、新设备类型以及安全改进保持一致,从而使我们的应用程序始终保持兼容性和时效性。
使用CHIP工具配置Matter设备模拟器进行智能家居开发
让我们深入了解一下使用 CHIP(IP 上的连接家庭)工具配置 Matter 设备模拟器的过程。
运行Matter设备模拟器的先决条件和步骤:
步骤1:系统要求
对于macOS,请安装以下先决条件:
brew install openssl
brew install pkg-config
brew install ninja
brew installgit
brew install gcc
brew install python3
步骤2:设置开发环境
克隆Matter仓库:
git clone https://github.com/project-chip/connectedhomeip.git
导航到仓库目录:
cd connectedhomeip
更新子模块:
git submodule update --init
步骤3:构建环境设置
引导环境:
sh ./scripts/bootstrap.sh
激活环境:
source scripts/activate.sh
注意:授予执行权限以使目录可搜索/可访问
chmod +x scripts
步骤4:构建Lighting应用
在终端中执行以下命令以构建照明应用:
./scripts/examples/gn_build_example.sh examples/lighting-app/linux out/lighting-app
注意:执行此命令后,输出目录结构应如下所示:
connectedhomeip/
├── out/
│ └── lighting-app/
│ └── chip-lighting-app
├── scripts/
├── examples/
└── src/
步骤5:验证网络
检查您的网络接口:
ifconfig
对于WiFi,Mac上通常是en0
。
对于以太网,可能是en1
或其他接口。
步骤6:运行Matter Lighting模拟器
执行以下命令以启动Matter照明模拟器:
./out/lighting-app/chip-lighting-app --wifi--interface en0
命令解析:
-
./out/lighting-app/chip-lighting-app
:Matter照明设备模拟器的可执行文件。
-
--wifi
:指示模拟器使用 WiFi 进行网络连接。
-
--interface en0
:指定WiFi网络接口(Mac上WiFi通常为
en0
)。
目的:
-
在本地网络上模拟一个Matter照明设备。
-
使设备可被HomeKit发现。
-
允许将设备作为真实的Matter设备添加到您的Home应用中。
注意:
-
运行此命令时,请确保您位于
connectedhomeip
目录中。 -
en0
通常是Mac上的WiFi接口;可以使用
ifconfig
命令验证您的接口名称。 -
在尝试将模拟器添加到应用程序之前,模拟器必须处于运行状态。

完成!我们的Matter设备模拟器现在已在网络上运行。要通过HomeKit添加Matter设备,只需扫描二维码即可。您可以在控制台日志中找到该URL。

在浏览器中打开URL后,您应该会看到一个二维码。

常见问题及解决方案
1. 构建失败
如果构建失败,请尝试以下步骤:
-
清理构建:
rm-rf out/lighting-app
-
使用Debugging重新构建:
./scripts/examples/gn_build_example.sh examples/lighting-app/linux out/lighting-app --debug
2. Matter设备运行后无法添加配件
如果在 Matter 设备运行后无法添加配件,请按照以下步骤操作:
-
终止现有模拟器:
killall chip-lighting-app
-
重新构建模拟器:
./out/lighting-app/chip-lighting-app --wifi --interface en0
配置并设置您的 iOS 应用程序,以便通过 HomeKit 添加 Matter 设备
步骤 1:注册您的应用程序标识符,并在应用程序标识符设置和 Xcode 项目中启用以下列出的功能
-
HomeKit
-
访问WiFi信息
-
Matter允许设置负载

步骤 2:添加所需的 Info.plist 条目
<!-- Home Kit -->
<key>NSHomeKitUsageDescription</key>
<string>This app needs access to HomeKit to control your Matter devices</string>
<!-- Local Network -->
<key>NSLocalNetworkUsageDescription</key>
<string>This app needs access to discover and control Matter devices on your local network</string>
<!-- Bonjour Services -->
<key>NSBonjourServices</key>
<array>
<string>_matter._tcp</string>
<string>_matterc._udp</string>
</array>
注意:iOS 开发先决条件:
-
Xcode 14.0 或更高版本
-
测试设备上的 iOS 16.1 或更高版本
-
Apple 开发者账户
步骤 3:在 iOS 中使用 HomeKit SDK 设置新Home
class MatterManager: NSObject {
static let shared = MatterManager()
let homeManager = HMHomeManager()
var homesUpdateCallback: (() -> Void)?
private override init() {
super.init()
homeManager.delegate = self
}
func createHome(named name: String, completion: @escaping (Result<Void, Error>) -> Void) {
homeManager.addHome(withName: name) { [weak self] home, error in
if let error = error {
completion(.failure(error))
} else {
completion(.success(()))
self?.homesUpdateCallback?()
}
}
}
...
}
-
MatterManager 是一个单例类,可以通过 MatterManager.shared 来访问。
-
HomeKit 管理器
let homeManager =HMHomeManager()
这将创建一个Apple HomeKit 管理器实例,该实例负责管理家庭、房间和配件。
-
创建Home方法
func createHome(named name:String,completion: @escaping(Result<Void,Error>)->Void){
homeManager.addHome(withName: name){[weak self] home, error in
...
}
}
在该函数内部,我们从 HMHomeManager 调用 homeManager.addHome (withName: name)。此方法负责使用提供的名称将新home添加到 HomeKit 设置中。
步骤 4:将 Matter 设备作为配件集成到Home中
classMatterManager:NSObject{
...
privatelet setupManager =HMAccessorySetupManager()
...
func addAccessory(to home:HMHome)async throws {
let setupManager =HMAccessorySetupManager()
let request =HMAccessorySetupRequest()
// Configure the request for the home
request.homeUniqueIdentifier= home.uniqueIdentifier
// Perform the setup
do{
let result =tryawait setupManager.performAccessorySetup(using: request)
print("Accessory setup completed successfully: \(result)")
homesUpdateCallback?()
}catch{
print("Failed to setup accessory: \(error)")
throw error
}
}
...
}
HMAccessorySetupManager
负责配置 Matter 设备。 在这个函数中,我们创建一个 HMAccessorySetupRequest
并调用 performAccessorySetup
方法,该方法将 Matter 设备添加到Home中。 这个过程是异步的,因为它执行以下任务:
-
发现网络上的设备
-
处理安全握手
-
传输网络凭据
-
完成 Matter 设备配网流程
注意:在添加配件之前,请确保您的 Matter 设备模拟器正在运行。有关设置,请参考 "使用 CHIP 工具配置 Matter 设备模拟器" 指南中的步骤。

此时, Matter 设备应会在您的 Home 应用中显示为配件。您也可以在 Home 应用中进行验证,在那里您会看到该配件已添加到您的Home中。
步骤 5:控制Matter设备配件。
func toggleLight(_ accessory:HMAccessory)async throws {
guard let lightService = accessory.services.first(where:{ service in
service.serviceType==HMServiceTypeLightbulb
})else{
throwHMError(.invalidParameter)
}
guard let powerCharacteristic = lightService.characteristics.first(where:{ characteristic in
characteristic.characteristicType==HMCharacteristicTypePowerState
})else{
throwHMError(.invalidParameter)
}
// Toggle the current state
let currentValue = powerCharacteristic.valueas?Bool??false
tryawait powerCharacteristic.writeValue(!currentValue)
}
-
toggleLight
函数用于控制支持 HomeKit 的灯泡。
-
它会在配件的服务数组中搜索灯泡服务。具体来说,它会查找类型为
HMServiceTypeLightbulb
的服务。 -
然后,在该灯光服务中查找电源状态特性。此特性代表灯泡的on/off状态。
-
最后,执行实际的切换操作:读取当前电源状态(如果无法将该值读取为布尔值,则默认为 false)。使用!运算符反转该状态。
当灯打开时,你应该在终端中看到控制台日志显示 Toggle on/off from state 0 to 1
。

从状态 0 切换到 1(on/off):
0 = OFF状态
1 = ON状态
设备正在从关闭切换到开启
当灯光关闭时,你应该在终端中看到控制台日志显示 Toggle on/off from state 1 to 0
。

从状态 1 切换到 0(on/off):
0 = OFF状态
1 = ON状态
设备正在从ON切换到OFF
Matter协议开发者指南:使用Matter SDK构建智能
总结
希望你在通过 HomeKit 使用 iOS 应用程序配置 Matter 设备的过程中,既感到愉快又觉得有用。这种集成提供了一种流畅的方式,可让你直接从 iOS 应用程序控制智能设备,提升你的智能家居体验。