← Portal SIPASI R&D · Dokumentasi Teknis

# Dokumentasi Teknis: Sistem Koneksi Telemetri SIPASI (via /cms/41) Tanggal: 27 Agustus 2026 · Oleh: Mantra (analisis kode aktual) ---

1. Peta Modul

| Komponen | Lokasi | Peran | |---|---|---| | Menu 41 "Setting AWLMS" | `cms_navigation.id=41` → `view_mode=listing` | CRUD pendaftaran device | | Tabel properti listing | `cms_table_property id=11` | Render `dts_device_node` + filter `device_type IN ('AWLMS','AWLR-LIMPAS','AWLR')` | | API controller | `Controllers/Api.php` (325 baris) | Endpoint ingest telemetri | | Tabel target ingest | `dd_device_in_minute` | Data mentah per menit/5-menit, upsert by `data_id` | | Konsumsi data | `Models/Sipasi/Mdl_data_debit.php` | Baca minute → hitung debit ruas → `dd_debit_real_ruas`, dll |

2. Tabel `dts_device_node` — Field Kunci

| Field | Fungsi | |---|---| | `id_key` | Kredensial device (unik, dipakai di URL API). Contoh format: `CPIxSAPONxBSP0xINTAKE` | | `name`, `address` | Identitas & lokasi stasiun | | `id_ruas` | Relasi ke topologi skema (`b0xb1`) → menghubungkan data sensor ke bangunan jaringan | | `head_sensor` | Range/kapasitas sensor | | `kode_bgn_ukur`,`lebar_bgn_ukur`,`fak_a`,`fak_b` | Parameter hidrolika untuk konversi level→debit | | `dtime` | Interval kirim device (detik) | | `device_type` | AWLR / AWLR-LIMPAS / AWLMS | | `status` | Hanya `Active` yang boleh ingest | | `last_update`,`last_data` | Heartbeat + payload terakhir |

3. Rantai Aliran Data (ASCII)

Device ESP8266/ESP32/GSM
        │  GET /api/key/{id_key}?parsing={unix}|{s1}|{s2}|...&boot=&fv=
        ▼
Controllers/Api.php::getpos()
        │ cek isValidKey() regex [a-zA-Z0-9_-]{3,64}
        │ cek dts_device_node: id_key cocok AND status='Active'
        ▼
ingestGetParsing(device,idKey,parsing)
        ├─ explode('|') → data_1..data_n (ix>=1)
        ├─ time_record: unix ts valid ±100rb detik → date()
        ├─ data_id = {device_id}.{HH}.{mm dibulatkan kelipatan 5}
        ├─ insert_minutes(): UPSERT dd_device_in_minute by data_id
        ├─ UPDATE dts_device_node SET last_update, last_data   ← heartbeat
        └─ log raw → writable/logs/device_{key}.log
        ▼
Mdl_data_debit.php::debit_saluran_avg(id_ruas, durasi_avg)
   SELECT ... FROM dd_device_in_minute WHERE id_key=... last_update >= MAX - INTERVAL N MINUTE
        → rata-rata rolling → konversi fak_a/fak_b → dd_debit_real_ruas

4. Endpoint API (semua JSON)

| Endpoint | Method | Fungsi | |---|---|---| | `/api/dvc/{id_key}` | GET | Metadata device terdaftar | | `/api/key/{id_key}?parsing={ts}\|{v1}\|{v2}..` | GET | Ingest format pipe (legacy MCU) | | `/api/key/{id_key}` + body JSON/form (`time_record`, field bebas) | POST | Ingest modern; tiap field jadi `data_1..n` berurutan | | `/api/key/{id_key}/espcam?listen=ready` / POST upload | GET/POST | Poll & upload foto ESP32-CAM | | `/api/rain/{id_key}` (total_rain_day) | GET | Akumulasi hujan harian | Respons GET-parsing juga membawa `OTA_update` flag & `dateNow` (fitur update firmware over-the-air).

5. Mekanisme `data_id` (deduplikasi)

`{id_device}.{jam HH}.{menit-dibulatkan-ke-bawah-kelipatan-5}` → contoh `1.14.25`. Efek: device dengan `dtime=300` (5 menit) otomatis menghasilkan satu baris per slot 5 menit; retry/duplicate dikirim device akan meng-update baris yang sama, bukan duplikat.

6. Temuan Catatan (untuk riset)

7. Integrasi dgn Skema (kaitan /cms/37)

Saat membuat skema sekarang, node bangunan dapat dihubungkan ke device via `id_ruas`: ---

8. PEMBARUAN 27 AGUSTUS 2026

a) Koreksi Arsitektur Data (hasil penelusuran agy — DOC_TELEMETRI_FLOW.md)

Hipotesis awal "dd_device_in_minute → dd_awlr_log" TIDAK AKURAT. Fakta: dua jalur ingest PARALEL & INDEPENDEN: Tidak ada kode yang memindahkan dd_device_in_minute → dd_awlr_log. Konversi head_sensor→tma→debit berlangsung inline di Awlms.php dengan fak_a/fak_b/lebar_bgn_ukur.

b) ESP32-CAM Dihapus dari Spesifikasi API

Endpoint polling/upload kamera tidak pernah diimplementasi — semua referensi dihapus dari README API.

c) HMAC Header Authentication (aktif, teruji)