← Portal SIPASI R&D · Analisis Data

# Analisis Arsitektur Data Telemetri & Rantai Agregasi Debit — SIPASI (Oransbari Clone) Tanggal: 27 Agustus 2026 · Disusun: Mantra + penelusuran kode aktual ---

1. Analisis Struktur `dd_device_in_minute` untuk Multi-Tipe Device

Kondisi Saat Ini

sql
data_id      varchar(20)   -- {device_id}.{HH}.{slot-5mnt} — kunci dedup
group_id     varchar(20)
id_key       varchar(60)   -- kredensial device
last_update  datetime
time_record  int(13)       -- unix timestamp device
data_1..14   varchar(100)  -- nilai sensor generik posisional
flag1        varchar(20)

Masalah Struktural

Usulan Penataan Ulang (Non-Destructive)

sql
ALTER TABLE dd_device_in_minute
  ADD COLUMN device_type VARCHAR(16) NOT NULL DEFAULT 'AWLR' AFTER id_key,
    -- denormalisasi dari dts_device_node.device_type: AWLR|AWS|ARR|ACTUATOR|OTHER
  ADD COLUMN data_map JSON NULL AFTER flag1,
    -- pemetaan nama→nilai: {"water_level":40.91,"battery":11.38}
  ADD INDEX idx_key_time (id_key, last_update),
  ADD INDEX idx_type_time (device_type, last_update);
Aturan pengisian `data_map`: Dampak: filter jadi `WHERE device_type='AWS'` tanpa join; analisis multi-model device tidak lagi menebak arti `data_3`. ---

2. Alur Agregasi: minute → real_ruas → harian → panca (hasil penelusuran kode)

dd_device_in_minute            (RAW menitan, generic sensor)
│  Mdl_data_debit::debit_saluran_avg(id_ruas, durasi_avg)
│    ── SELECT ... WHERE id_key=.. AND last_update >= MAX-N MINUTE
│    ── filterCloseValues(): buang outlier >10% deviasi
│    ── rata-rata rolling → konversi via fak_a/fak_b (rumus Weir/Parshall utk kode_bgn_ukur)
▼
dd_debit_real_ruas             (STATUS REALTIME PER RUAS — baris unik per id_ruas, REPLACE)
│   id(varchar)     = {idkey_atau_admin}x{ruas}
│   debit_sensor / tma_sensor / debit_kebutuhan / faktor_k / debit_perintah
│   bukaan_pintu (actuator!) / debit_manual / tma_manual  ← override operator
│  Penulis:
│   • Mdl_data_debit::update_debit_ruas() → replace otomatis dari sensor
│   • Awlms.php (jalur instant) → replace langsung tma+debit
│   • Operator manual via CMS → override manual fields
│  Pemicu posting berikutnya: Iopost::recDebitRuas()
│    dipanggil VIA URL (/cms/iopost/recDebitRuas) — TIDAK ADA cron!
▼
dd_debit_ruas_harian           (SNAPSHOT PER SLOT WAKTU SATU HARI, rows bertambah)
│   id_data   = identitas slot pencatatan
│   id_polatanam, dari/menuju, debit_kebutuhan, faktor_k, losses
│   debit_perintah, debit_real, tma, status, running, tujuan(bangunan/petak)
│  Penulis: Mdl_skema_jaringan::posting_kebutuhan_air() (baris ~1710 insert/update by id_data)
│  Pembaca: Apk.php (dashboard mobile), Blangko_o (laporan), Iopost panca
▼
dd_debit_ruas_panca            (AGREGAT PANCA-WARNA: rata-rata periode 5-harian)
    tanggal = awal periode panca (1,6,11,16,21,26)
    idx     = (bulan-1)*6 + floor(tgl/5)+1
    AVG(debit_kebutuhan/perintah/faktor_k/debit_real)
    dari dd_debit_ruas_harian BETWEEN date_start AND date_end — per id_ruas
    Penulis: Iopost::recDebitRuasPanca() — juga via URL, TANPA cron otomatis

Peran Tiap Level

| Tabel | Karakter | Granularitas | Cara update | Konsumen | |---|---|---|---|---| | `dd_device_in_minute` | Raw telemetri | ≤1–5 menit | UPSERT by `data_id` | debit calc, SCADA, hujan, publik | | `dd_debit_real_ruas` | Operasional realtime | terakhir per ruas (REPLACE) | auto-sensor/operator | Skema `pembagian()`, halaman publik | | `dd_debit_ruas_harian` | Snapshot pencatatan | per posting event dalam hari | INSERT/UPDATE by `id_data` | APK dashboard, laporan Blangko | | `dd_debit_ruas_panca` | Rekap panca-warna | rata-rata 5 hari | UPSERT by `tanggal+id_ruas` | Evaluasi rotasi/giliran air |

Temuan Penting (risiko)

---

3. Rekomendasi Implementasi Lanjutan