Ana içeriğe geç

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:

KademeKuyruk DolulukAksiyon
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
KomutTopicQoSRetain
Config pushdesired/config1Evet
Template pushdesired/templates/full1Evet
Test okumacmd/test_read1Hayır
Yeniden başlatcmd/reboot1Hayır
OTA başlatcmd/ota1Evet
Cihaz unclaimzeus/devices/{mac}/commands/ownership1Evet

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ş