[置顶] 【鸿蒙/Harmony】 ArkUI
[置顶] RxSwift + Moya + ObjectMapper
iOS matter
https://developer.apple.com/cn/apple-home/matter/
Matter 是一种 智能家居设备的通用连接协议,由 CSA(Connectivity Standards Alliance,连接标准联盟) 开发,旨在让不同品牌和平台的智能家居设备能够无缝互通。
Matter 允许设备通过 Wi-Fi、以太网、Thread 和 BLE 进行通信,支持 苹果 HomeKit、Google Home、Amazon Alexa 和 SmartThings 等智能家居生态系统。
Matter介绍
Matter 的核心特点
✅ 跨平台兼容:支持 Apple、Google、Amazon、Samsung 等生态系统。
✅ 本地运行:设备之间可以本地通信,无需云端支持,更快、更安全。
✅ 多种通信协议:支持 Wi-Fi、Thread、BLE、以太网(不支持 Zigbee 和 Z-Wave)。
✅ 低功耗支持:Thread 适用于低功耗设备(如智能灯泡、门锁等)。
✅ 安全性强:采用 AES 加密、区块链认证,确保设备通信安全。
Matter 设备如何通信?
Matter 主要通过 IP 协议(IPv6)进行设备通信,并支持以下几种方式:
1.Wi-Fi:用于高带宽设备(如智能音箱、摄像头)。
2.Thread:低功耗无线通信,适用于门锁、灯泡等小型设备。
3.以太网(Ethernet):用于稳定的有线连接设备(如智能家居中枢)。
4.BLE(蓝牙低功耗):用于设备初次配对(不用于持续通信)。
Matter 设备的通信流程
1.设备发现:使用 BLE 进行初始配对,或通过 IP 发现设备。
2. 身份认证:设备通过 区块链证书(DAC - Device Attestation Certificate) 进行安全认证。
3.本地控制:设备通过 Wi-Fi 或 Thread 与其他设备本地通信,无需互联网。
4.云端集成(可选):如果设备需要远程控制,可以通过 云端桥接(如 HomeKit、Alexa、Google Cloud)。
Matter 的实际应用
✅ 兼容的智能设备:
•智能灯泡(如 Philips Hue、Nanoleaf)
•智能门锁(如 August、Yale)
•智能开关 & 插座(如 TP-Link、Eve)
•智能传感器(如 Aqara、Eve)
•智能音箱 & 电视(如 Google Nest、Apple HomePod、Amazon Echo)
✅ 兼容的平台:
•Apple Home(iOS 16+)
• Google Home
• Amazon Alexa
• Samsung SmartThings
1. 配置 Matter SDK
在 Xcode 项目中,需要:
1. 启用 Matter Support:
• 在 Signing & Capabilities 选项卡中,添加 Matter 配件开发权限。
2. 添加 MatterSupport 框架:
• 在 Frameworks, Libraries, and Embedded Content 中,添加 MatterSupport.framework。
2. 配对 Matter 设备
在 Matter 设备连接时,我们需要 搜索可用设备 并 进行配对。
🔹 代码示例
import UIKit
import MatterSupport
class ViewController: UIViewController {
let matterPairingManager = MTPairingManager()
override func viewDidLoad() {
super.viewDidLoad()
// 开始扫描并配对 Matter 设备
startPairing()
}
func startPairing() {
let setupPayload = MTSetupPayload(onboardingPayload: "MT:1234567890") // 示例二维码数据
matterPairingManager.pairDevice(with: setupPayload) { result in
switch result {
case .success(let pairedDevice):
print("✅ 设备配对成功: \(pairedDevice)")
case .failure(let error):
print("❌ 设备配对失败: \(error.localizedDescription)")
}
}
}
}
✅ 解释:
• MTSetupPayload 解析 Matter 设备的二维码或手动输入代码。
• MTPairingManager.pairDevice 进行 配对,成功后返回 设备信息。
3. 发现 & 控制 Matter 设备
配对成功后,我们可以发现设备,并进行 开/关控制(比如智能灯泡)。
🔹 代码示例
import Matter
class MatterDeviceController {
let deviceController = MTRDeviceController.sharedController
func turnOnLight(deviceID: UInt64) {
guard let device = deviceController.device(forNodeID: deviceID) else {
print("❌ 找不到设备")
return
}
let command = MTRBaseClusterOnOff()
command.off()
print("💡 发送开灯命令")
device.sendCommand(command, completion: { success, error in
if success {
print("✅ 灯已打开")
} else {
print("❌ 开灯失败: \(String(describing: error?.localizedDescription))")
}
})
}
}
✅ 解释:
• MTRDeviceController.sharedController.device(forNodeID:) 查找 Matter 设备。
• MTRBaseClusterOnOff().off() 发送 开灯/关灯 指令。
•通过 回调 确认命令执行成功或失败。
4. 监听设备状态(比如灯泡亮度变化)
如果你想监听 Matter 设备的状态(如 灯泡亮度变化),可以使用 订阅机制。
🔹 代码示例
import Matter
class MatterDeviceMonitor {
let deviceController = MTRDeviceController.sharedController
func subscribeToLightStatus(deviceID: UInt64) {
guard let device = deviceController.device(forNodeID: deviceID) else {
print("❌ 找不到设备")
return
}
device.subscribe(toCluster: MTRBaseClusterLevelControl.self, attributeId: 0x0000, minInterval: 1, maxInterval: 10) { value, error in
if let brightness = value as? UInt8 {
print("💡 当前亮度: \(brightness)%")
} else {
print("❌ 订阅失败: \(String(describing: error?.localizedDescription))")
}
}
}
}
✅ 解释:
• subscribe(toCluster:attributeId:minInterval:maxInterval:) 订阅 亮度属性 (0x0000)。
•回调返回亮度值(单位 %)。
• 适用于 智能灯泡、温控器等可变设备。
🔹 Matter 的优势:
•通用协议,支持 Apple、Google、Amazon。
•本地运行,无需云端,更安全。
•跨品牌兼容,支持不同厂商设备互联。
1. Matter.framework
📌 主要用于:
✅ 控制 Matter 设备(如灯泡、门锁、恒温器)。
✅ 管理设备状态(订阅设备状态变化,如灯泡亮度)。
✅ 发送指令(如开关灯、调整温度)。
✅ 本地和远程控制(可以通过 Apple Home 或自定义 App)。
📌 适用场景:
•开发智能家居 App,用于控制和管理 Matter 设备。
•智能家居平台集成,支持 Apple HomeKit 和其他 Matter 设备。
📌 示例代码(控制灯泡):
查看代码
import Matter
class MatterDeviceController {
let deviceController = MTRDeviceController.sharedController
func turnOnLight(deviceID: UInt64) {
guard let device = deviceController.device(forNodeID: deviceID) else {
print("❌ 设备未找到")
return
}
let command = MTRBaseClusterOnOff()
command.on() // 开灯指令
device.sendCommand(command) { success, error in
if success {
print("✅ 灯已打开")
} else {
print("❌ 开灯失败: \(String(describing: error?.localizedDescription))")
}
}
}
}
🔹 关键点:
• MTRDeviceController.sharedController:用于管理 Matter 设备。
• device.sendCommand(command):发送控制指令(如开灯、关门)。
2. MatterSupport.framework
📌 主要用于:
✅ 发现和配对 Matter 设备(设备加入本地网络)。
✅ 处理设备的配网和认证(二维码扫描或手动输入)。
✅ 添加设备到 HomeKit 或其他智能家居平台。
📌 适用场景:
•初次连接 Matter 设备(类似 Wi-Fi 设备的配网过程)。
•配网、身份验证,确保设备能正常连接到本地网络。
📌 示例代码(扫描二维码进行配对):
查看代码
import MatterSupport
class MatterPairingManager {
let pairingManager = MTPairingManager()
func pairDevice() {
let setupPayload = MTSetupPayload(onboardingPayload: "MT:1234567890") // 示例二维码数据
pairingManager.pairDevice(with: setupPayload) { result in
switch result {
case .success(let pairedDevice):
print("✅ 设备配对成功: \(pairedDevice)")
case .failure(let error):
print("❌ 设备配对失败: \(error.localizedDescription)")
}
}
}
}
🔹 关键点:
• MTPairingManager.pairDevice:用于 Matter 设备的配网和认证。
•MTSetupPayload:包含设备的二维码信息(可以是手动输入的代码)。
📌 MatterSupport 负责 “配对 & 发现”,而 Matter 负责 “控制 & 管理”。