๐ŸŽฏ

{{ setpointKeypadWidget.title || 'Atur Target Set Point' }}

{{ getTopicNameById(setpointKeypadWidget.topic_id) || 'Telecontrol SP' }}

{{ isKeypadValueValid ? 'NILAI SETPOINT BARU' : 'โš ๏ธ MELEBIHI BATAS AMAN' }}
{{ keypadInputValue || '0' }} {{ getTopicUnitById(setpointKeypadWidget.topic_id) || setpointKeypadWidget.unit || '' }}
Batas Aman: {{ getSetpointBounds(setpointKeypadWidget).min }} s/d {{ getSetpointBounds(setpointKeypadWidget).max }}
โ„น๏ธ Cara menggunakan setpoint

SP (Target) adalah nilai tujuan proses. Masukkan angka, gunakan tombol langkah, lalu tekan KIRIM SETPOINT.

Batas aman mengikuti konfigurasi tag. Nilai di luar rentang akan ditolak.

Setelah dikirim, status masih menunggu feedback. Nilai aktual (PV) hanya berubah setelah PLC/RTU mengirim konfirmasi.

Jangan mengubah SP tanpa memastikan mode kontrol, satuan, dan kondisi pompa/valve aman.

{{ toast.message }}

{{ chartTopic.name }}

{{ chartTopic.topic_string }}

Fetching telemetry history...
{{ chartError }}

R2F-IOT Auth

Enter credentials to access backend

๐Ÿ›ฐ๏ธ

SCADA Telemetry Mission Control

โ— {{ wsStatus ? 'LIVE STREAMING' : 'DISCONNECTED' }}

Core: R2F-IOT v2.5 | Paket Diterima: {{ overviewPacketCounter.toLocaleString() }} | Waktu Server: {{ currentTime }}

๐Ÿ–ฅ๏ธ Buka Client View

Status Node Gateway & Storage Engine

{{ devices.length + 2 }} Nodes Monitored
๐ŸŒ
CORE SERVER
{{ wsStatus ? 'ONLINE' : 'OFFLINE' }}

R2F-IOT Core

Port: 4000 HTTP + WS Live
{{ getProtocolBadge(device.protocol).icon }} {{ getProtocolBadge(device.protocol).label }}
{{ device.status === 'online' ? 'CONNECTED' : 'OFFLINE' }}

{{ device.name }}

{{ device.host }}:{{ device.port }}
๐Ÿ˜
SCADA DATABASE
SYNCED

PostgreSQL DB

Active Devices: {{ devices.length }} Storage Engine
โฑ๏ธ
SYSTEM RUNTIME
ACTIVE

{{ uptime }}

Loop: 1000ms Healthy
โ—ˆ
MQTT TOPICS
{{ topics.length }} active streams
โ—
DEVICE ENDPOINTS
{{ devices.length }} gateways active
{{ activeAlarms.length ? '๐Ÿšจ' : '๐Ÿ›ก๏ธ' }}
ALARM SENTINEL
{{ activeAlarms.length }} {{ activeAlarms.length ? 'needs attention' : 'all optimal' }}
โฑ๏ธ
SERVER CLOCK
{{ currentTime }}

LIVE TELEMETRY & SQL STREAM (REAL-TIME)

{{ filteredRawStream.length }} messages
๐Ÿ”
๐Ÿ“ก {{ rawStream.length === 0 ? 'Menunggu pesan MQTT & telemetri masuk...' : 'Tidak ada data yang cocok dengan filter pencarian.' }}
{{ String(msg.topic || '').startsWith('SELECT') ? '๐Ÿ—„๏ธ SQL POLL' : '๐Ÿ“ก MQTT' }} {{ msg.topic }}
{{ new Date(msg.time || Date.now()).toLocaleTimeString() }}
VAL: {{ msg.raw_data }}
NUMERIC
scada-server.log โ€” Core Engine Diagnostics
[{{ log.time }}] {{ log.level }} {{ log.msg }}
{{ currentDashboard?.icon || '๐Ÿ’ง' }}
{{ currentDashboard?.name || 'SCADA Studio' }} /{{ currentDashboard?.slug }}
{{ hmiWidgets.length }} Widgets ยท {{ hmiWidgets.filter(w => w.topic_id).length }} Bound ยท {{ selectedHMIWidgetIds.length }} Dipilih ยท {{ currentTime }}
LIVE
RESOLUSI ร—
{{ Math.round(hmiZoom * 100) }}%
? Bantuan
Panduan HMI Canvas
  1. Pilih dashboard melalui selector stasiun di toolbar.
  2. Mode Studio: pilih komponen di panel kiri, lalu klik canvas untuk menambahkan.
  3. Hubungkan tag: pilih widget dan atur sumber MQTT pada Inspector kanan.
  4. Atur tampilan: drag untuk memindahkan, gunakan handle untuk resize/rotate, atau tekan Fit Isi.
  5. Baca status: LIVE/ONLINE berarti data masuk; NO FEEDBACK/STALE berarti jangan menganggap aktuator aktif.
  6. Aliran: animasi hanya aktif jika flow valid, pompa running, dan valve terbuka.
  7. Presentasi: sembunyikan panel untuk tampilan control room. Keluar dengan tombol yang sama.
