iOS matter
https://developer.apple.com/cn/apple-home/matter/
Matter 是一種 智能家居設(shè)備的通用連接協(xié)議,由 CSA(Connectivity Standards Alliance,連接標(biāo)準(zhǔn)聯(lián)盟) 開發(fā),旨在讓不同品牌和平臺(tái)的智能家居設(shè)備能夠無縫互通。
Matter 允許設(shè)備通過 Wi-Fi、以太網(wǎng)、Thread 和 BLE 進(jìn)行通信,支持 蘋果 HomeKit、Google Home、Amazon Alexa 和 SmartThings 等智能家居生態(tài)系統(tǒng)。
Matter介紹
Matter 的核心特點(diǎn)
? 跨平臺(tái)兼容:支持 Apple、Google、Amazon、Samsung 等生態(tài)系統(tǒng)。
? 本地運(yùn)行:設(shè)備之間可以本地通信,無需云端支持,更快、更安全。
? 多種通信協(xié)議:支持 Wi-Fi、Thread、BLE、以太網(wǎng)(不支持 Zigbee 和 Z-Wave)。
? 低功耗支持:Thread 適用于低功耗設(shè)備(如智能燈泡、門鎖等)。
? 安全性強(qiáng):采用 AES 加密、區(qū)塊鏈認(rèn)證,確保設(shè)備通信安全。
Matter 設(shè)備如何通信?
Matter 主要通過 IP 協(xié)議(IPv6)進(jìn)行設(shè)備通信,并支持以下幾種方式:
1.Wi-Fi:用于高帶寬設(shè)備(如智能音箱、攝像頭)。
2.Thread:低功耗無線通信,適用于門鎖、燈泡等小型設(shè)備。
3.以太網(wǎng)(Ethernet):用于穩(wěn)定的有線連接設(shè)備(如智能家居中樞)。
4.BLE(藍(lán)牙低功耗):用于設(shè)備初次配對(不用于持續(xù)通信)。
Matter 設(shè)備的通信流程
1.設(shè)備發(fā)現(xiàn):使用 BLE 進(jìn)行初始配對,或通過 IP 發(fā)現(xiàn)設(shè)備。
2. 身份認(rèn)證:設(shè)備通過 區(qū)塊鏈證書(DAC - Device Attestation Certificate) 進(jìn)行安全認(rèn)證。
3.本地控制:設(shè)備通過 Wi-Fi 或 Thread 與其他設(shè)備本地通信,無需互聯(lián)網(wǎng)。
4.云端集成(可選):如果設(shè)備需要遠(yuǎn)程控制,可以通過 云端橋接(如 HomeKit、Alexa、Google Cloud)。
Matter 的實(shí)際應(yīng)用
? 兼容的智能設(shè)備:
?智能燈泡(如 Philips Hue、Nanoleaf)
?智能門鎖(如 August、Yale)
?智能開關(guān) & 插座(如 TP-Link、Eve)
?智能傳感器(如 Aqara、Eve)
?智能音箱 & 電視(如 Google Nest、Apple HomePod、Amazon Echo)

? 兼容的平臺(tái):
?Apple Home(iOS 16+)
? Google Home
? Amazon Alexa
? Samsung SmartThings
1. 配置 Matter SDK
在 Xcode 項(xiàng)目中,需要:
1. 啟用 Matter Support:
? 在 Signing & Capabilities 選項(xiàng)卡中,添加 Matter 配件開發(fā)權(quán)限。
2. 添加 MatterSupport 框架:
? 在 Frameworks, Libraries, and Embedded Content 中,添加 MatterSupport.framework。
2. 配對 Matter 設(shè)備
在 Matter 設(shè)備連接時(shí),我們需要 搜索可用設(shè)備 并 進(jìn)行配對。
?? 代碼示例
import UIKit
import MatterSupport
class ViewController: UIViewController {
let matterPairingManager = MTPairingManager()
override func viewDidLoad() {
super.viewDidLoad()
// 開始掃描并配對 Matter 設(shè)備
startPairing()
}
func startPairing() {
let setupPayload = MTSetupPayload(onboardingPayload: "MT:1234567890") // 示例二維碼數(shù)據(jù)
matterPairingManager.pairDevice(with: setupPayload) { result in
switch result {
case .success(let pairedDevice):
print("? 設(shè)備配對成功: \(pairedDevice)")
case .failure(let error):
print("? 設(shè)備配對失敗: \(error.localizedDescription)")
}
}
}
}
? 解釋:
? MTSetupPayload 解析 Matter 設(shè)備的二維碼或手動(dòng)輸入代碼。
? MTPairingManager.pairDevice 進(jìn)行 配對,成功后返回 設(shè)備信息。
3. 發(fā)現(xiàn) & 控制 Matter 設(shè)備
配對成功后,我們可以發(fā)現(xiàn)設(shè)備,并進(jìn)行 開/關(guān)控制(比如智能燈泡)。
?? 代碼示例
import Matter
class MatterDeviceController {
let deviceController = MTRDeviceController.sharedController
func turnOnLight(deviceID: UInt64) {
guard let device = deviceController.device(forNodeID: deviceID) else {
print("? 找不到設(shè)備")
return
}
let command = MTRBaseClusterOnOff()
command.off()
print("?? 發(fā)送開燈命令")
device.sendCommand(command, completion: { success, error in
if success {
print("? 燈已打開")
} else {
print("? 開燈失敗: \(String(describing: error?.localizedDescription))")
}
})
}
}
? 解釋:
? MTRDeviceController.sharedController.device(forNodeID:) 查找 Matter 設(shè)備。
? MTRBaseClusterOnOff().off() 發(fā)送 開燈/關(guān)燈 指令。
?通過 回調(diào) 確認(rèn)命令執(zhí)行成功或失敗。
4. 監(jiān)聽設(shè)備狀態(tài)(比如燈泡亮度變化)
如果你想監(jiān)聽 Matter 設(shè)備的狀態(tài)(如 燈泡亮度變化),可以使用 訂閱機(jī)制。
?? 代碼示例
import Matter
class MatterDeviceMonitor {
let deviceController = MTRDeviceController.sharedController
func subscribeToLightStatus(deviceID: UInt64) {
guard let device = deviceController.device(forNodeID: deviceID) else {
print("? 找不到設(shè)備")
return
}
device.subscribe(toCluster: MTRBaseClusterLevelControl.self, attributeId: 0x0000, minInterval: 1, maxInterval: 10) { value, error in
if let brightness = value as? UInt8 {
print("?? 當(dāng)前亮度: \(brightness)%")
} else {
print("? 訂閱失敗: \(String(describing: error?.localizedDescription))")
}
}
}
}
? 解釋:
? subscribe(toCluster:attributeId:minInterval:maxInterval:) 訂閱 亮度屬性 (0x0000)。
?回調(diào)返回亮度值(單位 %)。
? 適用于 智能燈泡、溫控器等可變設(shè)備。

