Інтеграція Matter-протоколу для IoT-пристроїв у мобільний додаток
Matter 1.x — це не заміна Bluetooth або Wi-Fi, а унірікований протокол прикладного рівня поверх IP. Пристрій може бути підключений по Thread, Wi-Fi або Ethernet — Matter працює одинаково. Сенс для розробника мобільного додатка простий: один SDK, та пристрої від різних виробників управляються через єдиний API. Але шлях від «один SDK» до робочого production-коду довший, ніж здається на старті.
Зоопарк екосистем та єдиний стандарт
До Matter кожен виробник робив власний протокол. IKEA TRÅDFRI говорив CoAP/DTLS, Philips Hue — Zigbee + REST, Tuya — хмарний MQTT з проприетарним шифруванням. Інтеграція кожного вимагала окремого адаптера. Matter вирішує це на рівні стандарту: Device Type Dictionary визначає Clusters — атомарні одиниці функціональності. Лампочка — OnOff Cluster + Level Control Cluster + Color Control Cluster. Термостат — Thermostat Cluster. Замок — Door Lock Cluster.
Мобільний додаток читає та пише атрибути кластерів, підписується на події — та не знає нічого про залізо за ними.
iOS: Matter через HomeKit API
Apple реалізує Matter через розширення HomeKit. Комісіювання нового пристрою:
import HomeKit
import MatterSupport
// Запуск комісіювання через MatterAddDeviceRequest
let topology = MatterAddDeviceRequest.Topology(
ecosystemName: "MyApp",
homes: [MatterAddDeviceRequest.Topology.Home(displayName: "Мій дом")]
)
let request = MatterAddDeviceRequest(topology: topology)
do {
try await request.perform()
} catch {
// MatterAddDeviceError.userCancelled, .alreadyOnNetwork тощо
}
Після комісіювання пристрій доступен через HMHomeManager. Управління конкретним кластером — через HMCharacteristic. Але HomeKit абстрагує Matter Clusters до своєї моделі, що створює обмеження: нестандартні кластери (Vendor-specific) через HomeKit недоступні.
Для повного доступу до Matter API на iOS потрібен entitlement com.apple.developer.matter.allow-setup-payload — запрашується через Developer Portal.
Android: Matter через Google Home SDK
Google розповсюджує Matter підтримку через Play Services та Home SDK:
// build.gradle.kts
implementation("com.google.android.gms:play-services-home:16.0.0")
Комісіювання:
val commissioningClient = HomeManager.getCommissioningClient(context)
val request = CommissioningRequest.builder()
.setCommissioningService(ComponentName(context, MyCommissioningService::class.java))
.build()
commissioningClient.commissionDevice(request)
.addOnSuccessListener { result ->
val deviceId = result.commissionedDeviceId
}
.addOnFailureListener { exception ->
// CommissioningException з кодом помилки
}
MyCommissioningService розширює CommissioningService та отримує колбек onCommissioningRequested() — тут додаємо пристрій у власний бекенд.
Прямое управління через Matter SDK
Для випадків, коли потрібен прямий доступ до кластерів без екосистемної надбудови, використовується Matter Open Source SDK через JNI або Kotlin-обертки:
// Читання атрибута з OnOff Cluster
val devicePtr = ChipDeviceController.openPairingWindowWithPin(deviceId, 300, 0, pinCode)
chipClient.getDeviceController().readAttributePath(
object : ReportCallback {
override fun onReport(nodeState: NodeState) {
val onOffState = nodeState
.getEndpoint(1)
?.getCluster(OnOffCluster.CLUSTER_ID)
?.getAttribute(OnOffCluster.ATTRIBUTE_ID_ON_OFF)
}
},
devicePtr,
listOf(AttributePath(endpointId = 1, clusterId = OnOffCluster.CLUSTER_ID,
attributeId = OnOffCluster.ATTRIBUTE_ID_ON_OFF))
)
Прямий SDK складніший, вимагає розуміння Interaction Model (Read/Write/Subscribe/Invoke), але дає доступ до vendor-specific кластерів та працює без залежності від Google Play Services.
Fabric та Multi-admin
Важлива архітектурна деталь Matter: пристрій може одночасно належати кільком Fabrics. Fabric — це криптографічний домен з парою ключів. Додаток Google Home, Apple Home та ваш додаток можуть управляти одним пристроєм незалежно. Це називається Multi-admin.
Для реалізації потрібно передати Open Commissioning Window (OCW) пристрою, щоб другий контроллер мог провести комісіювання у свій Fabric:
// iOS: відкрити вікно комісіювання для додаткового контроллера
let accessory = homeManager.primaryHome?.accessories.first { $0.name == "Smart Lock" }
// Через HMAccessoryControl або прямий Matter API
Критично для продуктів, які хочуть працювати в екосистемах одночасно.
Типові помилки при інтеграції
На практиці частіше всього часу теряється на наступному:
- Версіонування Matter SDK — Matter 1.0 та 1.3 несумісні на рівні деяких кластерів. Фіксуємо версію SDK у залежностях та тестуємо на конкретних прошивках пристроїв.
- BLE Commissioning на Android — якщо телефон не має BLE-з'єднання з пристроєм в момент комісіювання, Google Play Services запрошує дозволи заново та скидає процес.
- Fabric conflicts — якщо пристрій вже в іншому Fabric, повторне комісіювання вимагає фабричного скиду. Додайте перевірку у UX.
Оцінка робіт
Інтеграція Matter в існуючий мобільний додаток при наявності Matter-сумісних пристроїв для тестування: iOS — 3-4 тижні, Android — 3-5 тижнів, Flutter з нативними каналами — 5-7 тижнів. Розробка з нуля, включаючи архітектуру управління пристроями та синхронізацію стану — від 2 місяців. Вартість розраховується індивідуально після аналізу вимог та парку пристроїв.