Perubahan kontrol pompa/valve tetap harus mengikuti interlock PLC dan prosedur keselamatan.
{{ hmiSaveState === 'saving' ? 'Menyimpanโ€ฆ' : hmiSaveState === 'pending' ? 'Perubahanโ€ฆ' : hmiSaveState === 'error' ? 'Gagal simpan' : 'Tersimpan' }}
{{ alarm.rule?.severity || 'warning' }} {{ alarm.message }} +{{ activeAlarms.length - 3 }} lainnya
Tidak ada alarm aktif
๐Ÿ“ฆ KOMPONEN P&ID 3D
29
โš™๏ธ PROSES & REAKTOR 3D
๐Ÿ”„ POMPA & AKTUATOR 3D
๐Ÿบ FILTRASI & LEVEL 3D
๐Ÿšฐ PERPIPAAN 3D
๐Ÿ“Š INSTRUMEN & SENSOR 3D
๐Ÿšจ KONTROL & ALARM 3D
๐Ÿ“น MEDIA & VISUAL
Aliran Normal Warning Alarm
Minimap
{{ g.name }}
{{ selectedHMIWidgetIds.length }} komponen dipilih ยท seret untuk memindahkan grup
๐Ÿ”— {{ dashboards.find(d => d.id === w.target_dashboard_id)?.name || 'Unit' }}
๐Ÿ”’
Pengaturan langsung {{ w.type }}
Arah
โ†ป
Menu Komponen
{{ w.title }}
100% 75% 50% 25% 0%
{{ (parseFloat(realtimeData[w.topic_id] ?? (w.topic_id ? 0 : 45)) || 0).toFixed(1) }}% LOW LEVEL
{{ isPumpRunning(w) ? 'RUNNING' : (w.topic_id && realtimeData[w.topic_id] === undefined ? 'NO FEEDBACK' : 'STOPPED') }}
M
{{ w.title || 'Motor' }}
{{ realtimeData[w.topic_id] === undefined ? 'NO FEEDBACK' : ((parseFloat(realtimeData[w.topic_id]) > 0 || String(realtimeData[w.topic_id]).toLowerCase() === 'open') ? 'OPEN' : 'CLOSED') }}
โน
โน
{{ w.title }}
{{ realtimeData[w.topic_id] !== undefined ? parseFloat(realtimeData[w.topic_id]).toFixed(1) : 'โ€“' }} mยณ/h
{{ getTopicString(w.topic_id) || 'Live Sensor' }} {{ getWidgetQuality(w).label }}
{{ w.title }}
{{ realtimeData[w.topic_id] !== undefined ? realtimeData[w.topic_id] : 'โ€“' }}
{{ getWidgetDisplayValue(w) }}
{{ getTopicString(w.topic_id) || (w.topic_id ? '...' : 'No Topic Bound') }} {{ getWidgetQuality(w).label }}
{{ w.title || 'Live Trend Chart' }} {{ getTopicNameById(w.topic_id) || 'Sensor Live' }}
{{ realtimeData[w.topic_id] !== undefined ? parseFloat(realtimeData[w.topic_id]).toFixed(2) : '0.00' }} {{ getTopicUnitById(w.topic_id) }}
{{ w.title || 'Real-time' }} {{ realtimeData[w.topic_id] !== undefined ? parseFloat(realtimeData[w.topic_id]).toFixed(1) : '0.0' }} {{ getTopicUnitById(w.topic_id) }}
{{ w.title || 'Grafana Panel' }}
{{ y }}
{{ t }}
{{ getTopicNameById(w.topic_id) || 'Sensor' }}
Live: {{ realtimeData[w.topic_id] !== undefined ? parseFloat(realtimeData[w.topic_id]).toFixed(1) : 'โ€“' }}
{{ w.title || 'Gauge Panel' }}
{{ realtimeData[w.topic_id] !== undefined ? parseFloat(realtimeData[w.topic_id]).toFixed(1) : 'โ€“' }} {{ getTopicUnitById(w.topic_id) }}
{{ w.title || 'Label' }}
{{ w.title || 'Clarifier' }}
โš™
Turbidity {{ realtimeData[w.topic_id] !== undefined ? parseFloat(realtimeData[w.topic_id]).toFixed(2) + ' NTU' : '0.85 NTU' }}
{{ w.title || 'Aerator' }} Oโ‚‚ ACTIVE
DO Level {{ realtimeData[w.topic_id] !== undefined ? parseFloat(realtimeData[w.topic_id]).toFixed(1) + ' mg/L' : '7.4 mg/L' }}
{{ w.title || 'Submersible' }}
{{ (parseFloat(realtimeData[w.topic_id] ?? 1) > 0) ? 'RUNNING' : 'STOPPED' }}
{{ w.title || 'Dosing Pump' }}
PAC / Clโ‚‚
๐Ÿ’‰
Stroke Rate {{ realtimeData[w.topic_id] !== undefined ? parseFloat(realtimeData[w.topic_id]).toFixed(1) + ' L/h' : '12.5 L/h' }}
PRV: {{ realtimeData[w.topic_id] !== undefined ? parseFloat(realtimeData[w.topic_id]).toFixed(0) + '%' : '75%' }}
โž”
CHECK VALVE
{{ w.title || 'Sand Filter' }} ฮ”P {{ realtimeData[w.topic_id] !== undefined ? parseFloat(realtimeData[w.topic_id]).toFixed(2) : '0.45' }} bar
Water Layer
Anthracite Coal
Silica Sand
Gravel Base
Status: FILTRASI AKTIF
{{ (parseFloat(realtimeData[w.topic_id] ?? 60)).toFixed(0) }}%
{{ w.title || 'Level' }}
๐Ÿ”ฌ {{ w.title || 'Water Quality' }} PERMENKES OK
pH Level 7.35
Kekeruhan {{ realtimeData[w.topic_id] !== undefined ? parseFloat(realtimeData[w.topic_id]).toFixed(2) : '0.62' }} NTU
Sisa Klorin 0.40 mg/L
TDS 128 ppm
Standar Higiene & Sanitasi
โšก {{ w.title || 'Power Meter' }} PULSE
Tegangan 224.5 V
Arus Beban 16.8 A
Daya Aktif {{ realtimeData[w.topic_id] !== undefined ? parseFloat(realtimeData[w.topic_id]).toFixed(1) : '3.7' }} kW
Cos ฯ† 0.96
TOTAL: 1,482.60 kWh
๐Ÿ”˜ {{ (parseFloat(realtimeData[w.topic_id] ?? 1) > 0) ? 'ON' : 'OFF' }}
{{ w.title || 'Switch' }}
๐Ÿงฎ {{ w.title || 'Smart Math Calc' }}
{{ calculateMathWidget(w).modeLabel }}
{{ calculateMathWidget(w).formatted }} {{ calculateMathWidget(w).unit }}
{{ calculateMathWidget(w).isWarning ? 'โš ๏ธ MELEBIHI THRESHOLD' : 'REALTIME VIRTUAL AGGREGATION' }}
{{ item.sign }} {{ item.label }}: {{ (item.val || 0).toFixed(1) }}
๐ŸŽฏ {{ w.title || 'Target Set Point' }}
SP CONTROL
TARGET SETPOINT
{{ formatTopicVal(getSetpointVal(w)) }} {{ getTopicUnitById(w.topic_id) || w.unit || '' }}
Min: {{ getSetpointBounds(w).min }} | Max: {{ getSetpointBounds(w).max }}
๐Ÿ”ด
๐ŸŸก
๐ŸŸข
{{ currentTime }}
LIVE REC {{ w.title || 'CAM-01 INTAKE' }}
{{ currentTime }}
CCTV Stream
๐Ÿ“น CCTV LIVE FEED Masukkan URL Stream / MJPEG
1080p ยท 25 FPS
CAM ON
Custom Image
๐Ÿ–ผ๏ธ Pilih / Upload Gambar PNG / JPG / SVG / WebP
{{ selectedHMIWidgetIds.length }} komponen dipilih
PROPERTI KOMPONEN
{{ selectedHMIWidget.type }} LIVE: {{ realtimeData[selectedHMIWidget.topic_id] ?? 'โ€“' }}
{{ existingGroupNames.length }} Grup
โ–พ
Grup Populer / Terdaftar:
Stream URL / MJPEG / Snapshot URL:
Upload File Gambar Lokal:
Atau Masukkan URL Gambar:
Fit Mode:
Frame Style:
Transparansi (Opacity): {{ selectedHMIWidget.opacity !== undefined ? selectedHMIWidget.opacity : 100 }}%
๐Ÿงฎ Mode Matematika & Formula
Posisi (px)
X
Y
Ukuran (px)
Lebar (W) {{ selectedHMIWidget.width }}px
Tinggi (H) {{ selectedHMIWidget.height }}px
Diameter Pipa (DN Standar)
Preset Ukuran Cepat
Rotasi
{{ selectedHMIWidget.rotation || 0 }}ยฐ
0ยฐ90ยฐ180ยฐ270ยฐ360ยฐ
Perataan Kanvas

๐ŸŽ›๏ธ PENGATURAN STUDIO

Konfigurasi stasiun & layout aktif.

Stasiun Terpilih
{{ currentDashboard?.icon || '๐Ÿ’ง' }}
{{ currentDashboard?.name }} /{{ currentDashboard?.slug }}
detik tanpa update โ†’ STALE
Aksi Cepat Stasiun
๐Ÿ’ก Tips Studio Canvas:

Klik komponen apapun di kanvas untuk membuka property inspector, menghubungkan sensor MQTT, atau membuat link drill-down.

