IoT

ESP32 Matter Smart Home: Thread, Commissioning & Multi-Admin

TOKEN

Bangun perangkat smart home interoperabel yang bisa dikontrol dari Apple Home, Google Home, dan Amazon Alexa dengan ESP32 dan Matter

1. Apa itu Matter?

Matter adalah standar smart home terbuka yang dikembangkan oleh CSA (Connectivity Standards Alliance) — sebelumnya Zigbee Alliance — dengan dukungan dari Apple, Google, Amazon, Samsung, dan 300+ perusahaan teknologi lainnya. Matter memungkinkan perangkat smart home dari vendor berbeda untuk saling berinteroperasi tanpa terkendala ekosistem.

Dengan Matter, satu perangkat ESP32 bisa dikontrol dari Apple Home, Google Home, dan Amazon Alexa secara bersamaan — tanpa perlu membuat integrasi khusus untuk masing-masing platform.

Mengapa Matter Penting?

😤
Sebelum Matter
Fragmented & Membosankan
  • ❌ Tiap platform punya protokol sendiri
  • ❌ Perlu develop 3-4 integrasi
  • ❌ Cloud-dependent
  • ❌ Keamanan berbeda-beda
  • ❌ User bingung pilih ekosistem
🎉
Dengan Matter
Interoperable & Mudah
  • ✅ Satu protokol universal
  • ✅ Develop sekali, jalan di mana-mana
  • ✅ Local-first (bisa tanpa cloud)
  • ✅ Built-in keamanan (CASE, PASE)
  • ✅ User bebas pilih platform
AspekDetail
TransportWi-Fi, Thread (802.15.4), Ethernet
Network LayerIPv6-only (6LoWPAN untuk Thread)
SecuritySPAKE2+ (PASE), Certificate (CASE), AES-CCM
Data ModelNode → Endpoint → Cluster → Attribute/Command
DiscoveryDNS-SD (mDNS)
CommissioningBLE, SoftAP, QR Code, NFC

2. Arsitektur Matter

Matter menggunakan arsitektur berlapis yang terdiri dari Node, Endpoint, Cluster, dan Attribute/Command.

Hierarki Data Model Matter
🏠
Node
ESP32 Device
↓
0ī¸âƒŖ
Endpoint 0
Root Node
1ī¸âƒŖ
Endpoint 1
Light
2ī¸âƒŖ
Endpoint 2
Temperature
↓
💡
On/Off Cluster
onOff attr
🔆
Level Control
currentLevel
đŸŒĄī¸
Temp Measurement
measuredValue

3. Thread Border Router

Thread adalah protokol mesh networking berbasis IPv6 yang cocok untuk perangkat low-power dalam smart home. Matter bisa berjalan di atas Thread atau WiFi. Untuk perangkat Thread, diperlukan Thread Border Router (TBR) sebagai jembatan ke jaringan IP.

AspekWiFiThread
Daya~80 mA~10 mA
MeshTidakYa (self-healing)
Range~30-50 m~30 m per hop, extendable
Koneksi ke cloudLangsungVia Border Router
Kapasitas~20 device/AP250+ device/mesh
LatencyRendahMedium (hop-by-hop)
Cocok untukCamera, streaming, displaySensor, switch, lock, bulb
💡 Thread Border Router

Apple HomePod Mini, Google Nest Hub (2nd gen), dan Amazon Echo (4th gen) sudah memiliki built-in Thread Border Router. ESP32-H2 juga bisa dikonfigurasi sebagai Thread Border Router dengan ESP-IDF Thread Border Router component.

4. Setup Matter SDK untuk ESP32

Espressif menyediakan esp-matter SDK yang memudahkan pengembangan perangkat Matter di ESP32. SDK ini dibangun di atas ConnectedHomeIP (CHIP) dari CSA.

Bash (Setup)
# 1. Install ESP-IDF v5.1+ (prerequisite)
mkdir -p ~/esp
cd ~/esp
git clone --recursive https://github.com/espressif/esp-idf.git
cd esp-idf
git checkout v5.2.3
./install.sh esp32
source export.sh

# 2. Clone esp-matter SDK
cd ~/esp
git clone --recursive https://github.com/espressif/esp-matter.git
cd esp-matter

# 3. Install Python dependencies
pip install -r requirements.txt

# 4. Set environment
export ESP_MATTER_PATH=$(pwd)
export PATH="$ESP_MATTER_PATH/tools:$PATH"

# 5. Build contoh light
cd examples/light
idf.py set-target esp32c6
idf.py build
idf.py flash monitor

Supported ESP32 Chips untuk Matter