?? Matter 的優(yōu)勢:
?通用協(xié)議,支持 Apple、Google、Amazon。
?本地運(yùn)行,無需云端,更安全。
?跨品牌兼容,支持不同廠商設(shè)備互聯(lián)。
1. Matter.framework
?? 主要用于:
? 控制 Matter 設(shè)備(如燈泡、門鎖、恒溫器)。
? 管理設(shè)備狀態(tài)(訂閱設(shè)備狀態(tài)變化,如燈泡亮度)。
? 發(fā)送指令(如開關(guān)燈、調(diào)整溫度)。
? 本地和遠(yuǎn)程控制(可以通過 Apple Home 或自定義 App)。
?? 適用場景:
?開發(fā)智能家居 App,用于控制和管理 Matter 設(shè)備。
?智能家居平臺(tái)集成,支持 Apple HomeKit 和其他 Matter 設(shè)備。
?? 示例代碼(控制燈泡):
查看代碼
import Matter
class MatterDeviceController {
let deviceController = MTRDeviceController.sharedController
func turnOnLight(deviceID: UInt64) {
guard let device = deviceController.device(forNodeID: deviceID) else {
print("? 設(shè)備未找到")
return
}
let command = MTRBaseClusterOnOff()
command.on() // 開燈指令
device.sendCommand(command) { success, error in
if success {
print("? 燈已打開")
} else {
print("? 開燈失敗: \(String(describing: error?.localizedDescription))")
}
}
}
}
?? 關(guān)鍵點(diǎn):
? MTRDeviceController.sharedController:用于管理 Matter 設(shè)備。
? device.sendCommand(command):發(fā)送控制指令(如開燈、關(guān)門)。
2. MatterSupport.framework
?? 主要用于:
? 發(fā)現(xiàn)和配對 Matter 設(shè)備(設(shè)備加入本地網(wǎng)絡(luò))。
? 處理設(shè)備的配網(wǎng)和認(rèn)證(二維碼掃描或手動(dòng)輸入)。
? 添加設(shè)備到 HomeKit 或其他智能家居平臺(tái)。
?? 適用場景:
?初次連接 Matter 設(shè)備(類似 Wi-Fi 設(shè)備的配網(wǎng)過程)。
?配網(wǎng)、身份驗(yàn)證,確保設(shè)備能正常連接到本地網(wǎng)絡(luò)。
?? 示例代碼(掃描二維碼進(jìn)行配對):
查看代碼
import MatterSupport
class MatterPairingManager {
let pairingManager = MTPairingManager()
func pairDevice() {
let setupPayload = MTSetupPayload(onboardingPayload: "MT:1234567890") // 示例二維碼數(shù)據(jù)
pairingManager.pairDevice(with: setupPayload) { result in
switch result {
case .success(let pairedDevice):
print("? 設(shè)備配對成功: \(pairedDevice)")
case .failure(let error):
print("? 設(shè)備配對失敗: \(error.localizedDescription)")
}
}
}
}
?? 關(guān)鍵點(diǎn):
? MTPairingManager.pairDevice:用于 Matter 設(shè)備的配網(wǎng)和認(rèn)證。
?MTSetupPayload:包含設(shè)備的二維碼信息(可以是手動(dòng)輸入的代碼)。

?? MatterSupport 負(fù)責(zé) “配對 & 發(fā)現(xiàn)”,而 Matter 負(fù)責(zé) “控制 & 管理”。
浙公網(wǎng)安備 33010602011771號