UNIT
{{ d.icon || '๐Ÿ’ง' }}
{{ d.name }}
/{{ d.slug }}
{{ hmiWidgets.filter(w => String(w.dashboard_id) === String(d.id)).length }}W
๐Ÿ”Œ

Master Device & Protocol Gateway

Konfigurasi koneksi lapangan: MQTT Brokers, Database MySQL/PostgreSQL/InfluxDB, Modbus PLC, BACnet, & OPC UA.

{{ devices.filter(d => d.status === 'online').length }} Terhubung / {{ devices.length }} Total
{{ (device.protocol || '').toLowerCase().includes('mqtt') ? '๐Ÿ“ก' : ((device.protocol || '').toLowerCase().match(/sql|mariadb|db/) ? '๐Ÿ—„๏ธ' : ((device.protocol || '').toLowerCase().includes('modbus') ? 'โšก' : '๐Ÿ”Œ')) }} {{ device.protocol || 'TCP/IP' }}

{{ device.name }}

HOST / IP: {{ device.host || 'localhost' }}
PORT: {{ device.port || 'โ€“' }}
DATABASE: {{ device.database_name }}
{{ device.description }}
{{ device.status === 'online' ? 'CONNECTED' : 'DISCONNECTED' }}
ID #{{ device.id }}
๐Ÿ”Œ

Belum ada Device / Database terdaftar

Tambahkan koneksi MQTT broker, database MySQL / InfluxDB, atau PLC Modbus lapangan untuk mulai akuisisi data sensor.

๐Ÿ“ก

MANAJEMEN TAG & SENSOR

Pengaturan akuisisi data sensor MQTT & Database, format payload JSON, dan pemetaan GPS.

๐Ÿ“Š {{ topics.length }} Tag Terdaftar
NAMA SENSOR STRING TOPIK / SQL QUERY FORMAT & GATEWAY NILAI TERAKHIR (LIVE) KOORDINAT GIS (GPS) AKSI
{{ topic.name }}
{{ topic.unit }} Skala: {{ topic.min_value ?? 0 }} ~ {{ topic.max_value ?? 100 }}
{{ topic.topic_string }}
{{ topic.payload_format || 'simple' }} key: {{ topic.json_key }}
๐Ÿ”Œ {{ devices.find(d => d.id === topic.device_id)?.name || 'Device #' + topic.device_id }}
{{ realtimeData[topic.id] !== undefined ? realtimeData[topic.id] : 'โ€“' }} {{ topic.unit }}
๐Ÿ“ {{ topic.lat.toFixed(4) }}, {{ topic.lon.toFixed(4) }}
Belum diplot
๐Ÿ“ฅ CSV
๐Ÿ“ก Belum ada topik MQTT / SQL sensor terdaftar. Klik "+ Tambah Topik Baru" untuk mulai.
โšก

Industrial SCADA Telecontrol & Actuator Dispatch

๐Ÿ”’ Interlock Active ยท Level 2 Auth

Kendali Pompa Distribusi | Modulasi Katup PRV | Inverter VFD (Hz) | Dosing Kimia & Flushing

๐ŸŽ›๏ธ Sakelar Cepat Aktuator & Kendali Lapangan (Actuator Switchboard)

6 Aktuator Terhubung
โšก

Booster Pump 01

Stasiun Pusat Kota ยท 45.2 kW
โ— {{ telecontrolActuators[0].status }}
DEBIT113 mยณ/h
TEKANAN3.8 bar
VFD FREQ{{ telecontrolActuators[0].vfd_hz }} Hz
Target Frekuensi Inverter (VFD): {{ telecontrolActuators[0].vfd_hz }} Hz
๐Ÿ’ง

Intake Submersible 01

Air Baku Sungai Ayung ยท 75 kW
โ— {{ telecontrolActuators[1].status }}
DEBIT210 mยณ/h
HEAD4.2 bar
MODE{{ telecontrolActuators[1].mode }}

Mode otomatis memantau level tangki IPA. Pompa beroperasi menjaga suplai air baku kontinu.

๐Ÿ”˜

Katup Modulasi PRV (DMA 01)

Zona Kota Pusat ยท DN300
OPEN {{ telecontrolActuators[2].valve_open_pct }}%
INLET PRESS3.8 bar
OUTLET PRESS2.2 bar
Bukaan Katup (Aperture): {{ telecontrolActuators[2].valve_open_pct }}%
๐Ÿงช

Dosing Pump Kimia

WTP Gatsu ยท Klorin & Koagulan
โ— {{ telecontrolActuators[3].status }}
DOSING RATE12.5 L/jam
AIR BAKU pH7.2 pH (Aman)

Injeksi otomatis bahan kimia desinfeksi untuk memastikan baku mutu air minum.

๐Ÿšฐ

Katup Flushing Pipa

Pipa Transmisi Induk DN500
{{ telecontrolActuators[4].status }}

Pengurasan endapan sedimen pipa transmisi. Tombol akan membuka katup selama 30 detik lalu menutup otomatis.

๐Ÿ”‹

Genset & ATS Backup

Automatic Transfer Switch
{{ telecontrolActuators[5].status }}
SUMBER DAYA UTAMA PLN UTAMA NORMAL (380V / 50Hz)

Mode ATS otomatis mengalihkan beban ke genset dalam 8 detik jika terjadi pemadaman PLN.

๐Ÿ’ป

Manual MQTT & JSON Command Dispatch

Kirim perintah manual dengan payload JSON ke target topic.

Template Perintah Cepat:
๐Ÿ“œ

Jejak Riwayat Eksekusi Perintah (Dispatch Log)

{{ dispatchedCommands.length }} Perintah Terkirim
WAKTU TARGET TOPIC PAYLOAD STATUS
{{ cmd.time }} {{ cmd.topic }} {{ cmd.payload }} {{ cmd.status }}
๐Ÿšจ

SCADA Alarm Matrix & Threshold Rules Engine

โ— {{ activeAlarms.length }} INSIDEN KRITIS AKTIF โ— SISTEM NORMAL

Evaluasi Ambang Batas Sensor | Tingkat Keparahan (Critical, Warning, Info) | Pusat Notifikasi & Sirine

{{ activeAlarms.length > 0 ? '๐Ÿšจ' : '๐Ÿ›ก๏ธ' }}
ACTIVE ALARM INCIDENTS
{{ activeAlarms.length > 0 ? 'SIAGA 1' : 'NORMAL' }}

{{ activeAlarms.length }} insiden

Status Respon Lapangan {{ activeAlarms.length > 0 ? 'Perlu Tindakan' : 'Semua Normal' }}
โ›”
CRITICAL RULES
High Priority

{{ rules.filter(r => r.severity === 'critical').length }} aturan

Telegram + E-Stop Auto Prioritas Utama
โš ๏ธ
WARNING RULES
Medium Priority

{{ rules.filter(r => r.severity === 'warning').length }} aturan

Peringatan Toleransi Siaga
๐Ÿ“‹
TOTAL RULES MATRIX
Realtime Active

{{ rules.length }} matriks

Evaluasi Per Detik โšก Go Rule Engine

๐Ÿšจ Active Alarms Incident Command Log (Insiden Aktif)

Alarm yang saat ini melanggar batas toleransi sensor lapangan
๐Ÿ”
WAKTU TERPICU TINGKAT SEVERITY ATURAN & TOPIK SENSOR PESAN & NILAI ANOMALI STATUS AKSI OPERATOR
{{ new Date(alarm.created_at).toLocaleTimeString('id-ID') }}
{{ new Date(alarm.created_at).toLocaleDateString('id-ID') }}
โ— {{ (alarm.rule?.severity || 'CRITICAL').toUpperCase() }}
{{ alarm.rule?.name || 'Threshold Rule' }}
{{ alarm.rule?.topic?.topic_string || '-' }}
{{ alarm.message }} {{ alarm.status.toUpperCase() }}
๐Ÿ›ก๏ธ