ChipWiFiThreadBLEMatter Support
ESP32✅❌✅✅ (WiFi only)
ESP32-S3✅❌✅✅ (WiFi only)
ESP32-C6✅✅✅✅ (WiFi + Thread)
ESP32-H2❌✅✅✅ (Thread only)
ESP32-C3✅❌✅✅ (WiFi only)

5. Device Types & Clusters

Matter mendefinisikan device types standar yang memetakan ke kombinasi cluster tertentu. Ini memastikan interoperabilitas antar vendor.

Device TypeIDClusters Utama
On/Off Light0x0100On/Off, Level Control
Dimmable Light0x0101On/Off, Level Control
Color Light0x0102On/Off, Level Control, Color Control
On/Off Plug0x010AOn/Off
Temperature Sensor0x0302Temperature Measurement
Contact Sensor0x0015Boolean State
Door Lock0x000ADoor Lock
Thermostat0x0301Thermostat, Fan Control
Window Covering0x0202Window Covering

6. Proyek: Smart Light Switch

C++ (Matter Light)
#include <esp_matter.h>
#include <esp_matter_console.h>
#include <esp_matter_ota.h>
#include <app-common/zap-generated/ids/Attributes.h>
#include <app-common/zap-generated/ids/Clusters.h>
#include <app/server/CommissioningWindowManager.h>

using namespace esp_matter;
using namespace esp_matter::attribute;
using namespace esp_matter::endpoint;

// GPIO untuk LED
#define LED_GPIO 2
#define BUTTON_GPIO 0

// Callback saat attribute berubah
static esp_err_t app_attribute_change_cb(
  callback_type_t type,
  uint16_t endpoint_id,
  uint32_t cluster_id,
  uint32_t attribute_id,
  esp_matter_attr_val_t *val,
  void *priv_data)
{
  if (type == PRE_UPDATE) {
    // Sebelum update — bisa validasi di sini
    ESP_LOGI("APP", "Attribute update: ep=%d cluster=0x%x attr=0x%x",
      endpoint_id, cluster_id, attribute_id);
  }

  if (type == POST_UPDATE) {
    // Setelah update — kontrol hardware
    if (endpoint_id == 1 &&
        cluster_id == OnOff::Id &&
        attribute_id == OnOff::Attributes::OnOff::Id) {
      // Kontrol LED
      bool state = val->val.b;
      gpio_set_level(LED_GPIO, state ? 1 : 0);
      ESP_LOGI("APP", "LED %s", state ? "ON" : "OFF");
    }
  }

  return ESP_OK;
}

extern "C" void app_main() {
  // Init NVS
  nvs_flash_init();

  // Inisialisasi Matter
  node::config_t node_config;
  node_t *node = node::create(&node_config, app_attribute_change_cb, NULL);

  // Buat endpoint On/Off Light (endpoint 1)
  on_off_light::config_t light_config;
  light_config.on_off.on_off = false;
  light_config.on_off.lighting.start_up_on_off = false;
  endpoint_t *light_ep = on_off_light::create(node, &light_config, ENDPOINT_FLAG_NONE, NULL);

  // Start Matter
  esp_matter::start();

  // Setup GPIO
  gpio_reset_pin(LED_GPIO);
  gpio_set_direction(LED_GPIO, GPIO_MODE_OUTPUT);
  gpio_set_level(LED_GPIO, 0);

  // Print pairing code
  ESP_LOGI("APP", "Matter Light siap!");
  ESP_LOGI("APP", "Pairing code: 34970112332");
  ESP_LOGI("APP", "QR Code: MT:Y3.13OTB00KA0648G00");

  // Setup button untuk factory reset
  gpio_reset_pin(BUTTON_GPIO);
  gpio_set_direction(BUTTON_GPIO, GPIO_MODE_INPUT);
  gpio_set_pull_mode(BUTTON_GPIO, GPIO_PULLUP_ONLY);

  // Factory reset: tahan tombol BOOT 5 detik
  int hold_count = 0;
  while (true) {
    if (gpio_get_level(BUTTON_GPIO) == 0) {
      hold_count++;
      if (hold_count > 50) {  // 5 detik
        ESP_LOGW("APP", "Factory Reset!");
        esp_matter::factory_reset();
      }
    } else {
      hold_count = 0;
    }
    vTaskDelay(pdMS_TO_TICKS(100));
  }
}

7. Commissioning Process

Commissioning adalah proses menghubungkan perangkat Matter ke jaringan dan menambahkannya ke ekosistem smart home. Proses ini menggunakan QR code atau pairing code numerik.

Tipe Commissioning

MetodeKoneksi AwalTransportDetail
BLE CommissioningBLEBLE → WiFi/ThreadPaling umum, QR code
SoftAPWiFi APWiFi AP → WiFi STADevice buat hotspot
On-NetworkSudah di jaringanWiFi/Thread langsungUntuk re-commissioning

