Veri Akışı
Telemetri Akışı (Cihaz → Veritabanı → UI)
Bir ölçüm verisinin cihazdan kullanıcı ekranına ulaşma süreci 10 adımdan oluşur:
1. Modbus Poll (ESP32 Core 1)
Modbus Task, UART mutex'i alır ve RS485 üzerinden cihaza Modbus RTU isteği gönderir (Function Code 3 veya 4).
2. Register Parsing
Template'e göre ham register değerleri anlamlı alanlara dönüştürülür:
- Register 4354:2 (float32) →
voltage_l1n = 230.5 V - Register 4356:2 (float32) →
current_l1 = 45.2 A
3. JSON Payload Oluşturma
Per-group JSON payload oluşturulur:
{
"deviceId": "varkombi-001",
"groupId": "realtime",
"timestamp": "2026-01-27T12:00:00.000Z",
"data": {
"voltage_l1n": 230.5,
"current_l1": 45.2,
"power_active_l1": 9500
}
}
4. Kuyruk (TelemetryQueue)
Payload, FreeRTOS kuyruğuna eklenir (15 item kapasiteli, her biri max 1KB).
5. MQTT Publish (ESP32 Core 0)
Network Task kuyruğu okur ve MQTT topic'ine publish eder:
Topic: tenant/{tid}/gw/{gid}/data/device/varkombi-001/realtime
QoS: 0 (realtime grubu)
6. EMQX Broker
Broker ACL kurallarını doğrular ve mesajı backend subscriber'a iletir.
7. Backend Subscriber
MQTT client mesajı alır, payload'ı decode eder (JSON / MessagePack / partial recovery).
8. Veritabanı Kayıt
device_measurements hypertable'a UPSERT yapılır:
INSERT INTO device_measurements (device_id, time, voltage_l1n, current_l1, ...)
ON CONFLICT (device_id, time) DO UPDATE SET ...
9. Alarm Değerlendirme
Alarm engine eşik kontrolü yapar. Kural ihlali varsa alarm oluşturulur ve bildirim gönderilir.
10. WebSocket Broadcast
Ölçüm verisi, ilgili kiracının tüm bağlı WebSocket istemcilerine iletilir:
{"type": "measurement", "device_id": "uuid", "data": {"voltage_l1n": 230.5, ...}}
Backpressure Mekanizması
ESP32 tarafında kuyruk doluluk oranına göre 3 kademeli koruma uygulanır:
| Kademe | Kuyruk Doluluk | Aksiyon |
|---|---|---|
| Normal | < %33 (5 item) | Tam hızda polling |
| Throttle | ≥ %66 (10 item) | Polling'ler arası 500ms bekleme |
| Critical | ≥ %86 (13 item) | En eski veri düşürülür, polling duraklar |
Hysteresis ile kademe geçişlerinde salınım önlenir.
Komut Akışı (Backend → Cihaz)
Backend API → MQTT Publish → EMQX → ESP32 Subscribe → Command Handler
| Komut | Topic | QoS | Retain |
|---|---|---|---|
| Config push | desired/config | 1 | Evet |
| Template push | desired/templates/full | 1 | Evet |
| Test okuma | cmd/test_read | 1 | Hayır |
| Yeniden başlat | cmd/reboot | 1 | Hayır |
| OTA başlat | cmd/ota | 1 | Evet |
| Cihaz unclaim | zeus/devices/{mac}/commands/ownership | 1 | Evet |
Bootstrap Akışı (Yeni Cihaz Kaydı)
1. ESP32 açılır → WiFi bağlanır → MQTT bağlanır
2. Publish: /bootstrap/{mac}/hello (cihaz bilgileri)
3. Backend unclaimed_devices tablosuna kayıt
4. Kullanıcı UI'dan "Claim" yapar
5. Backend publish: /bootstrap/{mac}/srv/rebind (tenant + gateway bilgisi)
6. ESP32 tenant topic'lerine subscribe olur
7. Publish: /bootstrap/{mac}/claim_ready (onay)
8. Normal operasyona geçiş