Sistem Mimarisi
Zeus 2.0, dört ana katmandan oluşan dağıtık bir IoT platformudur.
Katmanlar
┌─────────────────────────────────────────────────────────────────┐
│ FRONTEND (Next.js 14) │
│ Dashboard, SLD Editörü, Alarm, Ölçüm, Rapor, Widget │
│ TanStack Query + Zustand + WebSocket │
└──────────────┬──────────────────────────┬───────────────────────┘
│ REST API (/api/*) │ WebSocket (/ws)
┌──────────────▼──────────────────────────▼───────────────────────┐
│ BACKEND (FastAPI) │
│ 29 Router, MQTT Subscriber, Celery Worker, Alarm Engine │
│ JWT Auth, RBAC, Multi-Tenant Isolation │
├────────┬────────────┬──────────┬──────────┬────────────────────┤
│ Postgres│ Redis │ EMQX │ MinIO │ Celery Beat │
│ TimescaleDB│ Cache/Queue│ MQTT Broker│ S3 Storage│ Scheduled Tasks │
└────────┴────────────┴─────┬────┴──────────┴────────────────────┘
│ MQTT (TLS 8883)
┌───────────────────────────▼─────────────────────────────────────┐
│ EMBEDDED (ESP32 Gateway) │
│ FreeRTOS Dual-Core: Network Task + Modbus Task + App Task │
│ Modbus RTU (RS485) → JSON → MQTT Publish │
├─────────────────────────────────────────────────────────────────┤
│ Fiziksel Cihazlar: Enerji Analizörü, İnverter, Kompanzasyon, │
│ MCCB, Akıllı Sayaç (Modbus RTU / RS485) │
└─────────────────────────────────────────────────────────────────┘
Uçtan Uca Veri Akışı
Modbus Cihaz ──RS485──→ ESP32 Gateway ──MQTT──→ EMQX Broker
│
Backend Subscriber
│
┌────────────────┼────────────────┐
▼ ▼ ▼
TimescaleDB Alarm Engine WebSocket
(Ölçüm kayıt) (Eşik kontrol) (Canlı UI)
Tipik E2E gecikme: ~200ms (Modbus poll → DB kayıt → UI güncelleme)
Docker Servisleri
Sistem 12 Docker container'ı ile çalışır:
| Servis | Görevi | RAM |
|---|---|---|
| postgres | TimescaleDB ile zaman serisi veri | 768 MB |
| redis | Cache ve Celery kuyruk | 128 MB |
| emqx | MQTT broker (TCP + TLS) | 384 MB |
| backend | FastAPI API sunucusu | 512 MB |
| frontend | Next.js web uygulaması | 256 MB |
| modbus-poller | Modbus TCP polling daemon | 128 MB |
| celery-worker | Arka plan görevleri (OTA, alarm) | 256 MB |
| celery-beat | Periyodik görev zamanlayıcı | 128 MB |
| minio | S3-uyumlu firmware depolama | 256 MB |
| nginx | HTTPS reverse proxy | 64 MB |
| certbot | Let's Encrypt sertifika yenileme | — |
| autoheal | Sağlıksız container yeniden başlatma | 64 MB |
Toplam RAM: ~3 GB
Multi-Tenant İzolasyon
Zeus 2.0 her katmanda kiracı izolasyonu sağlar:
- API katmanı: Her endpoint
tenant_iddependency ile korunur - Veritabanı: Tüm sorgularda
WHERE tenant_id = :tidfiltresi - MQTT: Topic'lerde
tenant/{tid}/prefix'i zorunlu - WebSocket: Kiracı bazlı odalar (TenantRoom)
- RBAC: 58 granüler izin, 3 önceden tanımlı rol (Admin: 56, Operator: 27, Viewer: 13)