Semua Parameter Sensor Berada Dalam Batas Normal

Tidak ada alarm atau pelanggaran threshold aktif yang terdeteksi saat ini.

๐Ÿ“‹ Matriks Konfigurasi Aturan Alarm (Configured Rules)

Aturan logika matematis pemicu alarm otomatis
๐Ÿ”
NAMA ATURAN KONDISI LOGIKA SENSOR TINGKAT SEVERITY KANAL NOTIFIKASI AKSI
โš ๏ธ
{{ rule.name }}
{{ rule.message || 'Peringatan ambang batas terlampaui' }}
{{ rule.topic?.topic_string || 'topic_sensor' }} {{ rule.condition }} {{ rule.threshold }}
{{ (rule.severity || 'WARNING').toUpperCase() }}
๐Ÿ“ฑ Telegram ๐Ÿ”Š Sirine UI
Tidak ada aturan alarm yang sesuai dengan pencarian filter.
๐ŸŽ›๏ธ

Daftar & Pengelola Multi-Dashboard

Pilih unit untuk ditampilkan, diedit tata letaknya, diduplikasi, atau diperbaiki.

Total Unit Terdaftar: {{ dashboards.length }} Unit
Unit / Nama Dashboard Kode Slug Ukuran Kanvas Status Aksi Operasi
{{ d.icon || '๐Ÿ’ง' }}
{{ d.name }}
{{ d.description || 'Tidak ada deskripsi' }}
{{ d.slug }} {{ d.canvas_width || 1400 }} ร— {{ d.canvas_height || 700 }} px โ— SEDANG AKTIF DEFAULT Tersedia
๐ŸŽ›๏ธ

{{ editingDashboardId ? 'Edit Konfigurasi Dashboard' : 'Buat Multi-Dashboard Baru' }}

Tambahkan stasiun pengolahan atau unit SCADA baru.

๐Ÿ’ก Seluruh posisi tangki, pipa, valve, dan pompa akan diduplikasi otomatis.

{{ paletteTooltip.data.icon }}

{{ paletteTooltip.data.title }}

{{ paletteTooltip.data.category }}

{{ paletteTooltip.data.desc }}

๐Ÿ”— Binding Sensor / Tag:
{{ paletteTooltip.data.binding }}
โœจ Fitur & Interaktivitas:
โ€ข {{ feat }}
๐Ÿ’ก Klik tombol untuk pasang ke kanvas P&ID Studio
๐Ÿงช

{{ editingWqId ? 'Edit Parameter Kualitas Air' : 'Tambah Parameter Kualitas Air Baru' }}

Standar Baku Mutu Permenkes No. 2 Tahun 2023 & Titik Sampling Telemetri

๐Ÿ“Š Mode Sumber Data Uji Mutu Air:
๐Ÿ“œ Batas Standar Baku Mutu Permenkes No. 2/2023:
๐Ÿ“

{{ dmaConfigTab === 'iwa' ? 'Pengaturan Parameter Matriks IWA' : (editingDmaId ? 'Edit Konfigurasi Zona DMA' : 'Tambah Zona Distribusi DMA Baru') }}

Konfigurasi Sensor Inflow, Outflow, Aset Pipa & Matriks Neraca Air

๐Ÿ“Š Mode Sumber Data Debit Inflow & Outflow:
๐ŸŒ Parameter Audit Matriks IWA (Permen PUPR):
%
Standar Nasional PUPR: Maksimal 20% (Kategori Baik)
%
%
๐Ÿ’ก Simulasi Matriks Neraca Air Sistem Saat Ini:
Total Pasokan Masuk (System Input): {{ totalSystemInflow.toLocaleString('id-ID') }} mยณ/h (100%)
Konsumsi Berekening (Air Terjual): {{ iwaBilledPct }}%
Konsumsi Tak Berekening (Flushing): {{ iwaUnbilledPct }}%
Kehilangan Komersial (Non-Fisik): {{ iwaCommercialLossPct }}%
Kebocoran Fisik Pipa (Real Losses): {{ iwaPhysicalLossPct }}%
โš™๏ธ

{{ pumpConfigTab === 'tariff' ? 'Pengaturan Tarif Listrik PLN' : (editingPumpId ? 'Edit Konfigurasi Pompa' : 'Tambah Unit Pompa Baru') }}

Konfigurasi Parameter Sensor Daya, Debit, Jam Operasi & Tarif Operasional

๐Ÿ“Š Mode Sumber Data Daya & Debit:
{{ pumpForm.operatingHours }} Jam
Nilai standar efisiensi optimal pompa (biasanya 0.32 - 0.42 kWh/mยณ)
โšก Penetapan Tarif Tenaga Listrik PLN:
Rp / kWh
Standar resmi PLN Golongan I-3/TM saat ini: Rp 1.444,70 / kWh
๐Ÿ’ก Simulasi Estimasi Biaya Pompa Total:
Total Konsumsi Energi Sistem: {{ totalEnergyDailyKwh.toLocaleString('id-ID', { maximumFractionDigits: 1 }) }} kWh / hari
Total Estimasi Tagihan Listrik: Rp {{ totalEnergyDailyCost.toLocaleString('id-ID') }} / hari
Perubahan tarif ini akan langsung diaplikasikan ke seluruh lembar audit energi dan cetakan laporan resmi PDAM.
๐Ÿ“˜

Buku Panduan Operasional & Standar SCADA PDAM

Pedoman Teknis Neraca Air, Baku Mutu Permenkes & Audit Energi Pompa

๐Ÿ’ง 1. Rumus Tingkat Kehilangan Air (NRW / Non-Revenue Water)
NRW (%) = ((Total Inflow - Total Outflow) / Total Inflow) ร— 100%

Digunakan untuk menghitung persentase air bersih yang hilang dalam sistem pipa transmisi dan distribusi akibat kebocoran fisik (pipa pecah) atau kebocoran non-fisik (meteran rusak, pencurian air).

๐ŸŸข < 20%: Target Nasional PUPR (Kategori Baik) ๐ŸŸก 20% - 30%: Perlu Penelusuran Akustik ๐Ÿ”ด > 30%: Kritis (Investigasi Kebocoran Pipa)
โšก 2. Rumus Efisiensi Energi Listrik Pompa (SEC - Specific Energy Consumption)
SEC (kWh/mยณ) = Konsumsi Daya Listrik (kW) / Debit Aliran Pompa (mยณ/h)

Menunjukkan efisiensi mekanik dan elektrik pompa. Nilai SEC yang semakin kecil menandakan pompa sangat hemat daya dalam memproduksi setiap kubik air.

Biaya Listrik Pompa per mยณ: Biaya (Rp/mยณ) = SEC ร— Tarif PLN (Rp 1.444,70)
๐ŸŒ™ 3. Minimum Night Flow (MNF)

Pengukuran debit aliran saat jam malam (02:00 - 04:00) ketika konsumsi domestik warga minim. Aliran konstan yang terukur di jam ini menjadi indikator dasar kebocoran fisik bawah tanah (*background leakage*).

๐Ÿ“‹ Alur Kerja 4 Langkah Pembuatan Laporan Shift SCADA

