YOGYUI

Matter - 여러 IoT 플랫폼(애플, 구글)에 기기 등록하기 본문

홈네트워크(IoT)/Matter

Matter - 여러 IoT 플랫폼(애플, 구글)에 기기 등록하기

요겨 2023. 5. 28. 11:40
반응형

Matter - Commissioning Device to Multiple Home IoT Platforms

 

매터(Matter)가 내세우는 여러 특징 중 하나는 IoT 제조사(vendor)별로 별도의 브릿지나 허브 장치 필요없이 홈 IoT 플랫폼(애플, 구글, 삼성 등)에 장치를 쉽게 등록 가능하고, 여러 개의 플랫폼(홈 허브)에 동시에 등록하여 제어가 가능하다는 점이다

https://monoist.itmedia.co.jp/mn/articles/2302/13/news046_2.html

이 글에서는 ESP32 SoC 기반으로 작성된 IoT 디바이스를 구글 홈에 등록한 뒤, 애플 홈에도 동시에 등록함으로써 두 플랫폼에서 제어할 수 있는지 여부를 확인해보도록 한다

 

예제 프로젝트는 지난번에 만든 ESP32 based Level Control Cluster 예제를 그대로 활용하기로 한다

[PROJ] Matter::LevelControl 클러스터 개발 예제 (ESP32)

 

[PROJ] Matter::LevelControl 클러스터 개발 예제 (ESP32)

Matter - LevelControl Cluster Developing Example using ESP32 SoC 다음으로, 밝기 조절이 가능한 조명을 제어할 수 있는 LevelControl 클러스터(cluster)를 구현해보자 마찬가지로, 일전에 개발한 색상 및 밝기 변경이

yogyui.tistory.com


[테스트 환경]

  • Apple Home
    Hub: Apple Homepod 1세대
    Mobile Device: iPhone XR (iOS 16.5)
  • Google Home
    Hub: Google Nest Hub 2세대
    Mobile Device: 갤럭시탭 S7 (SM-T870)

※ 지인에서 선물받은 삼성 SmartThings Station도 Matter를 지원해서 같이 해볼까했는데, 아직 박스도 뜯지 않은 상태라 사용법을 잘 몰라서 Pass~

1. Mattet Device 정보

ESP32 플래시에는 espressif에서 제공하는 mfg_tool로 생성한 Factor Binary 파일을 구워넣었다

※ ConnectecHomeIP SDK에서 제공하는 예제용 DAC, PAI 및 CD 인증서를 사용함

ESP-IDF sdkconfig에서 다음 항목을 설정해줘야 한다

CONFIG_ENABLE_ESP32_FACTORY_DATA_PROVIDER=y
CONFIG_ENABLE_ESP32_DEVICE_INSTANCE_INFO_PROVIDER=y
CONFIG_ENABLE_ESP32_DEVICE_INFO_PROVIDER=y

CONFIG_ESP_MATTER_NVS_PART_NAME="nvs"
CONFIG_FACTORY_PARTITION_DAC_PROVIDER=y
CONFIG_FACTORY_COMMISSIONABLE_DATA_PROVIDER=y
CONFIG_FACTORY_DEVICE_INSTANCE_INFO_PROVIDER=y
CONFIG_FACTORY_DEVICE_INFO_PROVIDER=y

mfg_tool.py로 다음과 같이 호출

$ ./esp-matter/tools/mfg_tool/mfg_tool.py -cn "YOGYUI_EXAMPLE" \
    -v 0xFFF2 \
    -p 0x8001 \
    --pai \
    -k connectedhomeip/credentials/development/attestation/Matter-Development-DAC-FFF2-8001-Key.pem \
    -c connectedhomeip/credentials/development/attestation/Matter-Development-DAC-FFF2-8001-Cert.pem \
    -cd connectedhomeip/credentials/development/attestation/Matter-Development-DAC-FFF2-8001-Cert.der \
    --passcode 20222023 \
    --discriminator 3841

결과물로 onb_codes.csv, partition.bin, qrcode.png 파일이 생성되는데, partition.bin을 플래시의 'nvs' 영역에 다운로드하면 된다

$ esptool.py -p ${port} -b ${baudrate} write_flash ${partition_offset} partition.bin

onb_codes.csv 파일에서 QR코드 문자열, 수동 페어링 코드, discriminator, passcode 등 매터 기기 등록에 필요한 다양한 Factory 정보를 얻을 수 있다

