00 Matter nedir?
Matter (önceki adı CHIP — Connected Home over IP), Connectivity Standards Alliance (CSA) tarafından geliştirilen açık kaynaklı, IP tabanlı birleşik IoT uygulama protokolüdür.
Neden mevcut protokoller yetmedi?
| Protokol | Sorun |
|---|---|
| Zigbee | Birden fazla uygulama profili — farklı vendor'lar birbirine bağlanamıyor |
| Z-Wave | Kapalı standart, 900 MHz, ekosistem kısıtlı |
| HomeKit | Yalnızca Apple — Android ve Google Home ile çalışmıyor |
| Google Home | Weave/Cast — kapalı, Android/ChromeOS merkezli |
| Amazon Alexa | ASH protokolü — diğer ekosistemlerle entegrasyon zor |
| Proprietary | Vendor lock-in, bulut bağımlılığı, ömür sonu riski |
Matter'ın getirdikleri
Matter transport yığını
Uygulama katmanı (clusters: OnOff, Temperature, DoorLock…)
│
Interaction Model (Read/Write/Subscribe/Invoke)
│
Data Model (attribute, command, event)
│
Message Layer (MRP — Message Reliability Protocol)
│
Transport (UDP/TCP)
│
IP (IPv4 / IPv6)
│
Fiziksel (WiFi / Thread 802.15.4 / Ethernet)
Bu bölümde
- Matter = CSA standardı, IP tabanlı, tüm büyük ekosistemler destekli
- Yerel kontrol: bulut olmadan çalışır; güvenlik: PKI + fabric kimliği
- Transport: WiFi, Thread, Ethernet; komisyon: BLE üzerinden
01 Thread nedir?
Thread, IEEE 802.15.4 fiziksel katmanı üzerine IPv6 mesh ağı kuran, düşük güçlü IoT cihazları için tasarlanmış açık ağ protokolüdür.
Thread ağ topolojisi
İnternet / Yerel ağ (WiFi/Ethernet)
│
┌──────┴──────┐
│ Border │ (OTBR — Thread ↔ IP köprüsü)
│ Router │
└──────┬──────┘
│ Thread mesh (802.15.4, 2.4 GHz)
┌─────┼─────┐
│ │ │
Router Router Router (multi-hop relay, self-healing)
│ │ │
FED SED MED (End Device tipleri)
Cihaz rolleri
| Rol | Kısaltma | Özellik |
|---|---|---|
| Border Router | BR | Thread ↔ IPv6/IPv4 köprüsü; NAT64, DNS64, komisyon |
| Router | R | Paket iletimi + End Device'lara hizmet, daima açık |
| Full End Device | FED | Router'a bağlı, daima açık ama paket iletmez |
| Minimal End Device | MED | Uyku yapabilir, polling ile veri alır |
| Sleepy End Device | SED | Çoğu zaman uyku — düşük güç, pil ömrü uzun |
| SSED | SSED | Synchronized Sleepy End Device — Thread 1.3 yeni özellik |
RF parametreleri
Bu bölümde
- Thread = 802.15.4 + IPv6 + mesh; Border Router ile IP ağıyla köprülenebilir
- Roller: Border Router, Router, FED, MED, SED — güç bütçesine göre seçilir
- AES-128-CCM şifreleme, self-healing mesh — endüstriyel IoT için güvenilir
02 OpenThread
OpenThread, Google tarafından geliştirilen ve Thread protokolünün açık kaynaklı C++ implementasyonudur. POSIX, bare-metal MCU ve Linux platformlarında çalışır.
Platform desteği
| Platform | Build hedefi | Kullanım |
|---|---|---|
| POSIX / Linux | simulation | Test ve geliştirme, ot-cli, ot-daemon |
| nRF52840 | nrf52840 | Nordic SDK ile üretim MCU |
| ESP32-H2 / C6 | esp32h2 | Espressif IDF ile entegre |
| Silicon Labs EFR32 | efr32mg | Simplicity Studio ile |
| TI CC1352 | cc2652 | TI SimpleLink ile |
| QEMU | simulation | CI/CD test ortamı |
OpenThread derleme ve kurulum (POSIX)
# Bağımlılıklar
sudo apt install -y cmake ninja-build libssl-dev \
libdbus-1-dev libbluetooth-dev libreadline-dev \
libncurses-dev python3
# OpenThread klonla
git clone https://github.com/openthread/openthread.git
cd openthread
# POSIX simulation build (ot-cli + ot-daemon)
cmake -B build/posix \
-GNinja \
-DOT_PLATFORM=posix \
-DOT_COMPILE_WARNING_AS_ERROR=OFF \
-DOT_COMMISSIONER=ON \
-DOT_JOINER=ON \
-DOT_DHCP6_CLIENT=ON \
-DOT_DNS_CLIENT=ON \
-DOT_SRP_CLIENT=ON \
-DCMAKE_BUILD_TYPE=Release \
.
ninja -C build/posix -j$(nproc)
# Araçlar: ot-cli, ot-daemon, ot-ctl
ls build/posix/src/posix/
ot-cli temel komutlar
# Thread ağ kimlik bilgilerini ayarla
> dataset init new
> dataset networkname MyThread
> dataset networkkey 00112233445566778899aabbccddeeff
> dataset panid 0x1234
> dataset channel 15
> dataset commit active
# Thread arayüzünü başlat
> ifconfig up
> thread start
# Durum kontrolü
> state
router # veya leader, child, detached
> ipaddr
fdde:ad00:beef::1 # mesh-local IPv6
# Komşu cihazları listele
> neighbor table
# Router tablosu
> router table
Bu bölümde
- OpenThread: Google'ın açık kaynak Thread implementasyonu — nRF, ESP32, TI, POSIX
- POSIX build ile masaüstünde Thread simülasyonu ve geliştirme yapılabilir
ot-daemonLinux'ta Thread arka plan servisi olarak çalışır
03 OTBR — OpenThread Border Router
OTBR, Thread mesh ağını IPv6/IPv4 ağlarla köprüleyen yazılım yığınıdır. Raspberry Pi gibi Linux cihazlarda çalışır ve Thread komisyon işlemlerini yönetir.
OTBR bileşenleri
Raspberry Pi OTBR kurulumu
# OTBR repo ve bağımlılıklar
sudo apt install -y git cmake ninja-build libssl-dev \
libdbus-1-dev libbluetooth-dev libreadline-dev \
libncurses-dev libjsoncpp-dev libboost-dev \
avahi-daemon avahi-utils
git clone https://github.com/openthread/ot-br-posix.git
cd ot-br-posix
git submodule update --init --recursive
# RCP (Radio Co-Processor) modunu build et
# nRF52840 USB dongle veya ESP32-H2 UART RCP gerektirir
cmake -B build \
-GNinja \
-DOTBR_AGENT=ON \
-DOTBR_WEB=ON \
-DOTBR_BACKBONE_ROUTER=ON \
-DOTBR_BORDER_ROUTING=ON \
-DOTBR_NAT64=ON \
-DOTBR_DNS_UPSTREAM_QUERY=ON \
-DOTBR_SRP_ADVERTISING_PROXY=ON \
-DOT_COMMISSIONER=ON \
-DOT_JOINER=ON \
-DCMAKE_BUILD_TYPE=Release \
.
ninja -C build -j$(nproc)
sudo ninja -C build install
OTBR agent başlatma (RCP mod)
# nRF52840 USB dongle RCP /dev/ttyACM0 üzerinde
sudo otbr-agent \
-I wpan0 \
-B eth0 \
spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=115200 \
trel://eth0
# Systemd servisi olarak
sudo systemctl enable --now otbr-agent
sudo systemctl status otbr-agent
# ot-ctl ile Thread ağını başlat
sudo ot-ctl dataset init new
sudo ot-ctl dataset commit active
sudo ot-ctl ifconfig up
sudo ot-ctl thread start
sudo ot-ctl state # leader beklenir
# Web arayüzü: http://raspberrypi.local:80
Thread komisyonu — yeni cihaz ekleme
# Border Router tarafında komisyoncuyu başlat
sudo ot-ctl commissioner start
sudo ot-ctl commissioner joiner add * J01NME # joiner credential
# Yeni cihaz tarafında (ot-cli)
> joiner start J01NME
> ifconfig up
> thread start
# Cihaz ağa katılır, ot-ctl ile görünür
sudo ot-ctl child table
Bu bölümde
- OTBR: Raspberry Pi + RCP dongle (nRF52840/ESP32-H2) ile tam Border Router
- NAT64 + DNS64 ile Thread cihazları IPv4 internete erişir
- SRP Advertising Proxy ile Thread cihazları mDNS'e görünür — Matter için kritik
04 Matter Mimarisi
Matter'ın uygulama katmanı, birbirine bağlı kavramlar hiyerarşisiyle tanımlanır: fabric, node, endpoint, cluster, attribute, command ve event.
Temel kavramlar
Interaction Model işlemleri
| İşlem | Yön | Açıklama |
|---|---|---|
| Read | Controller → Cihaz | Attribute değerini oku |
| Write | Controller → Cihaz | Attribute değerini yaz |
| Subscribe | Controller ↔ Cihaz | Attribute/event değişimini izle — push bildirim |
| Invoke | Controller → Cihaz | Komut çalıştır (Toggle, Lock vb.) |
| Report | Cihaz → Controller | Abonelik sonucu veri gönder |
PASE ve CASE protokolleri
PASE (Passcode Authenticated Session Establishment): ilk komisyon sırasında kullanılır — QR kodu veya manüel PIN ile geçici oturum. CASE (Certificate Authenticated Session Establishment): komisyon sonrası, PKI sertifikasıyla kalıcı güvenli kanal.
Komisyon (bir kez): Commissioner → [BLE] PASE(passcode) → Cihaz → fabric credential yükle Sonraki kullanımlar: Controller → [IP: UDP/TCP] CASE(sertifika) → Cihaz → şifreli oturum → komutlar
Bu bölümde
- Matter hiyerarşisi: fabric → node → endpoint → cluster → attribute/command/event
- Interaction Model: Read, Write, Subscribe, Invoke — tüm cihaz iletişimi bu 4 işlemle
- PASE ile ilk komisyon (BLE+PIN), CASE ile sonraki iletişim (PKI)
05 chip-tool Kullanımı
chip-tool, Matter cihazlarını komut satırından komisyon eden ve kontrol eden referans CLI aracıdır. CI/CD testleri ve geliştirme için vazgeçilmezdir.
chip-tool derleme
# connectedhomeip repo
git clone https://github.com/project-chip/connectedhomeip.git
cd connectedhomeip
git submodule update --init --depth=1
# Bağımlılıklar (Ubuntu 22.04)
sudo apt install -y git cmake ninja-build libssl-dev \
libdbus-1-dev libbluetooth-dev libglib2.0-dev \
libavahi-client-dev python3-venv python3-pip \
pkg-config
# Bootstrap (sanal ortam + araçlar)
source scripts/bootstrap.sh
# chip-tool derle
source scripts/activate.sh
gn gen out/host --args='chip_mdns="platform"'
ninja -C out/host chip-tool
ls out/host/chip-tool
Komisyon — BLE + WiFi yöntemi
# WiFi Matter cihazı komisyon et
# --discriminator: QR kod veya manüel PIN'den, --passcode: PIN kodu
./chip-tool pairing ble-wifi \
1 \
"MyWiFiSSID" "wifi_password" \
20202021 \
3840
# Argümanlar: nodeId=1, ssid, password, passcode, discriminator
# BLE + Thread komisyonu
./chip-tool pairing ble-thread \
2 \
hex:0e080000000000010000000300001035060004001fffe00208dead00beef00cafe0708fd1122334455667605101122334455667788990011aabbccddeeff030e4f70656e54687265616400010214 \
20202021 3840
# Thread dataset hex formatında verilir (ot-ctl dataset active -x ile alınır)
Cihaz kontrolü
# OnOff cluster — aç/kapat
./chip-tool onoff on 1 1 # nodeId=1, endpoint=1
./chip-tool onoff off 1 1
./chip-tool onoff toggle 1 1
# Attribute oku
./chip-tool onoff read on-off 1 1
./chip-tool levelcontrol read current-level 1 1
./chip-tool temperaturemeasurement read measured-value 1 1
# Attribute yaz
./chip-tool levelcontrol move-to-level 128 0 0 0 1 1
# Subscribe (abonelik — sürekli bildirim al)
./chip-tool onoff subscribe on-off 1 10 1 1
# min-interval=1s, max-interval=10s
# Tüm komisyon edilmiş cihazları listele
./chip-tool pairing get-commissioned-nodes
Thread dataset alma
# OTBR'dan Thread Active Dataset al (hex)
sudo ot-ctl dataset active -x
# 0e080000000000010000000300001035...
# chip-tool komisyonunda bu değeri kullan
THREAD_DATASET=$(sudo ot-ctl dataset active -x | tr -d '\r\n')
./chip-tool pairing ble-thread 2 hex:${THREAD_DATASET} 20202021 3840
Bu bölümde
pairing ble-wifivepairing ble-threadiki temel komisyon yöntemi- onoff, levelcontrol, temperaturemeasurement — temel cluster'lar chip-tool ile test edilebilir
subscribekomutu ile attribute değişimlerini gerçek zamanlı takip edilebilir
06 Matter Cihaz Oluşturma
connectedhomeip deposundaki örnek uygulamalar, Matter cihaz firmware'i geliştirmek için başlangıç noktasıdır. Linux üzerinde sanal cihaz çalıştırılarak hızlı prototip yapılabilir.
Örnek uygulamalar
| Uygulama | Konum | Açıklama |
|---|---|---|
| lighting-app | examples/lighting-app/linux | Akıllı ampul — OnOff, LevelControl, ColorControl |
| lock-app | examples/lock-app/linux | Akıllı kilit — DoorLock cluster |
| thermostat | examples/thermostat/linux | Termostat — Thermostat cluster |
| bridge-app | examples/bridge-app/linux | Matter bridge — diğer protokolleri köprüler |
| contact-sensor | examples/contact-sensor-app/linux | Kapı/pencere sensörü |
| ota-provider-app | examples/ota-provider-app/linux | OTA firmware güncelleme sunucusu |
Linux lighting-app derleme ve çalıştırma
# Ortamı hazırla
cd connectedhomeip
source scripts/activate.sh
# Linux lighting-app derle
gn gen out/lighting-linux \
--args='chip_mdns="platform" chip_inet_config_enable_ipv4=true'
ninja -C out/lighting-linux examples/lighting-app/linux
# Çalıştır — KV depolama için temp dizin
./out/lighting-linux/chip-lighting-app \
--KVS /tmp/lighting-kv \
--discriminator 3840 \
--passcode 20202021 \
--secured-device-port 5540
# Başka terminalde chip-tool ile komisyon
./out/host/chip-tool pairing onnetwork 1 20202021
# Kontrol
./out/host/chip-tool onoff toggle 1 1
Custom cluster ekleme
#include <app/clusters/temperature-measurement-server/temperature-measurement-server.h>
#include <app/server/Server.h>
#include <platform/CHIPDeviceLayer.h>
using namespace chip;
using namespace chip::app;
using namespace chip::app::Clusters;
/* Sıcaklık attribute'unu güncelle */
void UpdateTemperature(int16_t celsius_x100)
{
/* TemperatureMeasurement cluster, endpoint 1 */
Protocols::InteractionModel::Status status =
TemperatureMeasurement::Attributes::MeasuredValue::Set(
1 /* endpoint */, celsius_x100);
if (status != Protocols::InteractionModel::Status::Success)
ChipLogError(AppServer, "Temp attribute set failed");
}
/* I2C'den sıcaklık oku ve Matter attribute'unu güncelle */
void SensorPollTask(intptr_t /* unused */)
{
while (true) {
float temp_c = read_si7021_temperature(); /* donanım okuma */
int16_t temp_matter = static_cast<int16_t>(temp_c * 100);
UpdateTemperature(temp_matter);
chip::DeviceLayer::SystemLayer().StartTimer(
chip::System::Clock::Seconds32(5), SensorTimerCallback, nullptr);
break; /* timer ile tekrar çağrılacak */
}
}
Bu bölümde
- lighting-app, lock-app, bridge-app — Linux'ta doğrudan çalışabilen örnek Matter cihazlar
TemperatureMeasurement::Attributes::MeasuredValue::Set()ile attribute güncelleme- Aboneler (chip-tool subscribe, Home uygulamaları) değişimi otomatik alır
07 Linux Bridge Entegrasyonu
Matter bridge, Matter'ı konuşmayan cihazları (Zigbee, Z-Wave, BLE, Modbus) Matter fabric'ine köprüleyen özel bir Matter node türüdür.
Bridge mimarisi
Matter Fabric (IPv6 / Thread / WiFi)
│
┌─────┴─────┐
│ Matter │ (Linux bridge-app — Raspberry Pi)
│ Bridge │
└─────┬─────┘
│
┌─────┼─────┬──────────┐
│ │ │ │
Zigbee BLE Modbus Proprietary
(Z2M) (GATT) (RTU) (custom)
bridge-app — dinamik endpoint ekleme
#include <app/server/Server.h>
#include <app/util/af.h>
#include <app/clusters/bridged-device-basic-information-server/BridgedDeviceBasicInformationServer.h>
/* Köprülenecek cihaz yapısı */
struct BridgedDevice {
chip::EndpointId endpoint_id;
char friendly_name[64];
bool is_online;
};
static BridgedDevice g_devices[MAX_BRIDGE_DEVICES];
static chip::EndpointId g_next_endpoint = 2; /* 0=root, 1=aggregator */
/* Zigbee cihazını Matter'a köprüle */
chip::EndpointId AddZigbeeDevice(const char *name, uint16_t zigbee_addr)
{
chip::EndpointId eid = g_next_endpoint++;
/* Dinamik endpoint oluştur — OnOff + BridgedDeviceBasicInformation */
EmberAfEndpointType *ep_type = CreateBridgedEndpoint(eid,
DEVICE_TYPE_ON_OFF_LIGHT);
emberAfSetDynamicEndpoint(eid - 2, eid, ep_type,
Span<DataVersion>(g_dataVersions[eid]),
Span<const EmberAfDeviceType>(g_deviceList[eid]));
/* BridgedDeviceBasicInformation ayarla */
BridgedDeviceBasicInformation::Attributes::NodeLabel::Set(
eid, chip::CharSpan::fromCharString(name));
BridgedDeviceBasicInformation::Attributes::Reachable::Set(eid, true);
/* Zigbee adres eşlemesini kaydet */
g_zigbee_map[eid] = zigbee_addr;
ChipLogProgress(AppServer, "Bridged %s as endpoint %u", name, eid);
return eid;
}
/* Zigbee'den gelen OnOff event'ini Matter attribute'una yansıt */
void OnZigbeeStateChange(uint16_t zigbee_addr, bool on_off)
{
chip::EndpointId eid = FindEndpointByZigbeeAddr(zigbee_addr);
if (eid == chip::kInvalidEndpointId) return;
OnOff::Attributes::OnOff::Set(eid, on_off);
/* Abonelere otomatik bildirim gider */
}
Matter over WiFi — mDNS keşfi
# Matter cihazlarını mDNS ile keşfet
avahi-browse -r _matter._tcp
avahi-browse -r _matterc._udp # komisyonlanabilir cihazlar
# chip-tool ile mDNS üzerinden doğrudan komisyon
./chip-tool pairing onnetwork 1 20202021
# OTA provider başlatma
./chip-ota-provider-app \
--filepath ./firmware_v2.ota \
--KVS /tmp/ota-kv
# OTA güncellemesini başlat
./chip-tool otasoftwareupdaterequestor \
announce-otaprovider 2 0 0 0 1 0
# provider-nodeId=2, providerEndpoint=0, target-nodeId=1
Bu bölümde
- bridge-app dinamik endpoint ile Zigbee/BLE cihazları Matter'a köprüler
- Her köprülenmiş cihaz Matter fabric'te bağımsız node gibi görünür
- mDNS keşfi ile otomatik cihaz bulma; OTA provider ile uzaktan güncelleme
08 Pratik: Raspberry Pi Matter Bridge
Thread sıcaklık sensörünü Matter fabric'ine köprüleme. nRF52840 + OpenThread sensörü, OTBR üzerinden Matter bridge-app aracılığıyla Apple Home ve Google Home'a entegre edilir.
Donanım gereksinimleri
Adım 1 — nRF52840 dongle'a RCP firmware yükle
# nRF5 SDK + nrfutil kurulu olmalı
# OpenThread repo'sundan RCP örneği
cd openthread
cmake -B build/nrf52840 \
-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain/gnu.cmake \
-DOT_PLATFORM=nrf528xx \
-DOT_NCP_HDLC_ENABLE=ON \
-DOT_BOOTLOADER=USB \
.
make -C build/nrf52840 ot-rcp -j4
# nrfutil ile dongle'a flash
nrfutil pkg generate \
--hw-version 52 \
--sd-req 0x00 \
--application build/nrf52840/src/ncp/ot-rcp.hex \
--application-version 1 rcp.zip
nrfutil dfu usb-serial -pkg rcp.zip -p /dev/ttyACM0
Adım 2 — OTBR servisi başlat ve Thread ağı kur
# OTBR agent — RCP dongle /dev/ttyACM0
sudo otbr-agent -I wpan0 -B eth0 \
spinel+hdlc+uart:///dev/ttyACM0?uart-baudrate=115200
# Thread ağı oluştur
sudo ot-ctl dataset init new
sudo ot-ctl dataset channel 15
sudo ot-ctl dataset networkname SensorNet
sudo ot-ctl dataset commit active
sudo ot-ctl ifconfig up
sudo ot-ctl thread start
# Thread dataset al — sensör cihazı için gerekli
sudo ot-ctl dataset active -x
# 0e08000000000001000000030000103506...
Adım 3 — Matter bridge uygulaması
# connectedhomeip bridge-app derle
cd connectedhomeip
source scripts/activate.sh
gn gen out/bridge --args='
chip_mdns="platform"
chip_inet_config_enable_ipv4=true
chip_enable_transport_trace=false
'
ninja -C out/bridge examples/bridge-app/linux
# Bridge uygulamasını başlat
./out/bridge/chip-bridge-app \
--KVS /tmp/bridge-kv \
--discriminator 3840 \
--passcode 20202021
Adım 4 — chip-tool ile komisyon ve test
# Bridge'i komisyon et
./out/host/chip-tool pairing onnetwork 100 20202021
# Bridge'in endpoint listesini al
./out/host/chip-tool descriptor read parts-list 100 0
# Sensör cihazı endpoint 2 olarak görünür
./out/host/chip-tool temperaturemeasurement read measured-value 100 2
# Value: 2350 (23.50 °C)
# Sıcaklık subscribe (her 5–30 saniye güncelleme)
./out/host/chip-tool temperaturemeasurement subscribe measured-value \
5 30 100 2
# Apple Home uygulamasından QR kodu tara → otomatik bulunur
# Google Home uygulamasından "Cihaz ekle" → Matter → QR kodu tara
Thread sensör, OTBR aracılığıyla IPv6 erişilebilir hale gelir; Matter bridge-app SRP üzerinden sensörü Matter fabric'ine köprüler. Apple Home, Google Home ve Amazon Alexa aynı cihazı herhangi bir bulut servisi olmadan yerel ağda kontrol edebilir.
Bu bölümde
- nRF52840 USB dongle RCP olarak OTBR'a bağlanır — Thread radyo katmanı sağlar
- bridge-app Thread sensörü Matter TemperatureMeasurement cluster'ı olarak sunar
- chip-tool ile test; Apple Home/Google Home ile gerçek kullanım — bulut gereksiz