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?
- â Tiap platform punya protokol sendiri
- â Perlu develop 3-4 integrasi
- â Cloud-dependent
- â Keamanan berbeda-beda
- â User bingung pilih ekosistem
- â Satu protokol universal
- â Develop sekali, jalan di mana-mana
- â Local-first (bisa tanpa cloud)
- â Built-in keamanan (CASE, PASE)
- â User bebas pilih platform
| Aspek | Detail |
|---|---|
| Transport | Wi-Fi, Thread (802.15.4), Ethernet |
| Network Layer | IPv6-only (6LoWPAN untuk Thread) |
| Security | SPAKE2+ (PASE), Certificate (CASE), AES-CCM |
| Data Model | Node â Endpoint â Cluster â Attribute/Command |
| Discovery | DNS-SD (mDNS) |
| Commissioning | BLE, SoftAP, QR Code, NFC |
2. Arsitektur Matter
Matter menggunakan arsitektur berlapis yang terdiri dari Node, Endpoint, Cluster, dan Attribute/Command.
- Node: Perangkat fisik (ESP32)
- Endpoint: Fungsi logis (lampu, sensor, switch)
- Cluster: Grup fitur terkait (On/Off, Level Control, Color)
- Attribute: State/nilai (onOff = true, brightness = 128)
- Command: Aksi yang bisa dilakukan (Toggle, MoveToLevel)
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.
| Aspek | WiFi | Thread |
|---|---|---|
| Daya | ~80 mA | ~10 mA |
| Mesh | Tidak | Ya (self-healing) |
| Range | ~30-50 m | ~30 m per hop, extendable |
| Koneksi ke cloud | Langsung | Via Border Router |
| Kapasitas | ~20 device/AP | 250+ device/mesh |
| Latency | Rendah | Medium (hop-by-hop) |
| Cocok untuk | Camera, streaming, display | Sensor, switch, lock, bulb |
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.
# 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
| Chip | WiFi | Thread | BLE | Matter 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 Type | ID | Clusters Utama |
|---|---|---|
| On/Off Light | 0x0100 | On/Off, Level Control |
| Dimmable Light | 0x0101 | On/Off, Level Control |
| Color Light | 0x0102 | On/Off, Level Control, Color Control |
| On/Off Plug | 0x010A | On/Off |
| Temperature Sensor | 0x0302 | Temperature Measurement |
| Contact Sensor | 0x0015 | Boolean State |
| Door Lock | 0x000A | Door Lock |
| Thermostat | 0x0301 | Thermostat, Fan Control |
| Window Covering | 0x0202 | Window Covering |
6. Proyek: Smart Light Switch
#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
| Metode | Koneksi Awal | Transport | Detail |
|---|---|---|---|
| BLE Commissioning | BLE | BLE â WiFi/Thread | Paling umum, QR code |
| SoftAP | WiFi AP | WiFi AP â WiFi STA | Device buat hotspot |
| On-Network | Sudah di jaringan | WiFi/Thread langsung | Untuk re-commissioning |
Langkah Commissioning
- Discovery: Controller menemukan device via BLE advertising atau mDNS
- PASE (Passcode-Authenticated Session Establishment): Koneksi terenkripsi menggunakan SPAKE2+ dengan passcode
- Certificate Provisioning: Device menerima operational certificate
- Network Commissioning: Device diarahkan ke WiFi/Thread network
- CASE (Certificate-Authenticated Session Establishment): Koneksi operasional terenkripsi
- ACL Setup: Access control list dikonfigurasi
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.
// 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(¶ms);
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.
#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();
}
}