qrcode,manualcode,discriminator,passcode
MT:634J0CEK01IVX019G00,3533-191-2345,3841,20222023

qrcode.png는 다음과 같이 모바일 기기(스마트폰)에서 기기 등록 시 내장 카메라로 인식해야 하는 QR 코드 이미지 파일이다 (이미지를 출력해서 제품에 부착하거나 매뉴얼 문서에 기재해주면 된다)

테스트용 기기의 Vendor ID는 0xFFF2, Product ID는 0x8001

2. Google Home에 Matter 디바이스 등록 (Commissioning)

테스트용 Vendor/Product ID를 Google Home에 등록하기 위해서는 구글 홈 개발자 콘솔 (Google Home Developer Console)에 다음과 같이 등록해줘야 한다

 

자세한 내용은 다음 글을 참고하면 된다

Matter - Google Home 개발 프로젝트 생성하기

 

Matter - Google Home 개발 프로젝트 생성하기

iOS 16.2 ~ 16.3 업데이트 후 Matter용으로 개발중인 기기들이 애플 홈(Apple Home) 앱에서 BLE 커미셔닝(commisioning)이 원활히 되지 않는 문제가 있어, 이래저래 헤딩해보다가 포기... 항상 Sigma2 메시지 송수

yogyui.tistory.com

 

이제 Google Home 앱에서 기기를 추가하면 된다

※ 스마트기기가 WiFi 2.4GHz SSID에 연결되어 있어야 한다

> Commissioning 성공 시 CHIP 로그 중 일부

I (82719) chip[FS]: GeneralCommissioning: Received CommissioningComplete
I (82729) chip[FP]: Metadata for Fabric 0x1 persisted to storage.
I (82749) chip[TS]: Committing Last Known Good Time to storage: 2023-05-30T14:44:08
I (82769) chip[ZCL]: OpCreds: Fabric index 0x1 was committed to storage. Compressed Fabric Id 0x3AC162435A8257BB, FabricId 2C3DC5BA01A21C42, NodeId 00000000ED1422EB, VendorId 0x6006
I (82799) chip[FS]: GeneralCommissioning: Successfully commited pending fabric data
...
I (108459) chip[FS]: GeneralCommissioning: Received CommissioningComplete
I (108479) chip[FP]: Metadata for Fabric 0x2 persisted to storage.
I (108619) chip[TS]: Committing Last Known Good Time to storage: 2023-05-30T14:44:08
I (108629) chip[ZCL]: OpCreds: Fabric index 0x2 was committed to storage. Compressed Fabric Id 0x48AA67DA178DA4B1, FabricId 7E842FD32CD98C97, NodeId F2857793FD6981EE, VendorId 0x110A
I (108659) chip[FS]: GeneralCommissioning: Successfully commited pending fabric data
I (108659) chip[FS]: Fail-safe cleanly disarmed
I (108659) esp_matter_attribute: ********** W : Endpoint 0x0000's Cluster 0x00000030's Attribute 0x00000000 is 0 **********
I (108679) chip[EM]: <<< [E:17691r S:38333 M:99487930 (Ack:158262607)] (S) Msg TX to 2:1EB51E907A75B3E7 [A4B1] --- Type 0001:09 (IM:InvokeCommandResponse)
I (108689) chip[IN]: (S) Sending msg 99487930 on secure session with LSID: 38333
I (108699) chip[SWU]: Device commissioned, schedule a default provider query
I (108709) chip[SVR]: Commissioning completed successfully
I (108709) chip[DIS]: Updating services using commissioning mode 0
I (108719) chip[DIS]: CHIP minimal mDNS started advertising.
I (108749) chip[DIS]: Advertise operational node 3AC162435A8257BB-00000000ED1422EB
I (108749) chip[DIS]: CHIP minimal mDNS configured as 'Operational device'; instance name: 3AC162435A8257BB-00000000ED1422EB.
I (108759) chip[DIS]: mDNS service published: _matter._tcp
I (108759) chip[DIS]: Advertise operational node 48AA67DA178DA4B1-F2857793FD6981EE
I (108769) chip[DIS]: CHIP minimal mDNS configured as 'Operational device'; instance name: 48AA67DA178DA4B1-F2857793FD6981EE.
I (108789) chip[DIS]: mDNS service published: _matter._tcp
I (108789) chip[SC]: SecureSession[0x3ffca388]: Moving from state 'kActive' --> 'kPendingEviction'
I (108799) logger: [CSystem::matter_event_callback] Commissioning complete [system.cpp:385]
I (108809) esp_matter_core: Commissioning Complete