1
Pilih Periode Laporan: Pilih dropdown periode di kanan atas (misal: *Hari Ini 24 Jam*, *Shift 1: 07:00-15:00*, atau *Kemarin H-1*).
2
Audit Neraca Air & Alarm Kritis: Periksa tab *Neraca Air & NRW* dan *Kualitas Air*. Pastikan tidak ada zona DMA dengan status Merah (Kritis).
3
Buat Narasi Rekomendasi (Otomatis / Manual): Gunakan tombol โœจ Generate Narasi Otomatis untuk mengisi catatan resmi dalam 1 detik.
4
Cetak Dokumen PDF Resmi / Export Excel: Klik tombol ๐Ÿ–จ๏ธ Cetak PDF Resmi PDAM untuk mencetak dokumen format A4 rapi lengkap dengan Kop Surat dan lembar tanda tangan 3 pejabat.

๐Ÿ“œ Standar Kualitas Air Minum Wajib (Permenkes No. 2 Tahun 2023)

๐Ÿงช Derajat Keasaman (pH)
6.5 - 8.5 pH

Nilai pH netral mencegah korosi pipa besi dan iritasi kesehatan.

๐Ÿ’ง Kekeruhan (Turbidity)
< 3.0 NTU (Maks 5 NTU)

Tingkat kejernihan air setelah melalui proses sedimentasi & filtrasi pasir.

๐Ÿ›ก๏ธ Sisa Klorin Bebas
0.2 - 0.5 mg/L

Dosis kaporit/klorin residu untuk membunuh bakteri Coliform di sepanjang pipa distribusi.

๐Ÿง‚ Zat Terlarut (TDS)
< 300 PPM

Total padatan mineral terlarut untuk rasa air yang segar dan sehat.

๐Ÿ› ๏ธ Panduan Desain Laporan Mandiri (*Custom Studio*)

Modul Custom Studio memungkinkan Anda menyusun lembar laporan cetak resmi A4 sendiri tanpa perlu merubah kode sistem.

  • Identitas Laporan: Berikan nama dokumen dan sub-divisi sesuai peruntukan audit.
  • Blok Metrik KPI: Pilih sensor telemetri yang ingin dimunculkan sebagai kartu nilai ringkasan.
  • Grafik Tren: Pilih tag sensor debit/tekanan untuk menampilkan fluktuasi kurva harian.
  • Simpan Template: Klik tombol *Simpan Template* untuk menyimpan tata letak Anda ke database server secara permanen.
R2F-IOT SCADA System ยท Technical Documentation
๐Ÿ‘ฅ

USER MANAGEMENT & ROLE-BASED ACCESS CONTROL (RBAC)

Kelola akun operator, hak akses unit multi-dashboard, dan pantau security audit trail.

TOTAL AKUN

{{ usersList.length }} Pengguna

๐Ÿ‘ฅ

OPERATOR LAPANGAN

{{ usersList.filter(u => u.role === 'operator').length }} Operator

๐ŸŽ›๏ธ

VIEWER / DIREKSI

{{ usersList.filter(u => u.role === 'viewer').length }} Viewer

๐Ÿ“Š

SUPER ADMIN

{{ usersList.filter(u => u.role === 'admin').length }} Lead Eng.

๐Ÿ‘‘
๐Ÿ’พ

DISASTER RECOVERY & 1-CLICK SYSTEM BACKUP

Cadangkan seluruh data Multi-Dashboard, Layout Kanvas HMI, Binding Topik, Rule Alarm, dan Akun User dalam format JSON portabel.

๐Ÿ“„ DAFTAR PENGGUNA TERDAFTAR

PENGGUNA USERNAME ROLE / PERAN UNIT DASHBOARD DIIZINKAN STATUS AKUN LOGIN TERAKHIR AKSI
{{ u.username.slice(0, 2).toUpperCase() }}
{{ u.full_name || u.username }}
ID #{{ u.id }}
{{ u.username }} {{ getUserRoleName(u.role) }} {{ getAssignedDashboardsLabel(u.assigned_dashboards) }} {{ u.last_login ? new Date(u.last_login).toLocaleString('id-ID') : 'Belum pernah' }}

๐Ÿ“œ SECURITY & OPERATIONAL AUDIT TRAIL (JEJAK AKTIVITAS SISTEM)

100 Aksi Terakhir
Waktu Pengguna Role Aksi (Event) Detail Aktivitas IP Address
{{ new Date(log.created_at || log.timestamp).toLocaleString('id-ID') }} {{ log.username }} {{ log.role }} {{ log.action }} {{ log.details }} {{ log.ip_address || '127.0.0.1' }}

๐Ÿ‘ฅ {{ editingUserId ? 'Edit Akun Pengguna' : 'Tambah Pengguna Baru' }}

๐Ÿ”‘ Reset Password

Masukkan password baru untuk pengguna {{ resetPasswordUser?.username }}:

โš™๏ธ

System Configuration, Storage Engine & Security

Admin Level Access

Engine Database SCADA | Kebijakan Retensi Data | Multi-Channel Alert (Telegram & WhatsApp) | Audit Trail Operasional

๐Ÿ—„๏ธ

Engine Penyimpanan Database

Storage mode, sampling interval, & batch write.

{{ settingsForm.DB_DEADBAND_PERCENT || '0.5' }}%

Abaikan fluktuasi noise sensor di bawah nilai % deadband untuk efisiensi penyimpanan.

๐Ÿงน

Retensi & Pembersihan Data

Data lifecycle, vacuum memory, & purger.

Database Storage Usage 48.2 MB / 256 GB (Healthy)
๐Ÿค–

Telegram & WhatsApp Alert Gateway

Notifikasi insiden kritis & PDF harian.

๐Ÿ’ฌ WhatsApp Gateway (Opsional)

๐Ÿ–ฅ๏ธ Infrastructure & Environment Runtime (Server SCADA Info)

Live Configuration Snapshot
Database Host {{ settingsForm.ENV_DB_HOST || 'localhost' }}
Database Name {{ settingsForm.ENV_DB_NAME || 'scada_db' }}
InfluxDB Bucket {{ settingsForm.ENV_INFLUX_BUCKET || 'sensor_data' }}
MQTT Client ID {{ settingsForm.ENV_MQTT_CLIENT_ID || 'r2f-iot-core' }}
HTTP API Port {{ settingsForm.ENV_PORT || '4000' }}

๐Ÿ“œ Security & Operator Activity Audit Trail (Jejak Aktivitas Sistem)

Catatan otentikasi login, perubahan layout, telecontrol sakelar, dan modifikasi server.

๐Ÿ”
WAKTU PENGGUNA PERAN (ROLE) AKSI RINCIAN AKTIVITAS IP ADDRESS
{{ new Date(log.created_at || log.timestamp).toLocaleString('id-ID') }} {{ log.username }} {{ log.role }} {{ log.action }} {{ log.details }} {{ log.ip_address || '127.0.0.1' }}
Tidak ada catatan jejak audit yang sesuai filter.
๐Ÿ“œ

SCADA Event Intelligence & Audit Logs

Live Incident Center

Riwayat Alarm Ambang Batas | Downtime & Diskoneksi RTU | Analisis Durasi & Resolusi | Pembaruan: {{ currentTime }}

๐Ÿšจ
TOTAL ALARM EVENTS
{{ alarmHistoryLogs.length }} Tercatat

{{ alarmHistoryLogs.length }} insiden