Langkah Commissioning

  1. Discovery: Controller menemukan device via BLE advertising atau mDNS
  2. PASE (Passcode-Authenticated Session Establishment): Koneksi terenkripsi menggunakan SPAKE2+ dengan passcode
  3. Certificate Provisioning: Device menerima operational certificate
  4. Network Commissioning: Device diarahkan ke WiFi/Thread network
  5. CASE (Certificate-Authenticated Session Establishment): Koneksi operasional terenkripsi
  6. ACL Setup: Access control list dikonfigurasi
â„šī¸ Commissioning Flow

Setelah commissioning selesai, device beroperasi di jaringan lokal. Controller (Apple Home, Google Home) berkomunikasi langsung dengan device tanpa perlu cloud. QR code dan pairing code tersimpan di NVS device dan bisa di-reset via factory reset.

8. Multi-Admin & Fabric

Fitur Multi-Admin memungkinkan satu perangkat Matter dikontrol oleh beberapa controller sekaligus. Misalnya, satu lampu ESP32 bisa dikontrol dari Apple Home DAN Google Home secara bersamaan.

C++ (Multi-Fabric)
// Enable multi-fabric dalam menuconfig
// CONFIG_ENABLE_MULTI_FABRIC=y
// Atau dalam sdkconfig.defaults:

// sdkconfig.defaults
CONFIG_ENABLE_MULTI_FABRIC=y
CONFIG_MAX_ACTIVE_FABRICS=5
CONFIG_MAX_DEFINED_FABRICS=5

// Kode untuk enable multi-admin
void enableMultiAdmin() {
  // Setelah commissioning pertama selesai (fabric 1),
  // buka commissioning window lagi untuk fabric 2

  // Delay 30 detik sebelum buka commissioning window berikutnya
  vTaskDelay(pdMS_TO_TICKS(30000));

  commissioning_window_params_t params = {
    .window_timeout = 300,    // 5 menit
    .iteration = 1000,        // SPAKE2+ iteration count
    .discriminator = 3840,    // Discriminator
    .salt = nullptr,
    .salt_len = 0,
  };

  esp_err_t err = esp_matter::commissioning_window_open(&params);
  if (err == ESP_OK) {
    ESP_LOGI("APP", "Commissioning window dibuka untuk fabric baru!");
    ESP_LOGI("APP", "Pairing code baru: %d", params.setup_pin_code);
  }
}

9. OTA Update untuk Matter

Matter mendukung OTA (Over-The-Air) update langsung dari controller. Apple Home dan Google Home bisa mengirim firmware update ke perangkat Matter secara otomatis.

C++ (OTA Setup)
#include <esp_matter_ota.h>

// Konfigurasi OTA
void setupOTA() {
  // OTA provider: memberikan firmware ke requester
  ota::config_t ota_config = {
    .ota_requestor = true,    // Device bisa menerima OTA
    .ota_provider = false,    // Bukan provider untuk device lain
  };

  // Inisialisasi OTA
  ota::init(&ota_config);

  ESP_LOGI("APP", "OTA diaktifkan");
  ESP_LOGI("APP", "Device siap menerima firmware update");
}

// Callback progress OTA
void otaProgressCallback(uint8_t progress) {
  ESP_LOGI("OTA", "Progress: %d%%", progress);
  // Bisa update LED indicator atau display
  if (progress >= 100) {
    ESP_LOGI("OTA", "Update selesai! Restart...");
    esp_restart();
  }
}

10. Quiz Pemahaman

Pertanyaan 1: Matter menggunakan model data apa untuk mengorganisir informasi?

a) JSON-RPC
b) Node → Endpoint → Cluster → Attribute
c) REST API
d) MQTT Topic

Pertanyaan 2: ESP32 mana yang mendukung Thread DAN WiFi untuk Matter?

a) ESP32
b) ESP32-S3
c) ESP32-C6
d) ESP32-H2

Pertanyaan 3: Apa fungsi Thread Border Router?

a) Mengontrol perangkat Thread dari smartphone
b) Menghubungkan mesh Thread ke jaringan IP
c) Menggantikan WiFi router
d) Menyimpan data sensor Thread

Pertanyaan 4: Multi-Admin memungkinkan satu device dikontrol oleh?

a) Hanya satu controller
b) Beberapa controller sekaligus (Apple Home + Google Home)
c) Hanya Google Home
d) Hanya Apple Home

Pertanyaan 5: Commissioning menggunakan protokol keamanan apa untuk koneksi awal?

a) TLS 1.3
b) WPA3
c) SPAKE2+ (PASE)
d) RSA-2048
← Sebelumnya ESP32 Deep Sleep Selanjutnya → Arduino Library
🔍 Zoom
100%
🎨 Tema