두 개의 Fabric이 Matter Network에 등록되었는데, 첫번째 fabric의 Vendor ID는 0x6006, 두번째 fabric의 Vendor ID는 0x110A인 것을 알 수 있다

 

3. Open Commissioning Window (구글 홈)

구글 홈 앱의 기기 설정 창에서 '연결된 Matter 앱 및 서비스' 항목으로 들어가면 현재 이 기기가 Matter 네트워크 상에서 연동된 기기들을 확인할 수 있다

위에서 확인한 1번 facric (vendor ID 0x6006)이 가리키는 회사(제조사)는 구글인 것으로 보이며, 구글의 Google Home 및 Google Assistant 등 다양한 product들과 연동된 것을 확인할 수 있다

※ 2번 facric 0x110A는 커미션 시 사용한 갤럭시탭 제조사인 삼성전자를 가리키는 것 같긴 한데, 확실하지는 않다

이 항목에서 '앱 및 서비스 연결'을 선택하면 ESP32 디바이스가 새로운 장치가 페어링할 준비가 완료된다

※ 0x003C 클러스터(Administrator Commissioning Cluster)에 OpenCommissioningWindow 커맨드 (0x00) 혹은 OpenBasicCommissioningWindow 커맨드 (0x01) 명령을 전달하는 시퀀스, 자세한 것은 아래 클러스터 정보 글을 참고

Matter Specification - Administrator Commissioning Cluster

 

Matter Specification - Administrator Commissioning Cluster

Matter :: Administrator Commissioning Cluster This cluster is used to trigger a Node to allow a new Administrator to commission it. It defines Attributes, Commands and Responses needed for this purpose. For the management of Operational Credentials and Tru

yogyui.tistory.com

I (1279269) chip[EM]: >>> [E:43117r S:38330 M:196457107 (Ack:34853054)] (S) Msg RX from 1:00000000BEA13E86 [57BB] --- Type 0001:08 (IM:InvokeCommandRequest)
I (1279279) esp_matter_command: Received command 0x00000000 for endpoint 0x0000's cluster 0x0000003C
I (1279289) chip[ZCL]: Received command to open commissioning window
I (1279289) chip[DIS]: Updating services using commissioning mode 2
I (1279299) chip[DIS]: CHIP minimal mDNS started advertising.
I (1279329) chip[DIS]: Advertise operational node 3AC162435A8257BB-00000000ED1422EB
I (1279329) chip[DIS]: CHIP minimal mDNS configured as 'Operational device'; instance name: 3AC162435A8257BB-00000000ED1422EB.
I (1279339) chip[DIS]: mDNS service published: _matter._tcp
I (1279349) chip[DIS]: Advertise operational node 48AA67DA178DA4B1-F2857793FD6981EE
I (1279349) chip[DIS]: CHIP minimal mDNS configured as 'Operational device'; instance name: 48AA67DA178DA4B1-F2857793FD6981EE.
I (1279379) chip[DIS]: mDNS service published: _matter._tcp
I (1279379) chip[DIS]: Advertise commission parameter vendorID=65522 productID=32769 discriminator=3625/14 cm=2
I (1279379) chip[DIS]: CHIP minimal mDNS configured as 'Commissionable node device'; instance name: 6B5231E0120D49E3.
I (1279419) chip[DIS]: mDNS service published: _matterc._udp
I (1279419) chip[ZCL]: Commissioning window is now open
I (1279429) chip[EM]: <<< [E:43117r S:38330 M:34853055 (Ack:196457107)] (S) Msg TX to 1:00000000BEA13E86 [57BB] --- Type 0001:09 (IM:InvokeCommandResponse)
I (1279439) chip[IN]: (S) Sending msg 34853055 on secure session with LSID: 38330
I (1279449) logger: [CSystem::matter_event_callback] Commissioning window opened [system.cpp:401]

구글 홈에서는 여러 가지 Commissioning 옵션이 존재하는데, 11자리 페어링 코드 혹은 QR 코드 이미지를 제공한다

[중요]