Ambang Batas Sensor {{ activeAlarms.length }} Sedang Aktif
โšก
DOWNTIME EVENTS
{{ downtimeLogs.length }} Rekam

{{ downtimeLogs.length }} kejadian

Diskoneksi Gateway RTU {{ downtimeLogs.filter(d => !d.ended_at).length }} Sedang Terputus
๐Ÿ›ก๏ธ
SYSTEM AVAILABILITY
SLA Target >99%

99.82 %

Uptime Jaringan SCADA ๐ŸŸข Sangat Baik
โฑ๏ธ
AVG RECOVERY TIME
MTTR Metric

1.4 menit

Kecepatan Reconnect Otomatis โšก Auto-Heal Aktif
โšก

Device Downtime & Gateway Events

Riwayat terputusnya sinyal telemetry RTU
{{ downtimeLogs.length }} Total
๐Ÿ”
PERANGKAT (GATEWAY) WAKTU TERPUTUS DURASI STATUS
๐Ÿ”Œ
{{ getDeviceNameById(log.device_id) }}
ID #{{ log.device_id }} โ€ข {{ getDeviceProtocolById(log.device_id) }}
{{ new Date(log.started_at).toLocaleTimeString('id-ID') }}
{{ new Date(log.started_at).toLocaleDateString('id-ID') }}
{{ formatLogDuration(log.duration) }} Sedang Terputus โ— ONGOING RESOLVED
Tidak ada catatan kejadian downtime yang sesuai filter.
๐Ÿšจ

Alarm Trigger & Incident History

Riwayat pelanggaran threshold aturan alarm sensor
{{ alarmHistoryLogs.length }} Insiden
๐Ÿ”
WAKTU INSIDEN ATURAN ALARM (RULE) PESAN & NILAI TERBACA STATUS
{{ new Date(alarm.created_at).toLocaleTimeString('id-ID') }}
{{ new Date(alarm.created_at).toLocaleDateString('id-ID') }}
โš ๏ธ {{ alarm.rule?.name || 'Threshold Rule' }}
{{ alarm.message }} โ— AKTIF RESOLVED
Tidak ada riwayat alarm yang sesuai filter.

{{ deviceForm.id ? 'Edit Device' : 'New Device' }}

๐Ÿ—„๏ธ Konfigurasi Database & Autentikasi

{{ topicForm.id ? 'Edit Tag Sensor' : 'Tambah Tag Sensor Baru' }}

Select a device to enable topic discovery and browsing.

๐Ÿ“ RENTANG SKALA SENSOR (MIN & MAX) Auto-Scale HMI

๐Ÿ’ก Digunakan untuk kalibrasi jarum Gauge 3D, persentase level tangki, dan grafik tren realtime.

๐Ÿ“ Koordinat Geografis GIS (GPS Map)

๐Ÿ’ก Koordinat digunakan untuk memplot sensor/pipa pada modul GIS Distribution Map.

New Alarm Rule

Browse Topics

{{ explorerDevice.host }}:{{ explorerDevice.port }}

Scanning Live Data...

Listening to {{ explorerDevice?.host }}:{{ explorerDevice?.port }}
Topics will appear here dynamically as they arrive.

โ–ถ {{ root.name }} ({{ root.topicCount }} topic{{ root.topicCount > 1 ? 's' : '' }}, {{ root.msgCount }} message{{ root.msgCount > 1 ? 's' : '' }})
{{ child.topic }}
{{ child.value }} {{ child.count }} msg
Listening to live stream - topics appear dynamically.
๐ŸŽ›๏ธ

Multi-Dashboard & Station Manager

Kelola seluruh stasiun pengolahan, unit distribusi, diagram P&ID, dan tata letak HMI di satu tempat.

{{ d.icon || '๐Ÿ’ง' }}

{{ d.name }}

/{{ d.slug }}
โ— SEDANG AKTIF DEFAULT

{{ d.description || 'Tidak ada deskripsi stasiun.' }}

Ukuran Kanvas {{ d.canvas_width || 1400 }} ร— {{ d.canvas_height || 700 }} px
Status Sistem Siap Operasi
๐Ÿ—บ๏ธ

GIS Spatial Distribution & Pipeline Network Map

โ— {{ gisStations.length }} Posko Aktif

Peta Jaringan Pipa PDAM | Telemetri Tekanan & Debit | Zonasi DMA | GPS Live Tracking

๐Ÿ”
{{ st.icon }}

{{ st.name }}

{{ st.lat.toFixed(4) }}, {{ st.lon.toFixed(4) }}
โ— LIVE

{{ st.description }}

{{ k.replace('_', ' ') }}: {{ v }}
Tidak ada stasiun yang cocok dengan filter.
๐Ÿ“‘

Pusat Laporan & Audit SCADA PDAM

Enterprise Suite

Kategori Aktif: {{ reportActiveTab.toUpperCase() }} | Periode: {{ reportPeriodLabel }} | Status: ๐ŸŸข Terverifikasi Realtime

๐Ÿ“ฅ
TOTAL INFLOW (MASUK)
100% Vol

{{ totalSystemInflow.toLocaleString('id-ID', { maximumFractionDigits: 1 }) }} mยณ/h

Produksi & Intake ๐ŸŸข Pasokan Normal
๐Ÿ“ค
TOTAL OUTFLOW (KELUAR)
{{ totalSystemInflow > 0 ? ((totalSystemOutflow / totalSystemInflow) * 100).toFixed(1) : '80.9' }}% Terukur

{{ totalSystemOutflow.toLocaleString('id-ID', { maximumFractionDigits: 1 }) }} mยณ/h

Konsumsi Terdistribusi {{ totalSystemInflow > 0 ? ((totalSystemOutflow / totalSystemInflow) * 100).toFixed(1) : '80.9' }}% Efisiensi
โš ๏ธ
NRW (KEHILANGAN AIR)
Target: <{{ iwaConfig.targetNrw || 20 }}%

{{ totalSystemNrwPct }}% ({{ totalSystemLoss.toLocaleString('id-ID') }} mยณ/h)

Standar Permen PUPR {{ parseFloat(totalSystemNrwPct) <= (iwaConfig.targetNrw || 20) ? '๐ŸŸข Kategori Baik' : '๐Ÿ”ด Perlu Evaluasi' }}
๐ŸŒ™
NIGHT FLOW (MNF)
02:00 - 04:00

{{ totalSystemMnf }} mยณ/h

Deteksi Kebocoran Pipa ๐Ÿ›ก๏ธ Terkendali

๐Ÿ“‹ Matriks Neraca Air Standar Internasional IWA (International Water Association)

Pembagian volume air sistem menurut Permen PUPR: Konsumsi Resmi vs Kehilangan Fisik / Non-Fisik.

Total Volume Input: {{ totalSystemInflow.toLocaleString('id-ID') }} mยณ/h (100%)
Konsumsi Berekening ({{ iwaBilledPct }}%) Konsumsi Tak Berekening ({{ iwaUnbilledPct }}%) Kehilangan Komersial ({{ iwaCommercialLossPct }}%) Kebocoran Fisik Pipa ({{ iwaPhysicalLossPct }}%)
๐Ÿ“

Monitoring Zona Distribusi DMA & Deteksi Kebocoran

{{ dmaZonesList.length }} Zona Terpantau

Monitoring debit inlet, outlet, kehilangan air (loss), dan indikasi pipa bocor.

ZONA DMA i
๐Ÿ“ District Metered Area (DMA) Wilayah zonasi jaringan pipa distribusi yang diisolasi secara hidrolis untuk mengukur debit masuk, keluar, dan mendeteksi titik kebocoran pipa bawah tanah.
DEBIT MASUK (INFLOW) i
๐Ÿ“ฅ Debit Inflow (Q-In) Total volume air bersih yang dialirkan masuk ke gerbang inlet zona DMA dari transmisi utama (satuan: mยณ/h).
DEBIT KELUAR (OUTFLOW) i
๐Ÿ“ค Debit Outflow (Q-Out) Volume air bersih yang terdistribusi dan terhitung ke meteran pelanggan / outlet sub-zona (satuan: mยณ/h).
SELISIH / LOSS i
โš ๏ธ Water Loss (Kehilangan Air) Volume air yang hilang dalam zona: Loss = Inflow - Outflow.
NRW (%) i
๐Ÿงฎ Non-Revenue Water (%) ((Inflow - Outflow) / Inflow) * 100% Target Nasional PUPR: < 20% (Kategori Baik).
STATUS KEBOCORAN i
๐Ÿ›ก๏ธ Kategori Tingkat Bahaya ๐ŸŸข Normal: NRW < 15%
๐ŸŸก Waspada: NRW 15% - 25%
๐Ÿ”ด Kritis (Perlu Tim Akustik): NRW > 25%
CATATAN TEKNIS & REKOMENDASI
{{ dma.sourceMode === 'live' ? '๐ŸŸข' : '๐ŸŒ' }}
{{ dma.name }} โ— LIVE SENSOR MANUAL
{{ dma.pipeLengthKm || 15 }} km Pipa ยท {{ (dma.totalConnections || 4000).toLocaleString('id-ID') }} SR
{{ getDmaInflow(dma).toLocaleString('id-ID') }} mยณ/h
In: {{ getTopicNameById(dma.inflowTopicId) }}
{{ getDmaOutflow(dma).toLocaleString('id-ID') }} mยณ/h
Out: {{ getTopicNameById(dma.outflowTopicId) }}
{{ getDmaLoss(dma).toLocaleString('id-ID') }} mยณ/h {{ getDmaNrw(dma) }}% {{ getDmaStatus(dma).label }}
{{ dma.notes || 'โ€“' }}
DERAJAT KEASAMAN (pH) Baku Mutu: 6.5 - 8.5
{{ findWqParam('pH') ? getWqAvg(findWqParam('pH')).toFixed(2) : '7.24' }} pH
{{ findWqParam('pH') && getWqStatus(findWqParam('pH')).label === 'MEMENUHI' ? '๐ŸŸข Sangat Ideal & Netral' : '๐Ÿ”ด Di Luar Ambang Baku Mutu' }}
KEKERUHAN (TURBIDITY) Baku Mutu: < 5.0 NTU
{{ findWqParam('Turbidity') ? getWqAvg(findWqParam('Turbidity')).toFixed(2) : '0.82' }} NTU
{{ findWqParam('Turbidity') && getWqStatus(findWqParam('Turbidity')).label === 'MEMENUHI' ? '๐ŸŸข Sangat Jernih (Standar Tinggi)' : '๐Ÿ”ด Kekeruhan Melebihi Batas' }}
SISA KLORIN BEBAS Baku Mutu: 0.2 - 0.5 mg/L
{{ findWqParam('Klorin') ? getWqAvg(findWqParam('Klorin')).toFixed(2) : '0.35' }} mg/L
{{ findWqParam('Klorin') && getWqStatus(findWqParam('Klorin')).label === 'MEMENUHI' ? '๐ŸŸข Proteksi Bakteri Optimal' : '๐Ÿ”ด Dosis Klorin Perlu Penyesuaian' }}
ZAT TERLARUT (TDS) Baku Mutu: < 300 PPM
{{ findWqParam('TDS') ? getWqAvg(findWqParam('TDS')).toFixed(0) : '142' }} PPM
{{ findWqParam('TDS') && getWqStatus(findWqParam('TDS')).label === 'MEMENUHI' ? '๐ŸŸข Mineral Sehat Terkontrol' : '๐Ÿ”ด Total Padatan Melampaui Batas' }}
๐Ÿงช

Matriks Uji Mutu Air Fisika-Kimia (Permenkes No. 2 Tahun 2023)

{{ waterQualityList.length }} Parameter

Audit parameter kualitas air minum, titik sampling telemetri, dan kepatuhan standar baku mutu.

โ— {{ wqComplianceRate }}% Layak Minum
PARAMETER UJI i
๐Ÿงช Parameter Fisika-Kimia Parameter mutu kualitas air minum wajib berdasarkan Permenkes RI No. 2 Tahun 2023 (pH, Kekeruhan, Sisa Khlor, TDS).
LOKASI TITIK SAMPLING i
๐Ÿ“ Titik Sensor Online Posisi sensor telemetri air (Intake Air Baku, Outlet Sedimentasi, Reservoir, atau Titik Distribusi Jauh).
HASIL UKUR RATA-RATA i
๐Ÿ“Š Nilai Rata-rata 24 Jam Nilai rata-rata pembacaan sensor berkala selama periode aktif.
MIN - MAX HARIAN
BATAS AMBANG PERMENKES i
๐Ÿ“œ Batas Regulasi Nasional Batas toleransi maksimal/minimal yang diizinkan untuk air layak konsumsi masyarakat.
STATUS KELAYAKAN
{{ wq.icon || '๐Ÿงช' }}
{{ wq.param }} โ— LIVE SENSOR UJI LAB
Tag: {{ getTopicNameById(wq.topicId) }}
{{ wq.location || 'Stasiun Pengolahan' }} {{ Number(getWqAvg(wq)).toFixed(2) }} {{ wq.unit }} {{ Number(getWqMin(wq)).toFixed(2) }} ~ {{ Number(getWqMax(wq)).toFixed(2) }} {{ wq.unit }} {{ wq.thresholdLabel || wq.threshold || 'โ€“' }} {{ getWqStatus(wq).label }}
โšก

Audit Efisiensi Energi & Biaya Listrik Pompa (SEC)

{{ pumpEnergyList.length }} Unit Terpantau

Monitoring konsumsi daya kWh/mยณ air, audit efisiensi hidrolis, dan estimasi biaya operasional PLN real-time.