위에서 나오는 페어링 코드를 보면 알겠지만, ESP32 디바이스에 최초로 구운 페어링 코드나 QR 코드와는 내용이 상이하다 - 즉, 페어링된 상태에서 다른 기기와의 연동을 위해 추가로 commissioning window를 열 때는 기기 정보를 임시로 생성하게 된다 (구글 홈에서는 3분을 타임아웃으로 설정)

4. Apple Home에서 디바이스 등록

위와 같이 구글 홈 앱에서 임시로 commissioning window를 연 뒤, 애플 홈 앱에서 QR 코드 혹은 페어링 코드로 기기를 추가하면 된다 (애플 홈에서는 허브로 HomePod 1세대를 연동)

기기 등록 시 CHIP 로그 중 일부

I (86049) esp_matter_command: Received command 0x00000004 for endpoint 0x0000's cluster 0x00000030
I (86049) chip[FS]: GeneralCommissioning: Received CommissioningComplete
I (86069) chip[FP]: Metadata for Fabric 0x3 persisted to storage.
I (86289) chip[TS]: Committing Last Known Good Time to storage: 2023-05-30T15:19:36
I (86299) chip[ZCL]: OpCreds: Fabric index 0x3 was committed to storage. Compressed Fabric Id 0x6D45BCC425DC1927, FabricId 0000000000000001, NodeId 00000000A564FDDB, VendorId 0x1349
I (86359) chip[FS]: GeneralCommissioning: Successfully commited pending fabric data
...
I (92339) esp_matter_command: Received command 0x00000004 for endpoint 0x0000's cluster 0x00000030
I (92339) chip[FS]: GeneralCommissioning: Received CommissioningComplete
I (92359) chip[FP]: Metadata for Fabric 0x4 persisted to storage.
I (92449) chip[TS]: Committing Last Known Good Time to storage: 2023-05-30T15:19:42
I (92659) chip[ZCL]: OpCreds: Fabric index 0x4 was committed to storage. Compressed Fabric Id 0x18533B0CBC7FEA01, FabricId 0000000000000002, NodeId 000000009C95AEA6, VendorId 0x1384
I (92689) chip[FS]: GeneralCommissioning: Successfully commited pending fabric data

마찬가지로 fabric 두 개가 추가되는데, vendor ID가 각각 0x1349, 0x1384이다

(하나는 Apple이 분명한데, 나머지 하나는 뭘 가리키는지 모르겠다 -_-;;)

 

애플 홈 앱에서 액세서리 세부정보를 보면 '연결된 서비스' 항목에서 해당 기기가 연동된 Matter 네트워크 상의 기기들을 확인할 수 있다

(분명 ESP32 로그 상에서는 facric 총 4개가 연결이 되었는데... 0x1349, 0x1384 모두 Apple Home으로 표시되는 건가?... 이건 좀 더 공부를 해봐야겠다)

5. Open Commissioning Window (애플 홈)

애플 홈 앱에서도 페어링 모드를 활성화할 수 있다

기기 세부설정 - '페어링 모드 켜기'

구글 홈과 달리 애플 홈에서는 11자리의 설정 코드 (manual pairing code)만 제공한다

※ 역시나 임시코드로 발급되는데, 타임아웃에 대한 안내사항이 없다

QR 코드까지 제공하는 구글에 비해서는 약간 부족한 느낌? 이것도 아마 iOS 17부터는 확연히 달라지지 않을까 기대해본다


한창 개발중인 매터 기기를 실제 홈 IoT 플랫폼과 연동하여 테스트할 때, 애플 혹은 구글 딱 하나만 붙잡고 열심히 개발하고 있었는데, 처음으로 멀티 플랫폼 연동을 시도해봤다

Administrator Commissioning Cluster를 확실히 이해하고 엔드포인트에 추가해줘야하는 약간의 번거로움은 있지만, 매터 스펙 문서가 있기 때문에 구현하는데 큰 어려움은 없었다 (가독성은 꽤 떨어지지만...)

 

멀티플랫폼 연동하는 과정 자체는 굉장히 심플하고 별다른 문제없이 잘 되는 걸 확인했다

별도의 제조사 어플리케이션이 필요하지 않다는 게 엄청난 장점이긴 하지만, 어차피 OTA(Over the Air)를 통한 펌웨어 업데이트를 하려면 제조사 앱이 필요할 수 밖에 없다는 게 내 생각 (매터는 OTA가 좀 빡친다..)

 

조만간 SmartThings Station도 설치하고 플랫폼 3개에 연동하는 테스트도 해봐야겠다

끝~!

반응형
Comments