โšก Tarif PLN: Rp {{ Number(plnTariff).toLocaleString('id-ID', { minimumFractionDigits: 2 }) }} / kWh ๐Ÿ’ฐ Estimasi Biaya: Rp {{ totalEnergyDailyCost.toLocaleString('id-ID') }} / hari
NAMA POMPA / STASIUN
DAYA LISTRIK (kW) i
โšก Daya Aktif Pompa (kW) Beban konsumsi listrik aktual motor pompa yang terukur sensor power meter SCADA: P = โˆš3 ร— V ร— I ร— cos ฯ† / 1000.
DEBIT ALIRAN (mยณ/h) i
๐ŸŒŠ Debit Output Pompa (mยณ/h) Kapasitas pemompaan air bersih yang dialirkan ke pipa transmisi/reservoir per jam.
SEC (kWh / mยณ) i
๐Ÿงฎ Specific Energy Consumption (SEC) SEC = Daya Listrik (kW) / Debit (mยณ/h) Berapa kWh listrik yang dibutuhkan untuk memompa 1 mยณ air.
๐Ÿ† Optimal PDAM: 0.30 - 0.42 kWh/mยณ
BIAYA LISTRIK / mยณ i
๐Ÿ’ฐ Biaya Listrik per mยณ SEC ร— Tarif Listrik PLN (Rp/kWh) Biaya rupiah energi yang dikeluarkan untuk memproduksi setiap 1 mยณ air.
KONSUMSI HARIAN i
๐Ÿ“… Total Energi Harian Akumulasi total konsumsi kilowatt-hour (kWh) pompa selama 24 jam operasional penuh.
BIAYA HARIAN (IDR) i
๐Ÿ’ต Estimasi Tagihan PLN Harian Total Rupiah = Total kWh Harian ร— Rp 1.444,70 (Tarif Golongan I-3/TM).
HEALTH INDEX i
๐Ÿฉบ Indeks Kesehatan Pompa Kombinasi getaran mekanik (*vibration*), suhu bearing, dan deviasi efisiensi hidrolis pompa.
๐ŸŸข >90%: Prima | ๐ŸŸก 80-90%: Perlu Pelumasan | ๐Ÿ”ด <80%: Jadwalkan Overhaul
{{ pump.sourceMode === 'live' ? '๐ŸŸข' : 'โšก' }}
{{ pump.name }} โ— LIVE SENSOR MANUAL
{{ pump.station || 'Stasiun Pompa' }} ยท {{ pump.operatingHours || 24 }} Jam/Hari
{{ getPumpKw(pump).toFixed(1) }} kW
Tag: {{ getTopicNameById(pump.powerTopicId) }}
{{ getPumpFlow(pump).toFixed(1) }} mยณ/h
Tag: {{ getTopicNameById(pump.flowTopicId) }}
{{ getPumpSec(pump) }} kWh/mยณ Rp {{ getPumpCostPerM3(pump) }} / mยณ {{ getPumpDailyKwh(pump) }} kWh Rp {{ getPumpDailyCost(pump).toLocaleString('id-ID') }} {{ getPumpHealth(pump).label }}

๐Ÿšจ Rekapitulasi Kejadian Alarm, Trip & Downtime Pompa (24 Jam Terakhir)

Total 3 Kejadian Teratasi
WAKTU KEJADIAN LOKASI / STASIUN TINGKAT (SEVERITY) PESAN ALARM & DESKRIPSI DURASI DOWNTIME STATUS RESOLUSI
{{ alm.time }} {{ alm.location }} {{ alm.severity }} {{ alm.message }} {{ alm.duration }} {{ alm.status }}
๐Ÿ› ๏ธ

Studio Desain Laporan Mandiri

WYSIWYG Designer

Susun tata letak, pilih sensor, dan simpan template dokumen resmi Anda sendiri.

๐Ÿ“ 1. Identitas Laporan
๐Ÿงฉ 2. Susunan Blok Komponen
Pilih Tag Sensor untuk KPI:
Pilih Tag Sensor untuk Grafik:
Model:
Pilih Kolom Tag Sensor:
Logo {{ reportHeader.logoIcon || '๐Ÿ’ง' }}

{{ reportHeader.companyName }}

{{ reportHeader.division }}

{{ reportHeader.address }}

{{ curTemplate.docTitle || 'LAPORAN SCADA' }}
No: DOC/SCADA-CUST/{{ new Date().getFullYear() }}/0{{ activeCustomTemplateIndex + 1 }}
Tanggal: {{ new Date().toLocaleDateString('id-ID', { day: 'numeric', month: 'long', year: 'numeric' }) }}

{{ curTemplate.docTitle || 'LAPORAN OPERASIONAL & EVALUASI TEKNIS' }}

{{ curTemplate.subtitle || 'Unit Pelaksana Teknis SCADA & Otomasi Telemetri' }} | Periode: {{ reportPeriodLabel }}

{{ getTopicNameById(tId) }}
{{ formatTopicVal(realtimeData[tId]) }} {{ getTopicUnitById(tId) }}
โ— Status Aktif
๐Ÿ“ˆ GRAFIK FLUKTUASI: {{ getTopicNameById(curTemplate.chartTopicId) }} Satuan: {{ getTopicUnitById(curTemplate.chartTopicId) }}
00:0006:0012:0018:0023:00
JAM LOG {{ getTopicNameById(tId) }} ({{ getTopicUnitById(tId) }}) STATUS
{{ h }} {{ formatTopicVal(realtimeData[tId]) }} NORMAL
๐Ÿ“ Catatan & Rekomendasi Teknis:

{{ curTemplate.notesContent || 'Semua parameter terpantau stabil dalam batas kendali operasional.' }}

{{ reportSignatures.col1.role || 'Dibuat Oleh,' }}

{{ reportSignatures.col1.title }}

{{ reportSignatures.col1.name }}

{{ reportSignatures.col1.nip }}

{{ reportSignatures.col2.role || 'Diperiksa Oleh,' }}

{{ reportSignatures.col2.title }}

{{ reportSignatures.col2.name }}

{{ reportSignatures.col2.nip }}

{{ reportSignatures.col3.role || 'Disetujui Oleh,' }}

{{ reportSignatures.col3.title }}

{{ reportSignatures.col3.name }}

{{ reportSignatures.col3.nip }}

๐Ÿ“

Catatan Lapangan, Kejadian Khusus & Rekomendasi Supervisor

๐Ÿ’ก Catatan ini akan otomatis masuk ke lembar cetak dokumen resmi PDF/Print out PDAM.

{{ reportSignatures.col1.role || 'Dibuat Oleh,' }}

{{ reportSignatures.col1.title }}

{{ reportSignatures.col1.name }}

{{ reportSignatures.col1.nip }}

{{ reportSignatures.col2.role || 'Diperiksa Oleh,' }}

{{ reportSignatures.col2.title }}

{{ reportSignatures.col2.name }}

{{ reportSignatures.col2.nip }}

{{ reportSignatures.col3.role || 'Disetujui Oleh,' }}

{{ reportSignatures.col3.title }}

{{ reportSignatures.col3.name }}

{{ reportSignatures.col3.nip }}

โš™๏ธ

Pengaturan Kop Surat, Logo & Tanda Tangan Resmi

Logo Preview {{ reportHeader.logoIcon || '๐Ÿ’ง' }}

File logo disimpan permanen di server backend & database PostgreSQL.

๐Ÿ‘๏ธ Preview Kop Cetak Resmi (Dokumen A4):
Logo Preview {{ reportHeader.logoIcon || '๐Ÿ’ง' }}
{{ reportHeader.companyName || 'NAMA INSTANSI' }}
{{ reportHeader.division }}
{{ reportHeader.address }}
โœ๏ธ Tampilkan Lembar Tanda Tangan Resmi
Aktifkan untuk memunculkan kolom pengesahan 3 pejabat di bawah laporan.
1. Pihak Pembuat (Kiri)
2. Pihak Pemeriksa (Tengah)
3. Pihak Penyetujui (Kanan)
๐Ÿ‘๏ธ Preview Lembar Tanda Tangan Cetak:

{{ reportSignatures.col1.role }}

{{ reportSignatures.col1.title }}

{{ reportSignatures.col1.name }}

{{ reportSignatures.col1.nip }}

{{ reportSignatures.col2.role }}

{{ reportSignatures.col2.title }}

{{ reportSignatures.col2.name }}

{{ reportSignatures.col2.nip }}

{{ reportSignatures.col3.role }}

{{ reportSignatures.col3.title }}

{{ reportSignatures.col3.name }}

{{ reportSignatures.col3.nip }}

๐Ÿ’พ Tersimpan di Database PostgreSQL