← Beranda Persyaratan Sistem Instalasi Windows Instalasi Linux Konfigurasi Aktivasi Lisensi Akun Default 📷 Kamera / Webcam (ffmpeg) 🔌 Perangkat & Protokol 🔔 Notifikasi Email/Telegram 🔒 Akses Dashboard per User 🌏 Dwibahasa EN/ID 🗂️ Dashboard Overlay 🔷 Shape Widgets 📦 MessagePack (MQTT) 🌐 SNMP Client 📡 SNMP Agent 🛡️ Maintenance & Backup Troubleshooting
📋

Persyaratan Sistem

Platform OS ArsitekturArchitecture RAM Min. Node.js
Windows EXE Windows 10 / 11 x86-64 1 GB Tidak perluNot needed (bundled)
Linux x64 Ubuntu 20.04+, Debian 11+ x86-64 512 MB Tidak perluNot needed (bundled)
Raspberry Pi 4/5 Raspberry Pi OS 64-bit ARM64 1 GB Tidak perluNot needed (bundled)
Raspberry Pi 2/3 Raspberry Pi OS 32-bit ARMv7 512 MB Tidak perluNot needed (bundled)
💡

AliScada sudah menyertakan runtime Node.js di dalam paket distribusi. Tidak perlu menginstal Node.js secara terpisah di mesin target.

AliScada already includes the Node.js runtime inside the distribution package. No need to install Node.js separately on the target machine.

Browser yang Didukung

AliScada diakses dari browser — tidak ada instalasi client. Semua browser modern didukung.

AliScada is accessed from a browser — no client installation. All modern browsers are supported.

Browser Versi MinimumMinimum Version CatatanNotes
Google Chrome 90+ DirekomendasikanRecommended
Microsoft Edge 90+ DirekomendasikanRecommended
Firefox 88+ Didukung penuhFully supported
Safari 14+ Didukung penuhFully supported

🪟

Instalasi Windows

🪟 Windows 10 / 11 x86-64

AliScada untuk Windows dikemas sebagai EXE mandiri. Cukup ekstrak ZIP dan klik start.bat — tidak perlu instalasi Node.js atau dependensi lain.

AliScada for Windows is packaged as a standalone EXE. Simply extract the ZIP and click start.bat — no Node.js installation or other dependencies needed.

Download & Ekstrak

  1. Download file AliScada_vX.X_win_x64.zip dari halaman Harga atau link yang diberikan vendor.

    Download AliScada_vX.X_win_x64.zip from the Pricing page or the link provided by the vendor.

  2. Ekstrak ZIP ke folder pilihan Anda — misalnya C:\AliScada\.
    Hindari folder dengan spasi dalam path (mis. "Program Files").

    Extract the ZIP to a folder of your choice — e.g. C:\AliScada\.
    Avoid folders with spaces in the path (e.g. "Program Files").

  3. Struktur folder setelah diekstrak:

    Folder structure after extraction:

AliScada_v1.x_win_x64\
├── AliScada.exe ← Executable utama (jangan hapus)← Main executable (do not delete)
├── sql-wasm.wasm ← SQLite engine (jangan hapus)← SQLite engine (do not delete)
├── public\ ← Frontend web (jangan hapus)← Web frontend (do not delete)
├── config.json ← Konfigurasi port, JWT secret← Port & JWT secret configuration
├── .env ← Mode environment← Environment mode
├── data\ ← Database SQLite (dibuat otomatis)← SQLite database (auto-created)
├── logs\ ← File log (dibuat otomatis)← Log files (auto-created)
├── start.bat ← Klik untuk menjalankan← Click to start
└── stop.bat ← Klik untuk menghentikan← Click to stop

Menjalankan

  1. Double-click start.bat. Jendela command prompt akan terbuka dan menampilkan log server.

    Double-click start.bat. A command prompt window will open and display the server log.

  2. Tunggu 5–10 detik hingga muncul pesan AliScada ready. Browser terbuka otomatis ke http://localhost:3000.

    Wait 5–10 seconds until the AliScada ready message appears. The browser opens automatically to http://localhost:3000.

  3. Login menggunakan akun admin (lihat Akun Default).

    Log in using the admin account (see Default Accounts).

  4. Untuk menghentikan: double-click stop.bat atau tutup jendela CMD AliScada.

    To stop: double-click stop.bat or close the AliScada CMD window.

⚠️

Jangan tutup jendela CMD AliScada saat aplikasi sedang digunakan — menutup jendela akan menghentikan server seketika.

Do not close the AliScada CMD window while the app is in use — closing the window will immediately stop the server.

🔒

Windows SmartScreen: Jika muncul peringatan "Windows protected your PC", klik More info → Run anyway. File EXE belum memiliki code-signing certificate.

Windows SmartScreen: If a "Windows protected your PC" warning appears, click More info → Run anyway. The EXE does not yet have a code-signing certificate.

Akses dari PC Lain (Jaringan)

  1. Di PC server, buka CMD → ketik ipconfig → catat IPv4 Address (contoh: 192.168.1.50).

    On the server PC, open CMD → type ipconfig → note the IPv4 Address (e.g. 192.168.1.50).

  2. Dari PC lain di jaringan yang sama, buka browser → akses http://192.168.1.50:3000

    From another PC on the same network, open a browser → access http://192.168.1.50:3000

  3. Jika tidak bisa terhubung, izinkan port di firewall Windows:
    Windows Defender Firewall → Advanced Settings → Inbound Rules → New Rule → Port → TCP → 3000 → Allow

    If you cannot connect, allow the port in Windows Firewall:
    Windows Defender Firewall → Advanced Settings → Inbound Rules → New Rule → Port → TCP → 3000 → Allow

Update ke Versi Baru

  1. Jalankan stop.bat untuk menghentikan server.

    Run stop.bat to stop the server.

  2. Backup folder data\ — berisi semua database dan history Anda.

    Back up the data\ folder — it contains all your databases and history.

  3. Salin semua file versi baru ke folder instalasi, kecuali folder data\.

    Copy all new version files to the installation folder, except the data\ folder.

  4. Jalankan start.bat. Migrasi skema database berjalan otomatis.

    Run start.bat. Database schema migration runs automatically.


🐧

Instalasi Linux

🐧 Linux x64 🍓 Raspberry Pi ARM64 🍓 Raspberry Pi ARMv7

Pilih file distribusi sesuai arsitektur perangkat Anda:

Choose the distribution file matching your device architecture:

File Platform PerangkatDevice
AliScada_vX.X_linux_x64.tar.gz Linux x86-64 PC / Server Ubuntu / Debian
AliScada_vX.X_linux_arm64.tar.gz Linux ARM64 Raspberry Pi 4 / 5 (OS 64-bit)
AliScada_vX.X_linux_armv7.tar.gz Linux ARMv7 Raspberry Pi 2 / 3 (OS 32-bit)
ℹ️

Tidak yakin arsitektur Pi Anda? Jalankan uname -m di terminal — aarch64 = ARM64  ·  armv7l = ARMv7

Not sure of your Pi's architecture? Run uname -m in the terminal — aarch64 = ARM64  ·  armv7l = ARMv7

Cara 1 — Manual (Quick Start)

Cocok untuk uji coba cepat. Server berjalan selama sesi terminal aktif.

Suitable for quick testing. The server runs as long as the terminal session is active.

Linux x64 — Ubuntu / Debian / PC Server

Terminal
# 1. Copy file ke server (dari Windows, via SCP)
scp AliScada_vX.X_linux_x64.tar.gz user@ip-server:/tmp/

# 2. Di server Linux — ekstrak dan set permission
sudo mkdir -p /opt/aliscada
sudo tar -xzf /tmp/AliScada_vX.X_linux_x64.tar.gz \
     -C /opt/aliscada --strip-components=1
sudo chmod +x /opt/aliscada/AliScada \
              /opt/aliscada/start.sh \
              /opt/aliscada/stop.sh

# 3. Jalankan
/opt/aliscada/start.sh

# Buka browser: http://ip-server:3000

Raspberry Pi 4 / 5 — ARM64 (OS 64-bit)

Terminal (SSH)
# 1. Copy file ke Raspberry Pi
scp AliScada_vX.X_linux_arm64.tar.gz pi@ip-raspberry:/tmp/

# 2. Ekstrak dan set permission
sudo mkdir -p /opt/aliscada
sudo tar -xzf /tmp/AliScada_vX.X_linux_arm64.tar.gz \
     -C /opt/aliscada --strip-components=1
sudo chmod +x /opt/aliscada/AliScada \
              /opt/aliscada/start.sh \
              /opt/aliscada/stop.sh

# 3. Jalankan
/opt/aliscada/start.sh

# Buka browser: http://ip-raspberry:3001
ℹ️ ARM64 — Native package (serialport & net-snmp)

Package serialport dan net-snmp sudah di-bundle di dalam folder node_modules/ bersama binary. start.sh otomatis menyetel NODE_PATH — tidak perlu langkah manual tambahan.

The serialport and net-snmp packages are bundled inside the node_modules/ folder alongside the binary. start.sh automatically sets NODE_PATH — no additional manual steps needed.

Syarat OS:OS requirement: Ubuntu 20.04+ / Debian 11+ (GLIBC ≥ 2.31)  ·  Cek:Check: lsb_release -a

Binary lama (sebelum Juni 2026):Old binary (before June 2026): Jalankan sekali di folder instalasi:Run once inside the installation folder:
sudo apt install -y python3 make g++ gcc libudev-dev
npm install serialport@10.5.0 net-snmp@3.26.3

Raspberry Pi 2 / 3 — ARMv7 (OS 32-bit)

⚠️

Untuk ARMv7, wajib gunakan file .tar.gz — bukan folder langsung. Windows tidak dapat menyalin symlink yang diperlukan dengan benar.

For ARMv7, always use the .tar.gz file — not the folder directly. Windows cannot correctly copy the required symlinks.

Terminal (SSH)
scp AliScada_vX.X_linux_armv7.tar.gz pi@ip-raspberry:/tmp/

sudo mkdir -p /opt/aliscada
sudo tar -xzf /tmp/AliScada_vX.X_linux_armv7.tar.gz \
     -C /opt/aliscada --strip-components=1
sudo chmod +x /opt/aliscada/AliScada \
              /opt/aliscada/start.sh \
              /opt/aliscada/stop.sh

/opt/aliscada/start.sh
ℹ️

Jika ada error Cannot find module saat pertama kali dijalankan — package Node.js perlu diinstal ulang secara manual. Jalankan perintah berikut di dalam folder instalasi:

If you get a Cannot find module error on first run — Node.js packages need to be manually reinstalled. Run the following commands inside the installation folder:

cd /opt/aliscada
npm install \
  aedes@0.50.1 bcryptjs@2.4.3 cors@2.8.5 dotenv@16.4.5 \
  express@4.18.3 jsonwebtoken@9.0.2 modbus-serial@8.0.18 \
  mqtt@5.15.1 mysql2@3.22.3 net-snmp@3.26.3 \
  node-bacnet@0.2.4 node-opcua-client@2.169.0 node-opcua-server@2.169.0 \
  nodemailer@6.9.0 nodemon@3.1.0 pg@8.20.0 \
  serialport@10.5.0 socket.io@4.7.5 sql.js@1.12.0 winston@3.13.0

Package yang gagal dikompilasi (node-opcua, serialport, node-bacnet, aedes, net-snmp) akan dinonaktifkan otomatis — pesan warn: xxx not available di log adalah normal.

Packages that fail to compile (node-opcua, serialport, node-bacnet, aedes, net-snmp) will be disabled automatically — the warn: xxx not available message in the log is normal.

Stop & Lihat LogStop & View Log

/opt/aliscada/stop.sh             # Hentikan server
tail -f /opt/aliscada/aliscada.log  # Log real-time

Cara 2 — Systemd (Instalasi Produksi)

Gunakan cara ini agar AliScada otomatis berjalan saat perangkat dinyalakan dan restart sendiri jika crash. Berlaku untuk semua arsitektur (x64, arm64, armv7).

Use this method so AliScada starts automatically when the device is powered on and restarts itself if it crashes. Applies to all architectures (x64, arm64, armv7).

Lakukan dulu langkah ekstrak dan chmod dari Cara 1, kemudian lanjutkan di bawah.

First complete the extract and chmod steps from Method 1, then continue below.

Terminal
# 1. Install systemd service
sudo cp /opt/aliscada/aliscada.service /etc/systemd/system/
sudo systemctl daemon-reload

# 2. Aktifkan auto-start saat boot
sudo systemctl enable aliscada

# 3. Jalankan sekarang
sudo systemctl start aliscada

# 4. Verifikasi status
sudo systemctl status aliscada
ℹ️

File aliscada.service sudah dikonfigurasi untuk path /opt/aliscada. Jika instalasi di lokasi lain, edit terlebih dahulu:
sudo nano /opt/aliscada/aliscada.service
Ubah baris WorkingDirectory= dan ExecStart=, lalu jalankan sudo systemctl daemon-reload.

The aliscada.service file is pre-configured for the /opt/aliscada path. If installed elsewhere, edit it first:
sudo nano /opt/aliscada/aliscada.service
Change the WorkingDirectory= and ExecStart= lines, then run sudo systemctl daemon-reload.

Perintah Systemd Sehari-hari

sudo systemctl start   aliscada    # Jalankan
sudo systemctl stop    aliscada    # Hentikan
sudo systemctl restart aliscada    # Restart
sudo systemctl status  aliscada    # Cek status
sudo systemctl enable  aliscada    # Auto-start saat boot
sudo systemctl disable aliscada    # Nonaktifkan auto-start

# Log live
sudo journalctl -u aliscada -f

# 100 baris log terakhir
sudo journalctl -u aliscada -n 100 --no-pager

🔨

Membangun Distribusi (Build from Source)

Bagian ini khusus untuk developer yang ingin membangun paket distribusi dari source code. Pengguna akhir cukup menggunakan EXE atau binary Linux yang sudah dikompilasi.

This section is for developers who want to build the distribution package from source code. End users should just use the pre-compiled EXE or Linux binary.

build-exe.bat — Windows Standalone EXE

PersyaratanRequirements: Node.js v18+ terinstal di mesin buildinstalled on the build machine.

  1. Double-click build-exe.bat — jendela CMD baru terbuka otomatis.

    Double-click build-exe.bat — a new CMD window opens automatically.

  2. Script menjalankan langkah-langkah berikut secara otomatis:

    The script runs the following steps automatically:

    LangkahStepProsesProcess
    [1]Install @yao-pkg/pkg secara lokal (~50 MB, hanya pertama kali)Install @yao-pkg/pkg locally (~50 MB, first time only)
    [2]Build frontend dengan Vite (npm run build)Build frontend with Vite (npm run build)
    [3]Install backend production packages (npm install --omit=dev)Install backend production packages (npm install --omit=dev)
    [4]Copy frontend build ke backend/public/Copy frontend build to backend/public/
    [5]Kompilasi AliScada.exe dengan pkg — target node18-win-x64, compressed Brotli
    Pertama kali: download Node 18 binary (~30 MB, ~2–5 menit)
    Compile AliScada.exe with pkg — target node18-win-x64, Brotli compressed
    First time: downloads Node 18 binary (~30 MB, ~2–5 min)
    [6]Copy runtime files: sql-wasm.wasm, public\, bindings\ (native .node modules), data\Copy runtime files: sql-wasm.wasm, public\, bindings\ (native .node modules), data\
    [7]Generate config.json dan .envGenerate config.json and .env
    [8]Generate start.bat dan stop.batGenerate start.bat and stop.bat
  3. Output tersimpan di dist\AliScada_v1.4_exe\:

    Output saved to dist\AliScada_v1.4_exe\:

    AliScada_v1.4_exe\
    ├── AliScada.exe        ← single executable
    ├── sql-wasm.wasm       ← SQLite WASM engine (wajib ada)
    ├── public\             ← frontend static files (wajib ada)
    ├── bindings\           ← native .node modules (serialport, dll.)
    ├── config.json         ← konfigurasi yang bisa diedit
    ├── .env
    ├── data\               ← kosong; DB dibuat saat pertama run
    ├── start.bat
    └── stop.bat
ℹ️

Saat mendistribusikan versi baru ke pengguna yang sudah ada, copy semua file kecuali folder data\ — folder data berisi database pengguna yang tidak boleh ditimpa.

When distributing a new version to existing users, copy all files except the data\ folder — the data folder contains the user's database which must not be overwritten.

build-linux-docker.bat — Linux Binary (x64 / arm64 / armv7)

PersyaratanRequirements: Docker Desktop for Windows dengan WSL2 backend aktifwith WSL2 backend enabled.

  1. Double-click build-linux-docker.bat.

  2. Pilih arsitektur target dari menu:

    Choose the target architecture from the menu:

    PilihanOptionArsitekturArchitectureTargetNode.js
    1x64Ubuntu / Debian / PC (x86-64)18
    2arm64Raspberry Pi 4 / 5 (OS 64-bit)18
    3armv7Raspberry Pi 3 / 2 (OS 32-bit)16
    4ALLBuild ketiga arsitektur sekaligusBuild all three architectures at once
  3. Build berjalan di dalam Docker container (node:18-bullseye):

    • arm64 dan armv7 menggunakan native amd64 container + cross-compile — tidak memerlukan QEMU.
    • node_modules di-cache di Docker named volumes → build berikutnya ~2–3 menit.

    Build runs inside a Docker container (node:18-bullseye):

    • arm64 and armv7 use native amd64 container + cross-compile — no QEMU required.
    • node_modules cached in Docker named volumes → subsequent builds ~2–3 minutes.
  4. Output tersimpan di dist\:

    Output saved to dist\:

    dist\AliScada_v1.4_linux_x64\          ← folder
    dist\AliScada_v1.4_linux_x64.tar.gz    ← paket terkompresi untuk deploy
    dist\AliScada_v1.4_linux_arm64\
    dist\AliScada_v1.4_linux_arm64.tar.gz
    dist\AliScada_v1.4_linux_armv7\
    dist\AliScada_v1.4_linux_armv7.tar.gz

Deploy ke Linux / Raspberry Pi

# 1. Copy tar.gz ke device
scp dist\AliScada_v1.4_linux_arm64.tar.gz user@192.168.1.50:/tmp/

# 2. Extract ke /opt/aliscada
sudo mkdir -p /opt/aliscada
sudo tar -xzf /tmp/AliScada_v1.4_linux_arm64.tar.gz -C /opt/aliscada --strip-components=1
sudo chmod +x /opt/aliscada/AliScada /opt/aliscada/start.sh /opt/aliscada/stop.sh

# 3. Jalankan manual
/opt/aliscada/start.sh

# 4. Install sebagai systemd service (auto-start)
sudo cp /opt/aliscada/aliscada.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable aliscada
sudo systemctl start aliscada
⚠️

armv7 (32-bit): Selalu gunakan file .tar.gz untuk deploy — Windows tidak bisa menyalin symlink dari node_modules\.bin secara langsung. File tar.gz mempertahankan symlink dengan benar.

armv7 (32-bit): Always use the .tar.gz file for deploy — Windows cannot correctly copy symlinks from node_modules\.bin directly. The tar.gz file preserves symlinks correctly.

💡

Hapus cache Docker (hemat disk, paksa rebuild bersih):
docker volume rm aliscada_nm_backend_arm64 aliscada_nm_frontend aliscada_nm_root

Remove Docker cache (saves disk, forces clean rebuild):
docker volume rm aliscada_nm_backend_arm64 aliscada_nm_frontend aliscada_nm_root


📷

Kamera & Webcam — Setup ffmpeg

Tag RTSP menggunakan ffmpeg untuk dua skenario: (1) USB Webcam yang terhubung langsung ke server AliScada, dan (2) IP Camera RTSP — di-proxy otomatis ke JPEG snapshot jika tidak ada Snapshot URL HTTP yang dikonfigurasi.

RTSP tags use ffmpeg for two scenarios: (1) USB Webcam connected directly to the AliScada server, and (2) IP Camera RTSP — automatically proxied to JPEG snapshot if no HTTP Snapshot URL is configured.

ℹ️

IP Camera RTSP (tanpa Snapshot URL): AliScada otomatis menjalankan ffmpeg sebagai proxy stream RTSP → JPEG. Stream ffmpeg berjalan persisten dan berhenti setelah 60 detik tidak ada request — tidak perlu Snapshot URL HTTP jika ffmpeg tersedia.
IP Camera dengan Snapshot URL HTTP: Tidak memerlukan ffmpeg — AliScada langsung mem-fetch URL tersebut.
USB Webcam: Selalu memerlukan ffmpeg.

IP Camera RTSP (no Snapshot URL): AliScada automatically runs ffmpeg as an RTSP → JPEG stream proxy. The ffmpeg stream runs persistently and stops after 60 seconds of no requests — no HTTP Snapshot URL needed if ffmpeg is available.
IP Camera with HTTP Snapshot URL: Does not need ffmpeg — AliScada directly fetches that URL.
USB Webcam: Always requires ffmpeg.

Windows

🪟 Windows 10 / 11

Cara A — Taruh ffmpeg.exe di folder AliScada (disarankan)Method A — Place ffmpeg.exe in the AliScada folder (recommended)

  1. Download dari ffmpeg.org/download.html → pilih Windows builds → unduh ffmpeg-master-latest-win64-gpl.zip

    Download from ffmpeg.org/download.html → choose Windows builds → download ffmpeg-master-latest-win64-gpl.zip

  2. Ekstrak ZIP → masuk folder bin\ di dalamnya → salin ffmpeg.exe

    Extract the ZIP → go into the bin\ folder inside → copy ffmpeg.exe

  3. Tempel ffmpeg.exe ke folder yang sama dengan AliScada.exe

    Paste ffmpeg.exe into the same folder as AliScada.exe

  4. Restart AliScada — webcam terdeteksi otomatis dalam 30 detik (tidak perlu restart lagi setelah itu)

    Restart AliScada — the webcam is auto-detected within 30 seconds (no restart needed after that)

Path yang diperiksa secara otomatis (urutan prioritas)Automatically checked paths (priority order)

<folder AliScada>\ffmpeg.exe        ← disarankan← recommended
<folder AliScada>\bin\ffmpeg.exe
C:\ffmpeg\bin\ffmpeg.exe
C:\Program Files\ffmpeg\bin\ffmpeg.exe
C:\Program Files (x86)\ffmpeg\bin\ffmpeg.exe
PATH sistem (jika ffmpeg sudah ada di PATH)System PATH (if ffmpeg is already in PATH)

Cara B — Tambahkan ffmpeg ke PATH sistemMethod B — Add ffmpeg to system PATH

  1. Ekstrak ffmpeg ke C:\ffmpeg\

    Extract ffmpeg to C:\ffmpeg\

  2. Tambah C:\ffmpeg\bin ke PATH:
    Control Panel → System → Advanced system settings → Environment Variables → Path → Edit → New → ketik C:\ffmpeg\bin

    Add C:\ffmpeg\bin to PATH:
    Control Panel → System → Advanced system settings → Environment Variables → Path → Edit → New → type C:\ffmpeg\bin

  3. Restart AliScada

    Restart AliScada

VerifikasiVerification

Command Prompt
ffmpeg -version

Linux

🐧 Linux x64 🍓 Raspberry Pi ARM64 🍓 Raspberry Pi ARMv7

Linux Docker Edition

Tambahkan baris ini ke Dockerfile Anda sebelum instruksi COPY atau CMD:

Add this line to your Dockerfile before the COPY or CMD instruction:

Dockerfile
RUN apt-get update && apt-get install -y ffmpeg && rm -rf /var/lib/apt/lists/*

Linux x86-64 — Standalone

Cara A — Package manager (disarankan):Method A — Package manager (recommended):

Terminal
sudo apt install ffmpeg   # Debian / Ubuntu
sudo yum install ffmpeg   # CentOS / RHEL (perlu EPEL repo)

Cara B — Static build (tanpa install, tanpa root):Method B — Static build (no install, no root):

Terminal
# Download dari github.com/BtbN/FFmpeg-Builds/releases
# Pilih: ffmpeg-master-latest-linux64-lgpl.tar.xz (~120 MB)

tar -xf ffmpeg-master-latest-linux64-lgpl.tar.xz
cp ffmpeg-master-latest-linux64-lgpl/bin/ffmpeg /opt/aliscada/
chmod +x /opt/aliscada/ffmpeg

Raspberry Pi 4 / 5 — ARM64 (OS 64-bit)

Cara A — Package manager:Method A — Package manager:

Terminal (SSH)
sudo apt install ffmpeg

Cara B — Static build:Method B — Static build:

Terminal (SSH)
# Download: ffmpeg-master-latest-linuxarm64-lgpl.tar.xz (~107 MB)
tar -xf ffmpeg-master-latest-linuxarm64-lgpl.tar.xz
cp ffmpeg-master-latest-linuxarm64-lgpl/bin/ffmpeg /opt/aliscada/
chmod +x /opt/aliscada/ffmpeg

Raspberry Pi 2 / 3 — ARMv7 (OS 32-bit)

Terminal (SSH)
sudo apt install ffmpeg
ℹ️

Static build dari BtbN tidak tersedia untuk ARMv7 — gunakan package manager saja.

BtbN static build is not available for ARMv7 — use the package manager instead.

Verifikasi (semua Linux)Verification (all Linux)

ffmpeg -version

⚙️

Konfigurasi

Edit file config.json di folder instalasi untuk mengubah pengaturan server.

Edit the config.json file in the installation folder to change server settings.

Windows

Command Prompt
notepad C:\AliScada\config.json

Linux

Terminal
sudo nano /opt/aliscada/config.json

Isi FileFile Contents

config.json
{
  "port":          3000,         // Port HTTP server
  "mqttPort":      1883,         // Port MQTT broker internal
  "jwtSecret":     "ganti-ini", // WAJIB diganti di produksi
  "logLevel":      "info",      // error | warn | info | debug
  "saveLogToFile": false        // true = simpan ke logs/combined.log
}
Key Default KeteranganDescription
port 3000 Port HTTP — akses dari browserHTTP port — browser access
mqttPort 1883 Port MQTT broker internal AliScadaAliScada internal MQTT broker port
jwtSecret Wajib digantiMust be changed di produksi — gunakan string acak panjangin production — use a long random string
logLevel info error / warn / info / debug
saveLogToFile false Simpan log ke logs/combined.logSave log to logs/combined.log
⚠️

Setelah mengedit config.json, restart AliScada agar berlaku.
Windows: stop.batstart.bat  ·  Linux: sudo systemctl restart aliscada

After editing config.json, restart AliScada for changes to take effect.
Windows: stop.batstart.bat  ·  Linux: sudo systemctl restart aliscada


🔑

Aktivasi Lisensi

AliScada berjalan dalam Trial Mode (100 tag, 30 hari, sesi 2 jam) sebelum diaktifkan.

AliScada runs in Trial Mode (100 tags, 30 days, 2-hour sessions) before activation.

  1. Buka browser → akses AliScada → login dengan akun admin.

    Open a browser → access AliScada → log in with the admin account.

  2. Klik tombol Studio (pojok kanan atas halaman) → pilih menu License.

    Click the Studio button (top-right corner) → select the License menu.

  3. Salin Machine ID menggunakan tombol Copy. Machine ID unik untuk setiap perangkat/instalasi.

    Copy the Machine ID using the Copy button. The Machine ID is unique to each device/installation.

  4. Kirim Machine ID ke vendor melalui info@aliscada.com beserta tier lisensi yang diinginkan. Anda akan menerima license key.

    Send the Machine ID to the vendor at info@aliscada.com with the desired license tier. You will receive a license key.

  5. Paste license key di form Activate License → klik Activate.

    Paste the license key in the Activate License form → click Activate.

🔄

Upgrade tier: Buka Studio → License → klik Deactivate license → paste license key baru di field "New License Key" sebelum klik Deactivate. Sistem akan switch secara otomatis dalam satu langkah tanpa downtime.

Upgrade tier: Open Studio → License → click Deactivate license → paste the new license key in the "New License Key" field before clicking Deactivate. The system switches automatically in one step with no downtime.

Perbandingan Tier LisensiLicense Tier Comparison

Tier Max Tag Session Limit Masa BerlakuValidity
Trial 100 tag 2 jam per sesi2 hours per session 30 hari30 days
Starter 500 tag Tidak terbatasUnlimited PermanenPermanent
Standard 1.000 tag Tidak terbatasUnlimited PermanenPermanent
Professional 2.000 tag Tidak terbatasUnlimited PermanenPermanent
Enterprise Unlimited Tidak terbatasUnlimited PermanenPermanent

👤

Akun Default

AliScada membuat empat akun saat pertama kali dijalankan.

AliScada creates four accounts when first started.

Username Password Role Hak AksesAccess Rights
admin admin123 Administrator Akses penuh — konfigurasi, user management, lisensiFull access — configuration, user management, license
supervisor supervisor123 Supervisor Konfigurasi device, tag, dashboard, alarm — tidak bisa kelola userConfigure devices, tags, dashboards, alarms — cannot manage users
operator operator123 Operator Monitor, write nilai tag, acknowledge alarmMonitor, write tag values, acknowledge alarms
viewer viewer123 Viewer Monitor saja (read-only)Monitor only (read-only)
🔐

Ganti password default segera setelah login pertama — terutama akun admin. Buka Studio → Users untuk mengelola akun dan kata sandi.

Change default passwords immediately after first login — especially the admin account. Open Studio → Users to manage accounts and passwords.


🔌

Perangkat & Protokol

AliScada berkomunikasi dengan perangkat lapangan melalui tujuh protokol yang berbeda. Setiap Device dikonfigurasi di Studio → Devices, sedangkan setiap titik data dikonfigurasi sebagai Tag di Studio → Tags.

AliScada communicates with field devices through seven different protocols. Each Device is configured in Studio → Devices, while each data point is configured as a Tag in Studio → Tags.

Ringkasan Protokol yang Didukung

ProtokolProtocol Nilai DeviceDevice Type ArahDirection KeteranganDescription
Modbus TCP modbus_tcp Baca / TulisRead / Write PLC, inverter, meter via Ethernet/LAN. Port default 502.PLCs, inverters, meters via Ethernet/LAN. Default port 502.
Modbus RTU modbus_rtu Baca / TulisRead / Write PLC, sensor via serial RS-485 atau RS-232 (USB-to-serial).PLCs, sensors via RS-485 or RS-232 serial (USB-to-serial).
MQTT Client mqtt_client Baca / TulisRead / Write Subscribe/publish ke broker eksternal (Mosquitto, HiveMQ, EMQX, dll.).Subscribe/publish to external broker (Mosquitto, HiveMQ, EMQX, etc.).
MQTT Broker mqtt_broker Baca / TulisRead / Write AliScada menjalankan broker MQTT internal (Aedes). Perangkat IoT terhubung langsung ke AliScada.AliScada runs an internal MQTT broker (Aedes). IoT devices connect directly to AliScada.
OPC UA Client opcua_client Baca / TulisRead / Write Server OPC UA — PLC Siemens, Beckhoff, KEPServer, Ignition, dll.OPC UA servers — Siemens PLC, Beckhoff, KEPServer, Ignition, etc.
BACnet/IP Client bacnet_client Baca / TulisRead / Write BMS/HVAC — kontroler BACnet/IP (Distech, Andover, Siemens, Johnson Controls).BMS/HVAC — BACnet/IP controllers (Distech, Andover, Siemens, Johnson Controls).
Modbus Server modbus_server Tulis (dari client)Write (from client) AliScada berperan sebagai Modbus slave — menerima nilai yang ditulis oleh master eksternal.AliScada acts as Modbus slave — receives values written by an external master.
SNMP Client snmp_client Baca / TulisRead / Write Polling perangkat jaringan via SNMP v1/v2c (switch, router, UPS, server). OID browser terintegrasi.Poll network devices via SNMP v1/v2c (switch, router, UPS, server). Integrated OID browser.
SNMP Agent snmp_agent Baca (dari manager)Read (from manager) AliScada bertindak sebagai SNMP server — SNMP manager eksternal (PRTG, Zabbix, Nagios) dapat mem-poll nilai semua tag via GET/GETNEXT/GETBULK.AliScada acts as SNMP server — external SNMP managers (PRTG, Zabbix, Nagios) can poll all tag values via GET/GETNEXT/GETBULK.
BACnet MS/TP bacnet_mstp_client Baca / TulisRead / Write BACnet MS/TP via RS-485 serial — polling Present Value dari objek AI/AO/AV/BI/BO/BV/MSV. Cocok untuk BMS, HVAC, dan perangkat otomasi gedung dengan kabel twisted-pair RS-485.BACnet MS/TP via RS-485 serial — polls Present Value from AI/AO/AV/BI/BO/BV/MSV objects. Suitable for BMS, HVAC, and building automation with RS-485 twisted-pair cabling.
Free Protocol free_protocol Baca / TulisRead / Write Perangkat TCP/serial dengan format frame yang sepenuhnya dikonfigurasi pengguna — mode Binary/Poll (frame hex + parse template) atau Regex/Stream (regex ekstraksi nilai dari data ASCII/biner).TCP/serial devices with fully user-configured frame formats — Binary/Poll mode (hex frame + parse template) or Regex/Stream mode (regex value extraction from ASCII/binary data).

Modbus TCP

Modbus TCP adalah protokol paling umum untuk PLC dan perangkat industri yang terhubung via Ethernet. AliScada bertindak sebagai Master — membaca dan menulis register ke perangkat slave.

Modbus TCP is the most common protocol for PLCs and industrial devices connected via Ethernet. AliScada acts as the Master — reading and writing registers to slave devices.

Konfigurasi DeviceDevice Configuration

FieldKeteranganDescriptionDefault
Host / IPAlamat IP perangkat Modbus TCPIP address of Modbus TCP device
PortPort TCP ModbusModbus TCP port502
Unit IDSlave ID / Unit ID Modbus (1–247)1
TimeoutBatas waktu respons dalam milidetikResponse timeout in milliseconds3000
Scan RateInterval pembacaan tag dalam milidetikTag read interval in milliseconds1000

Tipe Register TagTag Register Types

Register TypeFungsi ModbusModbus FunctionAksesAccessKeteranganDescription
holdingFC 3 / FC 16Baca / TulisRead / WriteRegister 16-bit paling umum — nilai setpoint, parameter kontrolMost common 16-bit register — setpoint values, control parameters
input_regFC 4Baca sajaRead onlyRegister 16-bit read-only — nilai sensor, feedback16-bit read-only register — sensor values, feedback
coilFC 1 / FC 5Baca / TulisRead / WriteBit 1-bit — status on/off, relay, boolean output1-bit coil — on/off status, relay, boolean output
discreteFC 2Baca sajaRead onlyBit 1-bit read-only — status input digital1-bit read-only — digital input status

Tipe Data TagTag Data Types

Data TypeUkuran RegisterRegister SizeRentang NilaiValue Range
bool1 register (bit 0)0 atau 10 or 1
int161 register−32 768 … 32 767
uint161 register0 … 65 535
int322 register−2 147 483 648 … 2 147 483 647
uint322 register0 … 4 294 967 295
float2 registerIEEE 754 single precision
double4 registerIEEE 754 double precision

Byte Order (untuk 32-bit & 64-bit)Byte Order (for 32-bit & 64-bit)

Byte OrderSusunan ByteByte ArrangementKeteranganDescription
big_endianAB CD (ABCD)Modbus standar — paling umumStandard Modbus — most common
little_endian_swapCD AB (CDAB)Word dibalik — umum di beberapa PLCWord-swapped — common in some PLCs
big_endian_swapBA DC (BADC)Byte dibalik dalam setiap wordByte-swapped within each word
little_endianDC BA (DCBA)Little-endian penuhFull little-endian
💡

Alamat tag menggunakan alamat PDU (mulai dari 0). Jika dokumentasi perangkat menuliskan "Holding Register 40001", masukkan alamat 0. Jika "40100", masukkan 99.

Tag addresses use PDU addressing (starting from 0). If the device documentation states "Holding Register 40001", enter address 0. If "40100", enter 99.

Modbus RTU

Modbus RTU berkomunikasi melalui port serial RS-485 atau RS-232. Biasanya digunakan dengan konverter USB-to-RS485 di komputer server.

Modbus RTU communicates via RS-485 or RS-232 serial port. Typically used with a USB-to-RS485 converter on the server computer.

FieldKeteranganDescriptionNilai UmumCommon Values
Port SerialNama port serialSerial port nameCOM3 (Windows) · /dev/ttyUSB0 (Linux)
Baud RateKecepatan komunikasiCommunication speed9600 · 19200 · 115200
Unit IDSlave ID perangkat (1–247)Device Slave ID (1–247)1
TimeoutBatas waktu respons (ms)Response timeout (ms)3000

Register type, data type, dan byte order sama seperti Modbus TCP di atas.

Register type, data type, and byte order are the same as Modbus TCP above.

💡

Di Linux, pastikan user memiliki hak akses port serial: sudo usermod -aG dialout $USER lalu logout/login. Di Windows, cek Device Manager untuk nama port COM yang benar.

On Linux, make sure the user has access to the serial port: sudo usermod -aG dialout $USER then log out/in. On Windows, check Device Manager for the correct COM port name.

MQTT

AliScada mendukung dua mode MQTT:

AliScada supports two MQTT modes:

  • MQTT Client (mqtt_client) — AliScada terhubung ke broker MQTT eksternal (Mosquitto, HiveMQ, EMQX, dll.) dan subscribe/publish topic.
  • MQTT Broker (mqtt_broker) — AliScada menjalankan broker MQTT internal (Aedes). Perangkat IoT terhubung langsung ke AliScada tanpa software broker terpisah.
  • MQTT Client (mqtt_client) — AliScada connects to an external MQTT broker (Mosquitto, HiveMQ, EMQX, etc.) and subscribes/publishes topics.
  • MQTT Broker (mqtt_broker) — AliScada runs an internal MQTT broker (Aedes). IoT devices connect directly to AliScada without separate broker software.

Konfigurasi Device MQTT ClientMQTT Client Device Configuration

FieldKeteranganDescriptionDefault
Broker HostAlamat IP atau hostname broker MQTTIP address or hostname of MQTT broker
PortPort broker MQTTMQTT broker port1883 (plain) · 8883 (TLS)
Client IDIdentitas unik MQTT clientUnique MQTT client identityauto-generated
Username / PasswordKredensial jika broker memerlukan autentikasiCredentials if broker requires authenticationopsionaloptional

Konfigurasi Tag MQTTMQTT Tag Configuration

FieldKeteranganDescription
TopicMQTT topic yang di-subscribe (contoh: sensor/suhu)MQTT topic to subscribe to (e.g. sensor/temperature)
QoS0 = At most once · 1 = At least once · 2 = Exactly once
Payload TypeFormat payload — lihat tabel di bawahPayload format — see table below
JSON PathPath ke nilai dalam objek JSON (contoh: data.temperature). Opsional.Path to value in JSON object (e.g. data.temperature). Optional.

Tipe Payload

Payload TypeFormatKeterangan
rawTeks / angka langsungNilai numerik atau string mentah — paling sederhana
jsonJSON stringGunakan JSON Path untuk mengekstrak field tertentu
msgpackBinary MessagePackPerangkat mengirim binary msgpack langsung
msgpack_base64Base64 stringmsgpack yang di-encode base64 (umum di beberapa broker)
msgpack_hexHex stringmsgpack yang di-encode hex
💡

Untuk ESP32 / Arduino yang mengirim JSON sederhana seperti {"temp":25.3,"hum":60}, gunakan Payload Type json dan JSON Path temp untuk tag suhu, hum untuk tag kelembaban. Satu topic bisa dipakai oleh banyak tag sekaligus.

For ESP32 / Arduino sending simple JSON like {"temp":25.3,"hum":60}, use Payload Type json and JSON Path temp for the temperature tag, hum for humidity. One topic can be used by multiple tags simultaneously.

OPC UA Client

OPC UA adalah standar komunikasi industri modern yang digunakan oleh PLC Siemens (S7-1200/1500), Beckhoff TwinCAT, Schneider EcoStruxure, KEPServerEX, Ignition, dan banyak lainnya.

OPC UA is a modern industrial communication standard used by Siemens PLCs (S7-1200/1500), Beckhoff TwinCAT, Schneider EcoStruxure, KEPServerEX, Ignition, and many others.

Konfigurasi DeviceDevice Configuration

FieldKeteranganDescriptionDefault
Host / IPAlamat IP server OPC UAIP address of OPC UA server
PortPort OPC UAOPC UA port4840
Endpoint PathPath endpoint opsional (contoh: /OPCUA/SimulationServer)Optional endpoint path (e.g. /OPCUA/SimulationServer)(kosongempty)
Username / PasswordAutentikasi UserName — opsionalUserName authentication — optionalopsionaloptional
Security ModeNone · Sign · SignAndEncryptNone
Security PolicyNone · Basic128Rsa15 · Basic256 · Basic256Sha256 · Aes128Sha256RsaOaepNone

Konfigurasi Tag OPC UAOPC UA Tag Configuration

FieldKeteranganDescription
Node IDAlamat node OPC UA — contoh: ns=2;i=1001, ns=1;s=Channel1.Device1.Tag1OPC UA node address — e.g. ns=2;i=1001, ns=1;s=Channel1.Device1.Tag1
Scan RateInterval sampling subscription (ms)Subscription sampling interval (ms)
💡

Gunakan fitur Browse di form tag OPC UA untuk menjelajahi node tree server secara visual — klik node yang diinginkan dan Node ID terisi otomatis. Tidak perlu mengetik Node ID secara manual.

Use the Browse feature in the OPC UA tag form to visually explore the server's node tree — click the desired node and the Node ID fills automatically. No need to type the Node ID manually.

BACnet/IP Client

BACnet/IP digunakan di sistem BMS (Building Management System) dan HVAC — kontroler Distech Controls, Andover, Siemens Desigo, Johnson Controls Metasys, dan lainnya.

BACnet/IP is used in BMS (Building Management System) and HVAC systems — Distech Controls, Andover, Siemens Desigo, Johnson Controls Metasys controllers, and others.

Konfigurasi DeviceDevice Configuration

FieldKeteranganDescriptionDefault
Host / IPAlamat IP kontroler BACnetIP address of BACnet controller
Device InstanceInstance ID perangkat BACnet (diperlukan untuk browse/tulis)BACnet device Instance ID (required for browse/write)

Tipe Objek BACnet yang DidukungSupported BACnet Object Types

Tipe ObjekObject TypeKodeCodeAksesAccessKeteranganDescription
Analog Input0BacaReadNilai analog masukan (sensor suhu, tekanan, dll.)Analog input value (temperature, pressure sensors, etc.)
Analog Output1Baca / TulisRead / WriteNilai analog keluaran (setpoint AHU, valve, dll.)Analog output value (AHU setpoints, valves, etc.)
Analog Value2Baca / TulisRead / WriteNilai analog internal/virtualInternal/virtual analog value
Binary Input3BacaReadStatus digital masukan (on/off)Digital input status (on/off)
Binary Output4Baca / TulisRead / WriteStatus digital keluaran (relay, kontaktor)Digital output status (relay, contactor)
Binary Value5Baca / TulisRead / WriteStatus digital internal/virtualInternal/virtual digital status
Multi-State Input13BacaReadStatus multi-kondisi masukanMulti-state input status
Multi-State Output14Baca / TulisRead / WriteStatus multi-kondisi keluaranMulti-state output status
Multi-State Value19Baca / TulisRead / WriteStatus multi-kondisi internal/virtualInternal/virtual multi-state status

Alamat tag ditulis dalam format KODE_OBJEK:INSTANCE, contoh: 0:1001 untuk Analog Input nomor 1001, 4:5 untuk Binary Output nomor 5.

Tag addresses use the format OBJECT_CODE:INSTANCE, e.g. 0:1001 for Analog Input number 1001, 4:5 for Binary Output number 5.

💡

Gunakan fitur Discover di form device BACnet untuk menemukan semua perangkat BACnet di jaringan secara otomatis, dan fitur Browse di form tag untuk melihat daftar objek yang tersedia di kontroler tersebut.

Use the Discover feature in the BACnet device form to automatically find all BACnet devices on the network, and the Browse feature in the tag form to see the list of objects available in that controller.

Modbus Server (Slave)

Dalam mode ini AliScada berperan sebagai Modbus slave — sistem eksternal (PLC master, HMI lain) dapat menulis nilai ke register AliScada. Nilai yang ditulis masuk sebagai nilai tag dan dapat ditampilkan di dashboard atau dipakai dalam alarm.

In this mode AliScada acts as a Modbus slave — external systems (PLC master, other HMIs) can write values to AliScada registers. Written values enter as tag values and can be displayed on dashboards or used in alarms.

FieldKeteranganDescriptionDefault
PortPort TCP yang dibuka sebagai Modbus slaveTCP port opened as Modbus slave502
Unit IDSlave ID yang direspon AliScadaSlave ID responded by AliScada1

Tag dengan tipe modbus_server menggunakan Holding Register. Tipe data yang didukung: uint16, int16, bool, float (2 register, big-endian), double (4 register, big-endian).

Tags of type modbus_server use Holding Registers. Supported data types: uint16, int16, bool, float (2 registers, big-endian), double (4 registers, big-endian).

Source Tag

Setiap tag modbus_server dapat dikonfigurasi dengan Source Tag opsional. Jika diset, register Modbus selalu mengembalikan nilai live dari tag sumber tersebut ke Modbus master — sehingga sistem eksternal dapat membaca nilai tag AliScada lainnya (misal: hasil kalkulasi script, nilai sensor Modbus RTU) melalui satu interface Modbus TCP slave. Online Value di Tag Editor juga akan mencerminkan nilai sumber secara real-time.

Each modbus_server tag can be configured with an optional Source Tag. If set, the Modbus register always returns the live value of the source tag to the Modbus master — so external systems can read other AliScada tag values (e.g. script calculation results, Modbus RTU sensor values) through a single Modbus TCP slave interface. The Online Value in Tag Editor will also mirror the source value in real-time.

SNMP Client

SNMP (Simple Network Management Protocol) digunakan untuk membaca status dan metrik dari perangkat jaringan seperti switch, router, UPS, server, dan perangkat industri yang mendukung MIB standar. AliScada mendukung SNMP v1 dan v2c.

SNMP (Simple Network Management Protocol) is used to read status and metrics from network devices such as switches, routers, UPS, servers, and industrial devices supporting standard MIBs. AliScada supports SNMP v1 and v2c.

Konfigurasi Device SNMP ClientSNMP Client Device Configuration

FieldKeteranganDescriptionDefault
Host / IPAlamat IP perangkat SNMPIP address of SNMP device
PortPort UDP SNMPSNMP UDP port161
Community StringKata sandi komunitas SNMP (biasanya public untuk read-only)SNMP community password (usually public for read-only)public
SNMP VersionVersi protokolProtocol versionv2c
TimeoutBatas waktu respons (ms)Response timeout (ms)3000
RetriesJumlah percobaan ulang saat gagalNumber of retries on failure3

OID Browser (Walk)

Klik Walk OIDs di DeviceConfig setelah mengisi host/port/community untuk menelusuri semua OID yang tersedia. Pilih subtree MIB sebagai titik awal walk. Hasil dapat difilter berdasarkan OID atau deskripsi.

Click Walk OIDs in DeviceConfig after filling in host/port/community to browse all available OIDs. Select a MIB subtree as the walk starting point. Results can be filtered by OID or description.

Konfigurasi Tag SNMPSNMP Tag Configuration

FieldKeteranganDescription
PerangkatDevicePilih device dengan protocol snmp_clientSelect device with protocol snmp_client
OID (Address)Object Identifier yang di-poll, contoh: 1.3.6.1.2.1.2.2.1.10.1 (ifInOctets interface 1)Object Identifier to poll, e.g. 1.3.6.1.2.1.2.2.1.10.1 (ifInOctets interface 1)
Data Typefloat, int32, uint32, stringterdeteksi otomatis saat klik OID di OID Pickerauto-detected when clicking an OID in OID Picker
Scan RateInterval polling dalam milidetikPolling interval in milliseconds
💡

Gunakan tombol Browse OIDs di form tag (TagEditor) untuk membuka OID Picker inline. Klik baris OID → Address terisi otomatis dan Data Type disesuaikan berdasarkan tipe SNMP yang dikembalikan perangkat.

Use the Browse OIDs button in the tag form (TagEditor) to open the inline OID Picker. Click an OID row → Address fills automatically and Data Type is set based on the SNMP type returned by the device.

Subtree MIB yang UmumCommon MIB Subtrees

SubtreeOID DasarBase OIDKeteranganDescription
System1.3.6.1.2.1.1Nama host, deskripsi, uptime sistemHost name, description, system uptime
Interfaces1.3.6.1.2.1.2Status interface jaringan, traffic counterNetwork interface status, traffic counters
IP1.3.6.1.2.1.4Statistik IP — paket masuk/keluar, errorIP statistics — inbound/outbound packets, errors
TCP1.3.6.1.2.1.6Koneksi TCP aktif, statistikActive TCP connections, statistics
Host Resources1.3.6.1.2.1.25CPU load, penggunaan memori, disk (server Linux/Windows)CPU load, memory usage, disk (Linux/Windows servers)
Enterprise1.3.6.1.4.1OID vendor spesifik (UPS, switch managed, dll.)Vendor-specific OIDs (UPS, managed switches, etc.)
ℹ️

SNMP menggunakan UDP port 161. Pastikan firewall di perangkat target mengizinkan koneksi UDP dari IP server AliScada. Untuk perangkat yang hanya mendukung SNMPv1, ubah SNMP Version ke v1.

SNMP uses UDP port 161. Ensure the firewall on the target device allows UDP connections from the AliScada server IP. For devices that only support SNMPv1, change SNMP Version to v1.

SNMP Agent

Mode SNMP Agent membalik peran: AliScada bertindak sebagai server SNMP yang merespons permintaan dari SNMP manager eksternal seperti PRTG, Zabbix, Nagios, Cacti, atau snmpwalk. Semua nilai tag yang aktif di tag engine dipublikasikan otomatis — tidak perlu konfigurasi tag terpisah.

SNMP Agent mode reverses the roles: AliScada acts as an SNMP server responding to requests from external SNMP managers such as PRTG, Zabbix, Nagios, Cacti, or snmpwalk. All active tag values in the tag engine are published automatically — no separate tag configuration needed.

Konfigurasi Device SNMP AgentSNMP Agent Device Configuration

FieldKeteranganDescriptionDefault
Port UDPPort tempat AliScada mendengarkan koneksi SNMPPort where AliScada listens for SNMP connections1161
CommunityCommunity string (kata sandi komunitas SNMP)Community string (SNMP community password)public
Enterprise OIDBase OID tempat semua nilai tag dipublikasikanBase OID where all tag values are published1.3.6.1.4.1.99999

Struktur OID (enterpriseOid.1.kolom.N)OID Structure (enterpriseOid.1.column.N)

KolomColumnOID SuffixIsiContentTipe SNMPSNMP Type
Tag Name.1.1.NNama tagTag nameOctetString
Tag Value.1.2.NNilai tag (dalam bentuk string)Tag value (as string)OctetString
Quality.1.3.N1 = baik, 0 = buruk1 = good, 0 = badInteger
Eng. Unit.1.4.NSatuan teknik (mis. bar, °C)Engineering unit (e.g. bar, °C)OctetString

Contoh — Enterprise OID 1.3.6.1.4.1.99999, tag ke-3 bernama "Pressure":

Example — Enterprise OID 1.3.6.1.4.1.99999, 3rd tag named "Pressure":

  • 1.3.6.1.4.1.99999.1.1.3Pressure
  • 1.3.6.1.4.1.99999.1.2.34.5
  • 1.3.6.1.4.1.99999.1.3.31 (good)
  • 1.3.6.1.4.1.99999.1.4.3bar
💡

Tes dari terminal: snmpwalk -v2c -c public <ip-aliscada>:1161 1.3.6.1.4.1.99999
Port default 1161 tidak memerlukan akses root/admin. Ganti ke 161 jika SNMP manager Anda tidak mendukung port non-standar.

Test from terminal: snmpwalk -v2c -c public <ip-aliscada>:1161 1.3.6.1.4.1.99999
Default port 1161 does not require root/admin access. Change to 161 if your SNMP manager does not support non-standard ports.

ℹ️

Nilai tag direfresh setiap 2 detik. SNMP manager dapat menggunakan interval polling sesuai kebutuhan (disarankan minimum 5 detik). Pastikan UDP port 1161 terbuka di firewall server AliScada untuk koneksi masuk dari SNMP manager.

Tag values are refreshed every 2 seconds. SNMP managers can use any polling interval as needed (minimum 5 seconds recommended). Ensure UDP port 1161 is open in the AliScada server firewall for incoming connections from SNMP managers.

BACnet MS/TP

BACnet MS/TP (Master/Slave Token Passing) adalah protokol BACnet yang berjalan di atas kabel RS-485 serial — berbeda dengan BACnet/IP yang menggunakan Ethernet. MS/TP umum ditemukan di sistem BMS (Building Management System), kontroller HVAC, dan perangkat otomasi gedung yang menggunakan kabel twisted-pair dua kawat.

BACnet MS/TP (Master/Slave Token Passing) is a BACnet protocol running over RS-485 serial cable — unlike BACnet/IP which uses Ethernet. MS/TP is commonly found in BMS (Building Management System), HVAC controllers, and building automation devices using two-wire twisted-pair cabling.

Konfigurasi Device BACnet MS/TPBACnet MS/TP Device Configuration

FieldKeteranganDescriptionDefault
Serial PortPath port serial — COM3 (Windows) atau /dev/ttyUSB0 (Linux)Serial port path — COM3 (Windows) or /dev/ttyUSB0 (Linux)
Baud RateKecepatan komunikasi — harus sama di semua node dalam satu trunkCommunication speed — must be the same for all nodes in one trunk38400
Device MS/TP MACAlamat MAC perangkat target pada bus RS-485 (0–127)Target device MAC address on the RS-485 bus (0–127)0
Our MS/TP MACAlamat MAC AliScada pada bus (0–127). Nilai tinggi = prioritas bus rendah.AliScada's MAC address on the bus (0–127). Higher value = lower bus priority.127
BACnet Device InstanceNomor instance perangkat BACnet (0–4194302) — harus cocok dengan konfigurasi fisik perangkatBACnet device instance number (0–4194302) — must match the physical device configuration0
TimeoutWaktu tunggu respons (ms)Response timeout (ms)3000
⚠️

Aturan trunk RS-485:

RS-485 trunk rules:

  • Semua node dalam satu trunk RS-485 harus menggunakan serial port dan baud rate yang sama.
  • Setiap node (termasuk AliScada) harus memiliki MAC address yang unik (0–127).
  • Gunakan tombol Test Serial Port di form device untuk memverifikasi port dapat dibuka sebelum menyimpan.
  • All nodes in one RS-485 trunk must use the same serial port and baud rate.
  • Each node (including AliScada) must have a unique MAC address (0–127).
  • Use the Test Serial Port button in the device form to verify the port can be opened before saving.

Format Alamat TagTag Address Format

Tag BACnet MS/TP menggunakan format TYPE:INSTANCE — sama dengan BACnet/IP. Selector device di TagEditor menampilkan semua device bertipe bacnet_client maupun bacnet_mstp_client.

BACnet MS/TP tags use the TYPE:INSTANCE format — same as BACnet/IP. The device selector in TagEditor shows all devices of type bacnet_client and bacnet_mstp_client.

Tipe ObjekObject TypeKodeCodeContoh AlamatAddress ExampleAksesAccess
Analog InputAIAI:0BacaRead
Analog OutputAOAO:1Baca / TulisRead / Write
Analog ValueAVAV:5Baca / TulisRead / Write
Binary InputBIBI:2BacaRead
Binary OutputBOBO:0Baca / TulisRead / Write
Binary ValueBVBV:3Baca / TulisRead / Write
Multi-State InputMSIMSI:0BacaRead
Multi-State OutputMSOMSO:1Baca / TulisRead / Write
Multi-State ValueMSVMSV:10Baca / TulisRead / Write
💡

Widget Button / Toggle / Setpoint / Slider menulis nilai ke properti Present Value — berlaku untuk semua tipe objek yang mendukung tulis (AO, AV, BO, BV, MSO, MSV).

Button / Toggle / Setpoint / Slider widgets write values to the Present Value property — applies to all writable object types (AO, AV, BO, BV, MSO, MSV).

Free Protocol

Free Protocol memungkinkan AliScada terhubung ke perangkat TCP atau serial yang menggunakan format frame yang sepenuhnya dikonfigurasi oleh pengguna — bukan Modbus atau MQTT. Cocok untuk: timbangan digital, barcode reader, GPS receiver, meter serial, sensor custom, atau perangkat embedded dengan protokol komunikasi sendiri.

Free Protocol allows AliScada to connect to TCP or serial devices using a frame format that is fully user-configured — not Modbus or MQTT. Suitable for: digital scales, barcode readers, GPS receivers, serial meters, custom sensors, or embedded devices with their own communication protocol.

Konfigurasi DeviceDevice Configuration

FieldKeteranganDescriptionContohExample
Transporttcpsambungan EthernetEthernet connection; serialport COM/ttyUSBCOM/ttyUSB porttcp
Host / IPAlamat IP perangkat (mode TCP)Device IP address (TCP mode)192.168.1.50
PortPort TCP (mode TCP)TCP port (TCP mode)4001
Serial PortNama port serial (mode serial)Serial port name (serial mode)COM3 / /dev/ttyUSB0
Baud RateKecepatan komunikasi serialSerial communication speed9600
Serial OptionsFormat data-parity-stopData-parity-stop format8N1
TimeoutWaktu tunggu respons (ms)Response timeout (ms)3000
RX Frame EndByte hex penanda akhir frame yang diterima. Kosong = split pada CR/LF.Hex byte marking end of received frame. Empty = split on CR/LF.03 (ETX)
RX Frame StartByte hex penanda awal frame — byte sebelum penanda ini di-strip otomatis.Hex byte marking frame start — bytes before this marker are auto-stripped.01 (SOH)

Mode Parsing TagTag Parsing Modes

Setiap tag Free Protocol memiliki dua mode parsing yang dapat dipilih:

Each Free Protocol tag has two parsing modes to choose from:

🔢 Binary / Poll

AliScada mengirim frame permintaan (poll frame) ke perangkat dan mem-parse respons menggunakan template hex dengan ?? sebagai placeholder nilai.

AliScada sends a request frame (poll frame) to the device and parses the response using a hex template with ?? as value placeholders.

FieldKeteranganDescription
Poll FrameHex bytes yang dikirim, mis. 01 03 00 00 00 01 84 0A. Kosongkan untuk tag write-only.Hex bytes to send, e.g. 01 03 00 00 00 01 84 0A. Leave empty for write-only tags.
Parse TemplatePola respons dengan ?? untuk byte nilai, mis. 01 03 02 ?? ??Response pattern with ?? for value bytes, e.g. 01 03 02 ?? ??
Write TemplateFrame hex yang dikirim saat menulis nilai, mis. 01 10 00 00 ?? ??
Checksumnone, crc16, lrc, sum8

📡 Regex / Stream

AliScada mendengarkan data yang dikirim perangkat secara berkala dan mengekstrak nilai menggunakan ekspresi regex. Parse Regex bisa dikosongkan untuk tag write-only.

AliScada listens for data periodically sent by the device and extracts values using a regex expression. Parse Regex can be left empty for write-only tags.

FieldKeteranganDescription
Write TemplateFrame TX saat menulis nilai. ASCII: SET={VALUE_INT}. Hex: 01 02 03. Kosongkan jika hanya membaca.TX frame when writing a value. ASCII: SET={VALUE_INT}. Hex: 01 02 03. Leave empty for read-only.
Parse RegexRegex dengan 1 capture group, mis. TEMP=([\d.]+). Kosongkan untuk tag write-only.Regex with 1 capture group, e.g. TEMP=([\d.]+). Leave empty for write-only tags.

TX Frame Framing (per Tag)

FieldKeteranganDescriptionContohExample
TX Frame PrefixByte hex yang disisipkan sebelum payloadHex bytes inserted before payload01 (SOH)
TX Frame SuffixByte hex yang disisipkan setelah payload + checksumHex bytes inserted after payload + checksum03 (ETX)
EOL TerminatorKarakter akhir yang ditambahkan setelah suffixEnd character added after suffixCR+LF

Urutan perakitan frame TX: PREFIX + payload + CHECKSUM + SUFFIX + EOL

TX frame assembly order: PREFIX + payload + CHECKSUM + SUFFIX + EOL

ASCII Write Template — Placeholder

PlaceholderNilai yang disisipkanInserted valueContohExample
{VALUE_INT}Nilai sebagai integerValue as integer42
{VALUE_FLOAT}Nilai sebagai float 2 desimalValue as float with 2 decimals3.14
{VALUE_HEX}Nilai sebagai hex uppercaseValue as uppercase hex2A
{VALUE_STR}Nilai sebagai stringValue as stringON
{TAG:nama_tag}Nilai tag lain yang sedang berjalan, disisipkan saat frame dikirimValue of another running tag, inserted when frame is sentSET_ADDR={TAG:unit_id}

Frame Preview

Bagian Frame Preview di TagEditor menampilkan pratinjau byte TX yang akan dikirim, diperbarui secara real-time saat Anda mengetik template. Berguna untuk memverifikasi bahwa padding, checksum, dan urutan byte sudah benar sebelum menyambungkan ke perangkat.

The Frame Preview section in TagEditor shows a preview of the TX bytes to be sent, updated in real-time as you type the template. Useful to verify that padding, checksum, and byte order are correct before connecting to the device.

Write Value From Tag

Field Write Value From Tag menentukan tag sumber yang nilainya akan digunakan sebagai {VALUE_*} dalam Write Template. Jika diisi, AliScada mengambil nilai tag tersebut setiap kali frame TX dikirim — bukan nilai yang di-set secara manual. Cocok untuk meneruskan nilai sensor ke perangkat lain.

The Write Value From Tag field specifies the source tag whose value will be used as {VALUE_*} in the Write Template. If set, AliScada reads that tag's value each time a TX frame is sent — instead of a manually set value. Ideal for forwarding sensor values to another device.

Write Trigger

Menentukan kapan AliScada mengirim frame TX secara otomatis. Tersedia 3 mode:

Determines when AliScada automatically sends TX frames. 3 modes available:

ModeKeteranganDescriptionKapan DigunakanWhen to Use
Source Changes Kirim frame TX setiap kali nilai tag sumber (Write Value From Tag) berubahSend TX frame whenever the source tag value (Write Value From Tag) changes Meneruskan nilai sensor ke aktuator secara reaktifReactively forward sensor values to actuators
Tag Condition Kirim frame TX sekali saat tag lain memenuhi kondisi tertentu (= 1, > 0, = ON). Terpicu pada rising edge — tidak terulang sampai kondisi reset menjadi false.Send TX frame once when another tag meets a condition (= 1, > 0, = ON). Triggered on rising edge — does not repeat until condition resets to false. Perintah output satu kali: buka katup, aktifkan relay, kirim setpointOne-shot output commands: open valve, activate relay, send setpoint
Time Interval Kirim frame TX setiap N milidetik, terlepas dari perubahan nilaiSend TX frame every N milliseconds, regardless of value changes Heartbeat / keepalive ke perangkat, polling write periodikHeartbeat / keepalive to device, periodic write polling
💡

Kondisi String: Field Condition pada mode Tag Condition mendukung perbandingan string secara case-insensitive. Untuk tag dengan tipe data string, cukup tulis kondisi seperti = FAULT atau != IDLE — AliScada akan membandingkan tanpa memperhatikan huruf besar/kecil.

String Conditions: The Condition field in Tag Condition mode supports case-insensitive string comparison. For tags with string data type, write conditions like = FAULT or != IDLE — AliScada will compare without regard to letter case.

Tag Write-OnlyWrite-Only Tags

Tag Free Protocol yang hanya memiliki Write Template (tanpa Poll Frame atau Parse Regex) adalah tag write-only. Tag ini tidak di-poll dan tidak menerima data dari perangkat. Kualitasnya otomatis diset ke GOOD saat startup — bukan BAD — sehingga Write Trigger dapat bekerja segera.

Free Protocol tags that only have a Write Template (no Poll Frame or Parse Regex) are write-only tags. These tags are not polled and do not receive data from the device. Their quality is automatically set to GOOD at startup — not BAD — so Write Triggers can work immediately.

💡

Send Command Panel: Gunakan panel Send Command di TagEditor untuk mengirim frame uji ke perangkat dan melihat respons hex mentah — tanpa perlu menyimpan tag terlebih dahulu. Gunakan tombol {TAG:nama_tag} untuk menyisipkan referensi tag langsung ke field command saat pengujian. Ideal untuk verifikasi format frame saat commissioning.

Send Command Panel: Use the Send Command panel in TagEditor to send test frames to the device and view the raw hex response — without saving the tag first. Use the {TAG:tag_name} button to insert tag references directly into the command field during testing. Ideal for frame format verification during commissioning.

ℹ️

RX Frame Delimiters dikonfigurasi per device (bukan per tag) karena memengaruhi parsing stream pada level koneksi. Semua tag pada satu device berbagi konfigurasi RX yang sama.

RX Frame Delimiters are configured per device (not per tag) because they affect stream parsing at the connection level. All tags on one device share the same RX configuration.

Tipe Tag Khusus

Selain tag yang terhubung ke protokol di atas, AliScada juga mendukung tipe tag berikut:

In addition to tags connected to the protocols above, AliScada also supports the following tag types:

Tipe TagTag TypeKeteranganDescription
Internal / Script Nilai dihitung dari ekspresi JavaScript berdasarkan nilai tag lain. Tidak memerlukan perangkat fisik. Contoh: menghitung efisiensi pompa, konversi satuan, rata-rata beberapa sensor, konversi Unix timestamp ke datetime. Value computed from a JavaScript expression based on other tag values. No physical device needed. Examples: pump efficiency, unit conversion, multi-sensor average, Unix timestamp to datetime.

Variabel & fungsi yang tersedia dalam script:Variables & functions available in script:
tags (snapshot semua nilai tagsnapshot of all tag values) · prev (nilai sebelumnya tag iniprevious value of this tag) · Math · Number · String · Date

Fungsi datetime bawaan:Built-in datetime functions:
FungsiFunctionContoh hasilExample result
toDatetime(ts, fmt?, tz?)Unix detik/msUnix sec/ms"2026-05-28 15:52:49"
toDatetime(ts, 'DD/MM/YYYY')"28/05/2026"
toDatetime(ts, 'HH:mm:ss')"15:52:49"
toUnix(dateStr, unit?)ISO string → Unix detik (atau 'ms')Unix seconds (or 'ms')
nowDatetime(fmt?, tz?)Waktu server sekarang, terformatCurrent server time, formatted
nowUnix(unit?)Unix detik server sekarangCurrent server Unix seconds
Token format: YYYY YY MM DD HH mm ss. Default timezone: Asia/Jakarta.
// Daya nyata dari tegangan × arus × faktor daya// Active power from voltage × current × power factor
return tags["VL1_Tegangan"] * tags["IL1_Arus"] * tags["PF_FaktorDaya"];

// Konversi unix timestamp ke string tanggal// Convert unix timestamp to date string
return toDatetime(tags["ts_kirim"].value, 'DD/MM/YYYY HH:mm:ss');

// Waktu server saat ini tanpa tag tambahan// Current server time without extra tags
return nowDatetime('HH:mm:ss');

// Selisih waktu dalam menit sejak event terakhir// Elapsed time in minutes since last event
const selisih = nowUnix() - tags["last_event"].value;
return Math.floor(selisih / 60);
RTSP / IP Camera Tag kamera untuk menampilkan snapshot live dari kamera IP (RTSP) atau webcam USB yang terhubung ke server. Dirender melalui ffmpeg — lihat Setup ffmpeg untuk instalasi. Dikonfigurasi via widget Camera di dashboard. Camera tag for displaying a live snapshot from an IP camera (RTSP) or USB webcam connected to the server. Rendered via ffmpeg — see Setup ffmpeg for installation. Configured via the Camera widget on the dashboard.

🔔

Notifikasi Email & Telegram

AliScada v1.4 mendukung pengiriman notifikasi otomatis melalui Email (SMTP) dan Telegram Bot. Ada tiga jenis trigger: alarm aktif/selesai, nilai tag memenuhi kondisi, dan aksi write dari widget dashboard.

AliScada v1.4 supports automatic notifications via Email (SMTP) and Telegram Bot. Three trigger types: active/cleared alarm, tag value meets condition, and widget write action from the dashboard.

ℹ️

Semua konfigurasi notifikasi tersimpan di database lokal. Tidak ada data yang dikirim ke server eksternal selain endpoint Telegram/SMTP yang Anda konfigurasi sendiri.

All notification configuration is stored in the local database. No data is sent to external servers other than the Telegram/SMTP endpoints you configure yourself.

Konfigurasi Channel (Email & Telegram)

Buka Studio → Notifications → Channel Settings.

Open Studio → Notifications → Channel Settings.

Email (SMTP)

  1. Centang Enable untuk mengaktifkan channel Email.

    Check Enable to activate the Email channel.

  2. Isi konfigurasi SMTP:

    Fill in the SMTP configuration:

Field ContohExample KeteranganDescription
SMTP Host smtp.gmail.com Server SMTP pengirimOutgoing SMTP server
Port 587 587 = STARTTLS · 465 = SSL/TLS
Use TLS/SSL ✓ untuk port 465✓ for port 465 Centang jika menggunakan port 465Check if using port 465
SMTP Username user@gmail.com Email pengirimSender email address
SMTP Password App Password Untuk Gmail, gunakan App Password (bukan password akun biasa)For Gmail, use App Password (not regular account password)
From Address aliscada@perusahaan.com Alamat pengirim yang tampil di inboxSender address shown in inbox
To Address(es) ops@co.com, mgr@co.com Penerima — pisahkan dengan koma untuk beberapa alamatRecipients — separate multiple addresses with commas
  1. Atur Send on new alarm / Send on alarm clear sesuai kebutuhan.

    Configure Send on new alarm / Send on alarm clear as needed.

  2. Atur Min Severity — hanya alarm dengan severity ≥ nilai ini yang dikirim (info / warning / high / critical).

    Set Min Severity — only alarms with severity ≥ this value are sent (info / warning / high / critical).

  3. Atur Alarm Cooldown — jeda minimum antar notifikasi alarm yang sama (dalam menit).

    Set Alarm Cooldown — minimum interval between identical alarm notifications (in minutes).

  4. Klik Send Test Email untuk memverifikasi, lalu klik Save Configuration.

    Click Send Test Email to verify, then click Save Configuration.

⚠️

Gmail — App Password: Jika menggunakan Gmail dengan 2FA aktif, buat App Password di myaccount.google.com → Security → App Passwords. Gunakan App Password tersebut sebagai SMTP Password — bukan password akun Google biasa.

Gmail — App Password: If using Gmail with 2FA enabled, create an App Password at myaccount.google.com → Security → App Passwords. Use that App Password as the SMTP Password — not your regular Google account password.

Telegram Bot

  1. Buat bot baru via @BotFather di Telegram → ketik /newbot → ikuti instruksi → salin Bot Token (format: 123456789:AAEF...).

    Create a new bot via @BotFather in Telegram → type /newbot → follow instructions → copy the Bot Token (format: 123456789:AAEF...).

  2. Cari bot Anda di Telegram → kirim pesan /start. Langkah ini wajib sebelum bot bisa mengirim pesan ke Anda.

    Find your bot in Telegram → send the message /start. This step is required before the bot can send messages to you.

  3. Dapatkan Chat ID — setelah kirim /start, buka URL berikut di browser:

    Get the Chat ID — after sending /start, open the following URL in your browser:

    https://api.telegram.org/botTOKEN/getUpdates

    Cari field "id" di dalam "from" — itulah Chat ID Anda (contoh: 136816235). Untuk grup/channel: tambahkan bot sebagai member dan gunakan Chat ID negatif (contoh: -100123456789).

    Find the "id" field inside "from" — that is your Chat ID (e.g. 136816235). For groups/channels: add the bot as a member and use the negative Chat ID (e.g. -100123456789).

  4. Di Studio → Notifications → Telegram Bot: centang Enable, isi Bot Token dan Chat ID. URL getUpdates ditampilkan otomatis dari token yang Anda isi.

    In Studio → Notifications → Telegram Bot: check Enable, fill in Bot Token and Chat ID. The getUpdates URL is shown automatically from the token you enter.

  5. Klik Send Test Message untuk verifikasi, lalu klik Save Configuration.

    Click Send Test Message to verify, then click Save Configuration.

🚫

"Bad Request: chat not found" — Bot belum menerima pesan dari Anda. Pastikan sudah mengirim /start ke bot sebelum melakukan test.

"Bad Request: chat not found" — The bot has not received a message from you. Make sure you have sent /start to the bot before testing.

Aturan Nilai Tag (Tag Event Rules)

Kirim notifikasi saat nilai sebuah tag memenuhi kondisi tertentu — misalnya saat suhu melebihi batas, atau pompa berhenti (nilai = 0).

Send a notification when a tag value meets a specific condition — for example when temperature exceeds a limit, or a pump stops (value = 0).

Buka Studio → Notifications → Tag Event Rules → klik + Add Rule.

Open Studio → Notifications → Tag Event Rules → click + Add Rule.

Field KeteranganDescription
Rule Name Nama aturan — hanya untuk identifikasiRule name — for identification only
Tag Name Nama tag yang dipantau (ketik atau pilih dari autocomplete)Tag name to monitor (type or select from autocomplete)
Condition Operator: == != > >= < <=
Trigger Value Nilai ambang batas yang memicu notifikasiThreshold value that triggers the notification
Channels Centang email dan/atau telegramCheck email and/or telegram
Subject Subjek email (opsional)Email subject (optional)
Message Isi pesan. Gunakan variabel {tag} {value} {condition} {timestamp} {name}Message content. Use variables {tag} {value} {condition} {timestamp} {name}
Cooldown (min) Jeda minimum antar notifikasi rule yang sama (default: 15 menit)Minimum gap between notifications for the same rule (default: 15 minutes)
Enabled Aktif/nonaktif tanpa menghapus ruleEnable/disable without deleting the rule

Contoh Template PesanMessage Template Example

⚠️ {name} terpicu!
Tag   : {tag}
Nilai : {value} (kondisi: {condition})
Waktu : {timestamp}
💡

Cooldown berlaku per rule per channel. Jika tag terus memenuhi kondisi, notifikasi hanya dikirim sekali per cooldown — tidak spam setiap scan cycle.

Cooldown applies per rule per channel. If a tag continues to meet the condition, a notification is only sent once per cooldown period — no spam on every scan cycle.

Decimal Digits & Int Scale

Widget Digital, Gauge, Setpoint, dan Process Tank mendukung dua opsi penskalaan untuk register yang menyimpan nilai integer berskala (umum di Modbus INT16/UINT16).

Digital, Gauge, Setpoint, and Process Tank widgets support two scaling options for registers storing scaled integer values (common in Modbus INT16/UINT16).

FieldFungsiFunction
Decimal Digits Jumlah digit desimal tampilan (0–6). Tanpa Int Scale: hanya memformat angka float.Number of display decimal digits (0–6). Without Int Scale: only formats float values.
Int Scale Aktifkan jika register menyimpan integer yang mewakili nilai desimal. Nilai tampilan = raw ÷ 10dec. Untuk Setpoint: nilai yang ditulis = input × 10dec.Enable if the register stores an integer representing a decimal value. Display value = raw ÷ 10dec. For Setpoint: written value = input × 10dec.

Contoh: Sensor suhu mengirim 293 untuk 29,3 °C. Set Decimal Digits = 1 dan aktifkan Int Scale. Widget menampilkan 29.3 °C, jarum gauge menunjuk ke 29,3, dan level tank terisi sesuai skala 0–100 °C.

Example: A temperature sensor sends 293 for 29.3 °C. Set Decimal Digits = 1 and enable Int Scale. The widget displays 29.3 °C, the gauge needle points to 29.3, and the tank level fills according to the 0–100 °C scale.

Distribusi Widget (Space Evenly)Distribute Widgets (Space Evenly)

Saat 2 atau lebih widget dipilih (Shift+klik), toolbar menampilkan tombol Align dan Distribute.

When 2 or more widgets are selected (Shift+click), the toolbar shows Align and Distribute buttons.

TombolButtonFungsiFunction
Space evenly acrossDistribusikan jarak horizontal secara merata di antara semua widget yang dipilihDistribute horizontal spacing evenly among all selected widgets
Space evenly downDistribusikan jarak vertikal secara merata di antara semua widget yang dipilihDistribute vertical spacing evenly among all selected widgets

Notifikasi dari Widget (Write Event)Widget Notifications (Write Event)

Widget Button, Toggle, Setpoint, dan Slider dapat mengirim notifikasi setiap kali operator menulis nilai dari runtime dashboard.

Button, Toggle, Setpoint, and Slider widgets can send notifications every time an operator writes a value from the runtime dashboard.

Konfigurasi di Studio → Dashboards → pilih widget → Properties Panel → Notification on Write.

Configure at Studio → Dashboards → select widget → Properties Panel → Notification on Write.

  1. Centang Enable notification on write.

    Check Enable notification on write.

  2. Pilih channel: Email dan/atau Telegram.

    Select channel: Email and/or Telegram.

  3. Isi Subject dan Message dengan template kustom. Klik chip variabel untuk menyisipkannya ke posisi kursor.

    Fill in Subject and Message with custom templates. Click variable chips to insert them at the cursor position.

Variabel Template WidgetWidget Template Variables

VariabelVariable Nilai yang disubstitusiSubstituted value
{tag} Nama tag yang ditulisName of tag written
{value} Nilai yang ditulis oleh operatorValue written by the operator
{label} Label widget yang terlihat di dashboardWidget label visible on the dashboard
{user} Username operator yang melakukan aksiUsername of the operator who performed the action
{timestamp} Waktu kejadianEvent time
ℹ️

Notifikasi widget tidak memiliki cooldown — setiap kali operator menekan tombol/mengubah nilai, notifikasi langsung dikirim. Cocok untuk aksi kritis seperti START/STOP mesin.

Widget notifications have no cooldown — every time an operator presses a button/changes a value, the notification is sent immediately. Suitable for critical actions like START/STOP machine.


🗄️

Ekspor DB Eksternal

Teruskan nilai tag secara real-time dari AliScada ke database MySQL atau PostgreSQL eksternal. Berguna untuk integrasi dengan sistem enterprise, BI tools, atau laporan khusus yang membutuhkan data proses langsung di database perusahaan.

Forward tag values in real-time from AliScada to an external MySQL or PostgreSQL database. Useful for integration with enterprise systems, BI tools, or custom reports that need process data directly in the company database.

ℹ️

Akses menu Ext DB hanya tersedia untuk role Admin. Beberapa target ekspor dapat berjalan bersamaan ke database berbeda.

The Ext DB menu is only available to the Admin role. Multiple export targets can run simultaneously to different databases.

Persiapan — Instalasi DriverPrerequisites — Driver Installation

Sebelum menggunakan fitur ini, pastikan driver database sudah terinstal di server AliScada:

Before using this feature, make sure the database driver is installed on the AliScada server:

npm install mysql2   # MySQL / MariaDB
npm install pg       # PostgreSQL
💡

Pada edisi EXE (distribusi), paket ini mungkin belum terinstal. Jika tombol Uji Koneksi mengembalikan error Package not installed, jalankan perintah di atas dari folder sumber proyek dan rebuild distribusi.

In the EXE (distribution) edition, these packages may not be pre-installed. If the Test Connection button returns a Package not installed error, run the commands above from the project source folder and rebuild the distribution.

Koneksi & Konfigurasi

Buka Studio → Ext DB, klik + Target Ekspor Baru, lalu isi formulir:

Open Studio → Ext DB, click + New Export Target, then fill in the form:

Field KeteranganDescription
Nama EksporExport Name Label deskriptif untuk target iniDescriptive label for this target
Tipe DatabaseDatabase Type MySQL atauor PostgreSQL
Host Alamat IP atau hostname server database eksternalIP address or hostname of the external database server
Port Default: 3306 (MySQL) atauor 5432 (PostgreSQL)
Nama DatabaseDatabase Name Nama database tujuan (harus sudah ada di server eksternal)Target database name (must already exist on the external server)
Username / Password Kredensial dengan hak INSERT pada database tujuanCredentials with INSERT rights on the target database
Nama TabelTable Name Tabel tempat data ditulis — default: tag_historyTable where data is written — default: tag_history

Klik Uji Koneksi untuk memverifikasi koneksi sebelum menyimpan.

Click Test Connection to verify the connection before saving.

Mode TriggerTrigger Mode

Mode PerilakuBehavior
Interval Menulis snapshot semua tag yang dikonfigurasi setiap N milidetik. Atur nilai Interval (ms) — minimum yang disarankan: 1000 ms.Writes a snapshot of all configured tags every N milliseconds. Set the Interval (ms) value — recommended minimum: 1000 ms.
Saat BerubahOn Change Menulis baris saat tag berubah. Ada dua sub-mode tergantung pengaturan Tag Trigger — lihat tabel di bawah.Writes a row when a tag changes. Two sub-modes depending on the Tag Trigger setting — see table below.

Saat Berubah — Sub-mode Tag TriggerOn Change — Tag Trigger Sub-modes

Pengaturan Tag TriggerTag Trigger Setting PerilakuBehavior
Tidak dipilihNot selected Menulis baris per tag — setiap tag ekspor menulis baris sendiri saat nilainya berubah.Writes a row per tag — each export tag writes its own row when its value changes.
Tag dipilihTag selected Menulis snapshot semua tag ekspor aktif setiap kali tag trigger memenuhi kondisi yang ditentukan.Writes a snapshot of all active export tags whenever the trigger tag meets the specified condition.

Saat tag trigger dipilih, dua field tambahan muncul:

When a tag trigger is selected, two additional fields appear:

Field PilihanOptions
KondisiCondition berubahchanged (setiap perubahan nilaiany value change), >, >=, <, <=, ==, !=
NilaiValue Threshold perbandingan — tersembunyi saat kondisi berubahComparison threshold — hidden when condition is changed
💡

Contoh: Ekspor semua tag proses setiap kali status_mesin berubah menjadi lebih dari 0 (mesin aktif) — pilih status_mesin sebagai Tag Trigger, kondisi >, nilai 0.

Example: Export all process tags every time machine_status changes to above 0 (machine active) — select machine_status as Tag Trigger, condition >, value 0.

Tag yang DieksporExported Tags

Di bagian Tag yang Diekspor, kelola tag yang akan diteruskan ke database eksternal:

In the Exported Tags section, manage the tags to be forwarded to the external database:

  • + Tambah tag — pilih tag dari dropdown
  • ▴ / ▾ — ubah urutan tag dalam daftar
  • ● / ○ — aktifkan atau nonaktifkan tag tanpa menghapusnya
  • × — hapus tag dari daftar
  • + Add tag — select a tag from the dropdown
  • ▴ / ▾ — change tag order in the list
  • ● / ○ — enable or disable a tag without deleting it
  • × — remove tag from the list
ℹ️

Tag yang dinonaktifkan (○) tetap tersimpan dalam konfigurasi tetapi tidak ditulis ke database eksternal. Berguna untuk menghentikan sementara pengiriman tag tertentu tanpa kehilangan konfigurasi.

Disabled tags (○) remain in the configuration but are not written to the external database. Useful for temporarily stopping delivery of specific tags without losing the configuration.

Schema Tabel yang Dibuat OtomatisAuto-Created Table Schema

AliScada membuat tabel di database eksternal secara otomatis jika belum ada:

AliScada automatically creates the table in the external database if it does not yet exist:

-- MySQL
CREATE TABLE IF NOT EXISTS `tag_history` (
  id        BIGINT AUTO_INCREMENT PRIMARY KEY,
  ts        BIGINT       NOT NULL,   -- Unix timestamp (milidetik)
  tag_name  VARCHAR(255) NOT NULL,
  value     DOUBLE,
  quality   TINYINT      DEFAULT 1,  -- 1 = good
  INDEX idx_tag_ts (tag_name, ts)
)

-- PostgreSQL
CREATE TABLE IF NOT EXISTS "tag_history" (
  id       BIGSERIAL PRIMARY KEY,
  ts       BIGINT       NOT NULL,
  tag_name VARCHAR(255) NOT NULL,
  value    DOUBLE PRECISION,
  quality  SMALLINT     DEFAULT 1
)

Untuk mengonversi kolom ts ke format waktu yang terbaca:

To convert the ts column to a readable time format:

  • MySQL: FROM_UNIXTIME(ts / 1000)
  • PostgreSQL: to_timestamp(ts / 1000.0)
💡

Jika koneksi ke database eksternal terputus, eksportir tidak akan mencoba ulang secara otomatis. Simpan ulang konfigurasi target (tanpa perlu mengubah nilai) untuk memicu reconnect.

If the connection to the external database is lost, the exporter will not automatically retry. Re-save the target configuration (without changing any values) to trigger a reconnect.


🔒

Akses Dashboard per User

Admin dapat membatasi dashboard yang bisa dibuka oleh setiap operator atau viewer, serta menentukan halaman yang langsung terbuka saat mereka login (home page).

Admin can restrict which dashboards each operator or viewer can access, and set the page that opens immediately when they log in (home page).

ℹ️

Admin dan Supervisor selalu memiliki akses ke semua dashboard — pembatasan hanya berlaku untuk role Operator dan Viewer.

Admin and Supervisor always have access to all dashboards — restrictions only apply to Operator and Viewer roles.

Cara Membatasi Akses Dashboard

  1. Buka Studio → Users → cari baris user yang ingin dibatasi.

    Open Studio → Users → find the user row you want to restrict.

  2. Klik tombol Set Access di kolom Dashboards.

    Click the Set Access button in the Dashboards column.

  3. Panel Dashboard Access terbuka menampilkan semua dashboard beserta checkbox.

    The Dashboard Access panel opens showing all dashboards with checkboxes.

  4. Centang dashboard yang boleh diakses oleh user ini. Dashboard yang tidak dicentang tidak bisa dibuka oleh user tersebut.

    Check the dashboards this user is allowed to access. Unchecked dashboards cannot be opened by that user.

  5. Klik Save Access.

    Click Save Access.

💡

Biarkan semua checkbox kosong untuk memberi akses ke semua dashboard (unrestricted). Banner di atas daftar menunjukkan status: ✓ Unrestricted atau ⚠ Restricted — N dashboard.

Leave all checkboxes empty to grant access to all dashboards (unrestricted). The banner above the list shows the status: ✓ Unrestricted or ⚠ Restricted — N dashboards.

Menentukan Home Page (Halaman Pembuka)

Saat mode Restricted, kolom Home page muncul di kanan setiap baris dashboard yang dicentang.

In Restricted mode, the Home page column appears to the right of each checked dashboard row.

  1. Centang minimal satu dashboard di panel Set Access.

    Check at least one dashboard in the Set Access panel.

  2. Klik ikon di kolom Home page pada baris dashboard yang dijadikan halaman pembuka. Ikon berubah menjadi .

    Click the icon in the Home page column on the dashboard row to set as the opening page. The icon changes to .

  3. Untuk mengosongkan, klik ★ kembali.

    To clear it, click ★ again.

  4. Jika dashboard yang dipilih sebagai home page diuncentang, pilihan ★ otomatis dihapus.

    If the dashboard selected as home page is unchecked, the ★ selection is automatically removed.

  5. Klik Save Access.

    Click Save Access.

Urutan Prioritas Halaman Pembuka

Prioritas Kondisi Dashboard yang dibuka
1 (tertinggi) User memiliki ★ home page kustom Dashboard yang ditandai ★ untuk user ini
2 Tidak ada ★, ada global default Dashboard yang diset Default di Studio → Dashboards (jika bisa diakses user)
3 (fallback) Tidak ada keduanya Dashboard pertama (ID terkecil) yang bisa diakses user

🌏

Antarmuka Dwibahasa (EN / ID)

AliScada v1.3 mendukung dua bahasa: English dan Indonesia. Toggle tersedia di header Runtime maupun Dev Studio.

AliScada v1.3 supports two languages: English and Indonesian. The toggle is available in both the Runtime and Dev Studio headers.

Cara Mengganti Bahasa

  1. Di header aplikasi (kanan atas), cari tombol kecil bertuliskan ID atau EN.

    In the application header (top right), find the small button labeled ID or EN.

  2. Klik untuk toggle:
    Tombol ID → klik → antarmuka beralih ke Bahasa Indonesia.
    Tombol EN → klik → antarmuka beralih ke English.

    Click to toggle:
    ID button → click → interface switches to Indonesian.
    EN button → click → interface switches to English.

  3. Pilihan bahasa tersimpan di browser (localStorage) — tidak perlu dipilih ulang setiap login.

    Language preference is saved in the browser (localStorage) — no need to reselect on every login.

💡

Bahasa default adalah English. Setiap browser bisa memiliki pengaturan bahasa berbeda — pilihan tidak tersimpan di server, sehingga berbeda user di PC berbeda bisa pakai bahasa berbeda.

The default language is English. Each browser can have different language settings — the preference is not stored on the server, so different users on different PCs can use different languages.

Cakupan Terjemahan

Area Yang DiterjemahkanWhat Is Translated
Runtime — NavigasiNavigation Dashboard, Trends, Datalog, Alarms, Import, Sign out, Studio, Live/Offline
Runtime — Alarm Banner Pesan alarm kritis di atas halamanCritical alarm message at top of page
Runtime — Footer Versi aplikasiApplication version
Studio — NavigasiNavigation Devices, Tags, Dashboards, Alarms, History, Status, Users, Project, Notifications, License, Dev Tools, ← Runtime
Studio — Studio Lock Banner Pesan lock dan tombol UnlockLock message and Unlock button
Studio — Notifications Semua label, judul tab, tombol, hint, panduan TelegramAll labels, tab titles, buttons, hints, Telegram guide
Label UmumCommon Labels Save, Cancel, Delete, Edit, Add, Enabled, Disabled, Loading, dan lainnyaand more

🗂️

Dashboard Overlay / Underlay

Dashboard bisa merender dashboard lain sebagai layer di atas atau di bawahnya — mirip konsep Underlay Window / Window Links. Cocok untuk menu navigasi atau header yang digunakan bersama oleh banyak dashboard.

A dashboard can render another dashboard as a layer above or below it — similar to the Underlay Window / Window Links concept. Suitable for navigation menus or headers shared across many dashboards.

Cara Mengaktifkan Overlay

  1. Buka Studio → Dashboards → klik dashboard yang ingin dikonfigurasi → masuk ke Dashboard Builder.

    Open Studio → Dashboards → click the dashboard to configure → enter the Dashboard Builder.

  2. Klik area kosong pada canvas (pastikan tidak ada widget yang terpilih). Panel kanan akan menampilkan Canvas & Overlay Settings.

    Click an empty area on the canvas (ensure no widget is selected). The right panel will show Canvas & Overlay Settings.

  3. Di bagian Overlay Window, pilih dashboard lain pada dropdown:
    ▲ Top Layer — dirender di atas semua widget dashboard utama.
    ◆ Middle Layer — dirender di atas widget biasa, di bawah widget dengan z-order sangat tinggi.
    ▼ Bottom Layer — dirender di bawah semua widget dashboard utama (underlay).

    In the Overlay Window section, select another dashboard from the dropdown:
    ▲ Top Layer — rendered above all main dashboard widgets.
    ◆ Middle Layer — rendered above normal widgets, below widgets with very high z-order.
    ▼ Bottom Layer — rendered below all main dashboard widgets (underlay).

  4. Opsional — atur Pos X / Y untuk menggeser seluruh layer overlay dari pojok kiri atas canvas. Default (0, 0) berarti overlay diposisikan persis di titik asal canvas.

    Optional — set Pos X / Y to shift the entire overlay layer from the top-left corner of the canvas. Default (0, 0) means the overlay is positioned exactly at the canvas origin.

  5. Klik Save Dashboard. Overlay akan muncul secara langsung di runtime.

    Click Save Dashboard. The overlay will appear immediately in runtime.

💡

Jika overlay dashboard memiliki background warna solid, atur background-nya ke transparent agar layer di bawahnya tetap terlihat. Buka dashboard overlay tersebut → canvas settings → Background → pilih transparan.

If the overlay dashboard has a solid color background, set its background to transparent so layers below remain visible. Open the overlay dashboard → canvas settings → Background → select transparent.

Start Position (Offset X / Y) per Layer

Setiap layer overlay dapat diposisikan secara independen menggunakan offset piksel dari sudut kiri atas canvas utama.

Each overlay layer can be positioned independently using pixel offsets from the top-left corner of the main canvas.

Field Default KeteranganDescription
Pos X 0 Geser seluruh layer ke kanan sebesar X piksel.Shift the entire layer to the right by X pixels.
Pos Y 0 Geser seluruh layer ke bawah sebesar Y piksel.Shift the entire layer down by Y pixels.

Contoh: Dashboard "top menu" berukuran 1280×100 ingin ditampilkan sebagai footer (posisi bawah canvas 1280×700). Set Bottom Layer → "top menu" → Pos X: 0, Pos Y: 600.

Example: A "top menu" dashboard sized 1280×100 should be displayed as a footer (bottom of 1280×700 canvas). Set Bottom Layer → "top menu" → Pos X: 0, Pos Y: 600.

Preview Overlay di Builder

Gunakan tombol 👁 View Overlay di panel Overlay Windows untuk menampilkan ghost preview semua layer yang dikonfigurasi langsung di atas canvas builder — tanpa meninggalkan editor.

Use the 👁 View Overlay button in the Overlay Windows panel to show a ghost preview of all configured layers directly on the builder canvas — without leaving the editor.

  • Ghost widget dari tiap layer tampil dengan dashed border berwarna: biru (Bottom), kuning (Middle), ungu (Top).
  • Label kecil di sudut (▼ Bottom / ◆ Middle / ▲ Top) menunjukkan layer masing-masing.
  • Ghost widget bersifat non-interaktif — drag/resize widget utama tetap berjalan normal.
  • Klik ✕ Hide Overlay untuk menutup preview.
  • Ghost widgets from each layer appear with a colored dashed border: blue (Bottom), yellow (Middle), purple (Top).
  • Small labels at the corner (▼ Bottom / ◆ Middle / ▲ Top) indicate each layer.
  • Ghost widgets are non-interactive — drag/resize of main widgets works normally.
  • Click ✕ Hide Overlay to close the preview.
💡

Setelah mengubah Pos X / Y, klik Hide Overlay → View Overlay kembali agar preview memuat ulang posisi terbaru.

After changing Pos X / Y, click Hide Overlay → View Overlay again to reload the preview with the latest position.

Use Case — Menu Navigasi Bersama

Buat satu dashboard khusus berisi widget tombol navigasi (FKey Navigate). Jadikan dashboard tersebut sebagai Top Layer di semua dashboard lain. Jika menu berubah, cukup edit satu dashboard overlay — semua dashboard lain otomatis mengikuti perubahan.

Create a dedicated dashboard containing navigation button widgets (FKey Navigate). Set that dashboard as the Top Layer in all other dashboards. If the menu changes, just edit the one overlay dashboard — all other dashboards automatically follow the change.

Batasan

BatasanLimitation KeteranganDescription
Referensi sirkularCircular reference Dashboard A tidak bisa overlay dirinya sendiri. Guard otomatis mencegah hal ini.Dashboard A cannot overlay itself. An automatic guard prevents this.
Overlay berantaiChained overlays Widget overlay tidak ikut membawa overlay-nya sendiri (hanya satu level overlay yang dirender).Overlay widgets do not bring along their own overlays (only one level of overlay is rendered).
Mobile portrait Saat perangkat mobile dalam orientasi portrait, canvas (termasuk overlay) tidak dirender — hanya pesan "Rotate Device" yang tampil.When a mobile device is in portrait orientation, the canvas (including overlay) is not rendered — only the "Rotate Device" message is shown.

🔷

Widget Shape (Bentuk)

Widget shape memungkinkan pembuatan elemen visual dekoratif atau penanda area di dashboard — mulai dari persegi panjang, ellipse, hingga garis, busur, poligon, dan jalur bebas (polyline). Semua shape dirender sebagai SVG sehingga tajam di semua resolusi. Shape tidak membutuhkan tag; propertinya dikonfigurasi seluruhnya di panel Properties.

Shape widgets allow creating decorative visual elements or area markers on dashboards — from rectangles and ellipses to lines, arcs, polygons, and freeform paths (polylines). All shapes are rendered as SVG so they are sharp at all resolutions. Shapes do not require tags; all properties are configured in the Properties panel.

Tipe Shape yang Tersedia

Tipe Ikon PalettePalette Icon KeteranganDescription
Rect 🔲 Persegi panjang solid. Mendukung Fill, Border, Label.Solid rectangle. Supports Fill, Border, Label.
Rounded Rect Persegi panjang dengan sudut melengkung. Property tambahan: Corner Radius.Rectangle with rounded corners. Extra property: Corner Radius.
Ellipse Ellipse atau lingkaran (jika lebar = tinggi). Mendukung Fill, Border, Label.Ellipse or circle (if width = height). Supports Fill, Border, Label.
Line Garis lurus dari titik A ke titik B. Posisi titik ditentukan sebagai persentase (%) ukuran widget. Mendukung Line Style (Solid / Dashed / Dotted).Straight line from point A to point B. Point positions defined as percentage (%) of widget size. Supports Line Style (Solid / Dashed / Dotted).
Arbitrary Line Polyline (jalur multi-titik) yang bisa ditutup menjadi poligon terisi. Titik diedit secara visual menggunakan mouse di editor mini (lihat bawah).Polyline (multi-point path) that can be closed to form a filled polygon. Points are edited visually using the mouse in the mini editor (see below).
Arc Busur lingkaran (bagian tepi ellipse). Ditentukan oleh Start Angle dan End Angle dalam derajat. Hanya garis tepi, tidak ada isian.Circular arc (edge of an ellipse). Defined by Start Angle and End Angle in degrees. Edge only, no fill.
Pie Irisan lingkaran (pie slice) dari pusat ke busur. Mendukung Fill dan Border.Circular slice (pie slice) from center to arc. Supports Fill and Border.
Polygon Poligon beraturan (segitiga, segi-4, segi-5, segi-6, …). Property: Sides dan Rotation.Regular polygon (triangle, square, pentagon, hexagon, …). Properties: Sides and Rotation.

Cara Menambahkan Shape

  1. Buka Dashboard Builder → klik + Add Widget.

    Open Dashboard Builder → click + Add Widget.

  2. Di bagian Shape pada palette, klik tipe shape yang diinginkan (Rect, Rounded Rect, Ellipse, Line, Arbitrary Line, Arc, Pie, atau Polygon).

    In the Shape section of the palette, click the desired shape type (Rect, Rounded Rect, Ellipse, Line, Arbitrary Line, Arc, Pie, or Polygon).

  3. Widget muncul di canvas. Drag untuk memindahkan, tarik handle pojok/tepi untuk mengubah ukuran.

    The widget appears on the canvas. Drag to move, pull corner/edge handles to resize.

  4. Klik widget untuk membuka panel Properties di kanan → atur warna, garis, dan properti spesifik tipe yang dipilih.

    Click the widget to open the Properties panel on the right → set colors, lines, and type-specific properties.

Properti Umum (Semua Tipe)

Property KeteranganDescription
Fill Color Warna isi bentuk (tidak berlaku untuk Line dan Arc).Shape fill color (not applicable for Line and Arc).
Fill Opacity Transparansi isi — slider 0–100%. 0 = transparan, 100 = solid.Fill transparency — slider 0–100%. 0 = transparent, 100 = solid.
Border Color Warna garis tepi (atau warna garis untuk Line / Arbitrary Line / Arc).Border color (or line color for Line / Arbitrary Line / Arc).
Border Width Ketebalan garis tepi dalam piksel. 0 = tidak ada border.Border thickness in pixels. 0 = no border.
Label Teks yang ditampilkan di tengah shape (tidak berlaku untuk Line).
Label Teks yang ditampilkan di tengah shape (tidak berlaku untuk Line).Text displayed at the center of the shape (not applicable for Line).
Text Color Warna teks label.Label text color.
Font Size Ukuran font label dalam piksel.Label font size in pixels.
Font Family Jenis font label.Label font family.

Properti Spesifik per Tipe

TipeType Property TambahanAdditional Properties KeteranganDescription
Rounded Rect Corner Radius Radius sudut melengkung dalam piksel.Rounded corner radius in pixels.
Line X1 (%) Posisi horizontal titik awal garis, sebagai % lebar widget (0 = kiri, 100 = kanan).Horizontal position of line start point, as % of widget width (0 = left, 100 = right).
Y1 (%) Posisi vertikal titik awal, sebagai % tinggi widget.Vertical position of start point, as % of widget height.
X2 (%) Posisi horizontal titik akhir garis.Horizontal position of line end point.
Y2 (%) Posisi vertikal titik akhir garis.Vertical position of end point.
Line Style Solidgaris penuhfull line. Dashedputus-putusdashed. Dottedtitik-titikdotted.
Arbitrary Line Points Daftar titik dalam format x,y dipisah spasi (koordinat pixel relatif ke widget). Diedit via mouse editor visual (lihat bawah).List of points in x,y format separated by spaces (pixel coordinates relative to widget). Edited via visual mouse editor (see below).
Line Style Solid / Dashed / Dotted, sama seperti Line.Solid / Dashed / Dotted, same as Line.
Close path Jika diaktifkan, jalur ditutup (titik akhir terhubung ke titik awal) dan dirender sebagai poligon terisi.If enabled, the path is closed (last point connects to first) and rendered as a filled polygon.
Arc Start Angle (°) Sudut awal busur dalam derajat. 0° = kanan (jam 3), 90° = bawah, 180° = kiri, 270° = atas.Arc start angle in degrees. 0° = right (3 o'clock), 90° = bottom, 180° = left, 270° = top.
End Angle (°) Sudut akhir busur. Busur digambar searah jarum jam dari Start ke End.Arc end angle. Arc is drawn clockwise from Start to End.
Pie Start Angle (°) Sudut awal irisan dari pusat.Slice start angle from center.
End Angle (°) Sudut akhir irisan dari pusat.Slice end angle from center.
Polygon Sides Jumlah sisi poligon. 3 = segitiga, 4 = persegi, 5 = segi-5, 6 = heksagon, dst.Number of polygon sides. 3 = triangle, 4 = square, 5 = pentagon, 6 = hexagon, etc.
Rotation (°) Rotasi poligon dalam derajat. Default 0° menempatkan titik pertama di atas (jam 12).Polygon rotation in degrees. Default 0° places the first point at the top (12 o'clock).

Editor Visual Titik — Arbitrary Line

Untuk tipe Arbitrary Line, panel Properties menampilkan editor mini berukuran 220×140 px yang merepresentasikan area widget secara proporsional. Editor ini memungkinkan pengeditan titik-titik polyline secara visual menggunakan mouse:

For the Arbitrary Line type, the Properties panel shows a 220×140 px mini editor that represents the widget area proportionally. This editor allows visual editing of polyline points using the mouse:

Aksi MouseMouse Action EfekEffect
Klik di area kosongClick on empty area Tambah titik baru di posisi tersebut.Add a new point at that position.
Drag titikDrag point Pindahkan titik ke posisi baru.Move the point to a new position.
Double-klik titikDouble-click point Hapus titik tersebut.Delete that point.

Editor menampilkan garis pratinjau berwarna sesuai Border Color yang dipilih, beserta nomor urut setiap titik (dimulai dari 0). Titik pertama berwarna hijau, titik lainnya berwarna biru. Tombol Clear all menghapus semua titik sekaligus.

The editor shows a preview line colored according to the selected Border Color, along with the sequential number of each point (starting from 0). The first point is green, others are blue. The Clear all button removes all points at once.

💡

Aktifkan Close path untuk mengubah polyline menjadi poligon terisi (bentuk bebas dengan isian warna). Koordinat titik disimpan sebagai pixel relatif terhadap sudut kiri-atas widget, sehingga ukuran widget mempengaruhi tampilan keseluruhan jalur.

Enable Close path to convert the polyline into a filled polygon (free-form shape with color fill). Point coordinates are stored as pixels relative to the widget's top-left corner, so widget size affects the overall path appearance.

Tips Penggunaan

💡

Gunakan Fill Opacity rendah (mis. 10–20%) dan Border Width 1–2 px untuk efek "bingkai transparan" yang tidak menutupi widget di belakangnya. Atur z-order widget shape ke posisi paling bawah via tombol ↓ Back di panel Properties.

Use a low Fill Opacity (e.g. 10–20%) and Border Width 1–2 px for a "transparent frame" effect that does not cover widgets behind it. Set the shape widget z-order to the bottommost position via the ↓ Back button in the Properties panel.

💡

Untuk membuat panah atau anotasi jalur pipa, gunakan Line atau Arbitrary Line dengan Border Width 2–4 px dan Line Style Solid. Tumpuk dengan widget Value atau Label di atasnya untuk keterangan proses.

To create arrows or pipe path annotations, use Line or Arbitrary Line with Border Width 2–4 px and Solid Line Style. Layer a Value or Label widget on top for process annotations.

💡

Arc berguna untuk menampilkan gauge partial — misalnya 0°–270° untuk gauge tiga perempat lingkaran. Kombinasikan dengan widget Value di tengahnya untuk tampilan meter yang menarik.

Arc is useful for displaying partial gauges — for example 0°–270° for a three-quarter circle gauge. Combine with a Value widget at its center for an attractive meter appearance.


📦

MessagePack — Payload MQTT

AliScada mendukung payload MQTT berformat MessagePack — format serialisasi binary yang lebih kompak dari JSON, populer di embedded systems dan IoT devices. Tersedia dalam tiga varian encoding.

AliScada supports MQTT payloads in MessagePack format — a binary serialization format more compact than JSON, popular in embedded systems and IoT devices. Available in three encoding variants.

Tiga Tipe Payload MessagePack

Payload Type Format pesan MQTTMQTT message format Kapan digunakanWhen to use
msgpack Binary mentah (bytes)Raw binary (bytes) Device yang mengirim msgpack binary langsung via MQTT (paling efisien)Device that sends msgpack binary directly via MQTT (most efficient)
msgpack_base64 String base64Base64 string Broker atau middleware yang mengonversi binary ke base64 sebelum publishBroker or middleware that converts binary to base64 before publishing
msgpack_hex String hexHex string Debug / perangkat yang hanya bisa kirim hex stringDebug / device that can only send hex strings

Konfigurasi di Tag Editor

  1. Buka Studio → Tags → pilih tag MQTT → klik Edit.

    Open Studio → Tags → select the MQTT tag → click Edit.

  2. Di dropdown Payload Type, pilih salah satu: MessagePack, MessagePack (Base64), atau MessagePack (Hex).

    In the Payload Type dropdown, select one of: MessagePack, MessagePack (Base64), or MessagePack (Hex).

  3. Opsional — jika payload berisi object/map, isi Field Path dengan dot notation untuk mengekstrak field yang diinginkan.
    Contoh: payload msgpack = {"sensors": {"temp": 23.5}} → Field Path = sensors.temp.
    Biarkan kosong jika payload langsung berupa angka/boolean tunggal.

    Optional — if the payload contains an object/map, fill in Field Path with dot notation to extract the desired field.
    Example: msgpack payload = {"sensors": {"temp": 23.5}} → Field Path = sensors.temp.
    Leave empty if the payload is a single number/boolean.

  4. Klik Save.

    Click Save.

ℹ️

AliScada menggunakan implementasi MessagePack inline tanpa dependency npm tambahan. Tidak perlu install package apapun — fitur ini langsung tersedia setelah update.

AliScada uses a MessagePack implementation inline without additional npm dependencies. No package installation needed — this feature is available immediately after updating.

Contoh — ESP32 dengan ArduinoJson + MessagePack

Arduino / ESP32 (C++)
// Kirim payload msgpack binary ke MQTT
#include <ArduinoJson.h>

JsonDocument doc;
doc["temp"] = 23.5f;
doc["hum"]  = 65;

uint8_t buf[64];
size_t len = serializeMsgPack(doc, buf, sizeof(buf));
mqttClient.publish("sensors/data", buf, len, false, 0);

Di AliScada: Payload Type = MessagePack, Field Path = temp (untuk tag temperatur) atau hum (untuk tag kelembaban).

In AliScada: Payload Type = MessagePack, Field Path = temp (for temperature tag) or hum (for humidity tag).


🛡️

Maintenance & Backup

Panduan ini khusus untuk admin AliScada — mencakup pengelolaan backup otomatis, konfigurasi histori yang optimal untuk skala besar, dan checklist perawatan rutin agar sistem tetap stabil.

This guide is for AliScada admins — covering automatic backup management, optimal history configuration for large-scale deployments, and routine maintenance checklists to keep the system stable.

Auto Backup

AliScada v1.4 menyertakan layanan backup otomatis terjadwal. Backup mencakup seluruh database termasuk data historis tag — berbeda dengan Project Export yang hanya menyimpan konfigurasi.

AliScada v1.4 includes a scheduled automatic backup service. Backup covers the entire database including tag historical data — unlike Project Export which only saves configuration.

FiturFeatureProject ExportAuto Backup
Konfigurasi (devices, tags, dashboard)Configuration (devices, tags, dashboard)
Data historian (tag_history)
Archive historian jangka panjangLong-term historian archive
Format fileFile formatJSON terenkripsiEncrypted JSONFile SQLite (.db)
Tujuan utamaPrimary purposeMigrasi / clone projectMigration / clone projectRecovery dari crash / disk corruptRecovery from crash / disk corruption
TriggerManual dari UIManual from UIOtomatis terjadwal + manualScheduled automatic + manual

Mengaktifkan Auto Backup via UIEnable Auto Backup via UI

Auto backup nonaktif secara default. Aktifkan melalui Dev Studio → History Settings (login sebagai admin):

Auto backup is disabled by default. Enable it via Dev Studio → History Settings (logged in as admin):

  1. Buka Dev Studio → History Settings.

    Open Dev Studio → History Settings.

  2. Scroll ke bagian "Auto Backup" (bagian paling bawah halaman).

    Scroll to the "Auto Backup" section (at the bottom of the page).

  3. Klik toggle Enabled hingga berubah menjadi biru.

    Click the Enabled toggle until it turns blue.

  4. Atur Backup Interval (jam) dan Max Backups to Keep sesuai kebutuhan.

    Set the Backup Interval (hours) and Max Backups to Keep as needed.

  5. Klik "Save Backup Settings".

    Click "Save Backup Settings".

  6. Opsional: klik "▶ Backup Now" untuk langsung membuat backup pertama tanpa menunggu jadwal otomatis.

    Optional: click "▶ Backup Now" to immediately create the first backup without waiting for the automatic schedule.

ℹ️

Untuk melihat status backup terakhir dan daftar file yang tersedia, lihat bagian "Backup Files" di halaman yang sama. Klik Refresh jika daftar belum diperbarui setelah backup selesai.

To view the last backup status and list of available files, see the "Backup Files" section on the same page. Click Refresh if the list has not updated after a backup completes.

Alternatif: via API (curl)
# Aktifkan backup setiap 12 jam, simpan 14 copy terakhir
curl -X POST http://localhost:3000/api/system/backup/config \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"enabled": true, "intervalHours": 12, "maxBackups": 14}'

# Trigger backup sekarang (tanpa menunggu jadwal)
curl -X POST http://localhost:3000/api/system/backup/run \
  -H "Authorization: Bearer <token>"

# Lihat status, konfigurasi, dan daftar file backup
curl http://localhost:3000/api/system/backup/status \
  -H "Authorization: Bearer <token>"

Parameter BackupBackup Parameters

ParameterDefaultRekomendasi ProduksiProduction RecommendationKeteranganDescription
enabledfalsetrueWajib diaktifkan di environment produksiMust be enabled in production environment
intervalHours246–12Backup 2–4× sehari untuk keamanan optimalBackup 2–4× per day for optimal security
maxBackups714Simpan 7 hari × 2 file (scada + archive)Keep 7 days × 2 files (scada + archive)

Lokasi File BackupBackup File Location

data/
├── scada.db                        ← database aktif← active database
├── history_archive.db            ← archive historis← historical archive
└── backups/
    ├── scada_20260514_020000.db
    ├── history_archive_20260514_020000.db
    ├── scada_20260513_020000.db
    └── history_archive_20260513_020000.db
⚠️

Folder data/backups/ tetap berada di disk yang sama dengan database aktif. Untuk proteksi maksimal, salin folder data/backups/ secara berkala ke media eksternal (NAS, USB, cloud storage). Backup di disk yang sama tidak melindungi dari kerusakan hardware.

The data/backups/ folder remains on the same disk as the active database. For maximum protection, periodically copy the data/backups/ folder to external media (NAS, USB, cloud storage). Backup on the same disk does not protect against hardware failure.

Download File BackupDownload Backup Files

Setiap file backup dapat diunduh langsung dari browser untuk disimpan di media eksternal (NAS, USB, cloud). Fitur ini tersedia di dua tempat:

Each backup file can be downloaded directly from the browser to save on external media (NAS, USB, cloud). This feature is available in two places:

  • Database Files (Section 3) — tombol Download untuk mengunduh scada.db dan history_archive.db yang sedang aktif. Database akan di-flush ke disk terlebih dahulu agar file yang diunduh selalu dalam kondisi terbaru.
  • Backup Files (Section 4) — tombol Download di setiap baris untuk mengunduh salinan backup yang sudah ada di folder data/backups/.
  • Database Files (Section 3) — Download button to download the active scada.db and history_archive.db. The database is flushed to disk first to ensure the downloaded file is always the latest state.
  • Backup Files (Section 4) — Download button on each row to download backup copies already in the data/backups/ folder.

Cara Restore dari Backup via UI (Hot-Restore)How to Restore from Backup via UI (Hot-Restore)

AliScada v1.4 mendukung hot-restore — mengganti database aktif tanpa perlu menghentikan server. Server akan reload otomatis dengan downtime ~5–10 detik.

AliScada v1.4 supports hot-restore — replacing the active database without stopping the server. The server reloads automatically with ~5–10 seconds of downtime.

  1. Buka Dev Studio → History Settings → Auto Backup.

    Open Dev Studio → History Settings → Auto Backup.

  2. Di tabel "Backup Files", temukan file scada_YYYYMMDD_HHMMSS.db yang ingin di-restore.

    In the "Backup Files" table, find the scada_YYYYMMDD_HHMMSS.db file to restore.

  3. Klik tombol Restore di baris tersebut. Dialog konfirmasi akan muncul.

    Click the Restore button on that row. A confirmation dialog will appear.

  4. Baca peringatan dengan seksama. Ketik RESTORE (huruf kapital semua) di kolom konfirmasi untuk mengaktifkan tombol.

    Read the warning carefully. Type RESTORE (all caps) in the confirmation field to activate the button.

  5. Klik "Restore Database". Sistem akan mengganti database aktif dan me-reload semua layanan. Halaman akan refresh otomatis setelah selesai.

    Click "Restore Database". The system will replace the active database and reload all services. The page will refresh automatically when done.

🔴

Restore menghapus semua data setelah waktu backup.
Operasi ini mengganti seluruh isi database — konfigurasi (devices, tags, dashboards) maupun data historian. Data yang masuk antara waktu backup dan waktu restore tidak dapat dipulihkan.

Restore deletes all data after the backup time.
This operation replaces the entire database contents — configuration (devices, tags, dashboards) and historian data. Data that entered between the backup time and restore time cannot be recovered.

Alternatif: restore manual (jika server tidak dapat diakses via browser)Alternative: manual restore (if server cannot be accessed via browser)
  1. Hentikan server AliScada (stop.bat / systemctl stop aliscada).

    Stop the AliScada server (stop.bat / systemctl stop aliscada).

  2. Salin file backup yang diinginkan ke lokasi database aktif:

    Copy the desired backup file to the active database location:

    # Contoh restore pada Linux# Example restore on Linux
    cp data/backups/scada_20260514_020000.db data/scada.db
    cp data/backups/history_archive_20260514_020000.db data/history_archive.db
  3. Jalankan kembali server AliScada.

    Start the AliScada server again.

  4. Verifikasi semua device terkoneksi dan data historis tampil normal.

    Verify all devices are connected and historical data displays normally.

Konfigurasi History untuk Skala BesarHistory Configuration for Large Scale

Dengan jumlah tag yang besar (>500 tag), pengaturan history berpengaruh langsung pada ukuran database dan performa sistem. Semua parameter disimpan di config.json dan dapat diubah melalui menu System → History Settings.

With a large number of tags (>500 tags), history settings directly affect database size and system performance. All parameters are stored in config.json and can be changed via the System → History Settings menu.

ParameterDefault<500 Tag500–1000 Tag>1000 Tag
heartbeatSecs30 detik30 sec 30 detik30 sec60 detik60 sec300 detik300 sec
flushSecs5 detik5 sec 5 detik5 sec10 detik10 sec10–30 detik10–30 sec
retentionDays30 hari30 days 30 hari30 days7 hari7 days1–3 hari1–3 days
archiveRetentionDays365 hari365 days 365 hari365 days180 hari180 days90–180 hari90–180 days

Penjelasan parameter:

Parameter explanation:

  • heartbeatSecs — interval penulisan ulang nilai tag yang tidak berubah. Nilai besar = baris lebih sedikit ditulis per jam.
  • flushSecs — seberapa sering data di-commit ke SQLite. Nilai besar = transaksi lebih jarang tapi lebih besar.
  • retentionDays — berapa hari data live disimpan di scada.db. Data lebih lama dipindah ke archive. Kritis untuk ukuran database.
  • archiveRetentionDays — berapa hari data archive disimpan sebelum dihapus permanen.
  • heartbeatSecs — interval for rewriting tag values that have not changed. Larger value = fewer rows written per hour.
  • flushSecs — how often data is committed to SQLite. Larger value = less frequent but larger transactions.
  • retentionDays — how many days live data is kept in scada.db. Older data moves to archive. Critical for database size.
  • archiveRetentionDays — how many days archive data is kept before permanent deletion.
⚠️

Default retentionDays: 30 tidak cocok untuk >1000 tag. Dengan 1000 tag aktif dan retention 30 hari, database scada.db dapat mencapai puluhan GB dan menyebabkan sistem melambat parah. Sesuaikan ke 1–3 hari untuk skala besar, andalkan archiveRetentionDays untuk penyimpanan jangka panjang.

Default retentionDays: 30 is not suitable for >1000 tags. With 1000 active tags and 30-day retention, scada.db can reach tens of GB and cause severe system slowdown. Adjust to 1–3 days for large scale, rely on archiveRetentionDays for long-term storage.

Estimasi Ukuran DatabaseDatabase Size Estimate

Jumlah TagTag CountheartbeatSecsretentionDaysEstimasi scada.dbEstimated scada.dbStatus
200 tag30 detik30 sec30 hari30 days~200 MBAmanSafe
500 tag30 detik30 sec30 hari30 days~500 MBPerhatikanWatch
1000 tag30 detik30 sec30 hari30 days~1–2 GBBerbahayaDangerous
1000 tag300 detik300 sec3 hari3 days~150–300 MBAmanSafe
2000 tag300 detik300 sec1 hari1 day~500 MB–1 GBMonitor terusMonitor continuously

Checklist Maintenance RutinRoutine Maintenance Checklist

📅 HarianDaily

  • Cek System → Logs — tidak ada ERROR berulang di level critical.
  • Cek Dev Studio → Devices — semua device yang seharusnya online menampilkan status Connected.
  • Pantau memori server via System → Status — nilai RSS tidak boleh terus naik setiap hari (indikasi memory leak).
  • Check System → Logs — no repeated ERROR at critical level.
  • Check Dev Studio → Devices — all devices that should be online show Connected status.
  • Monitor server memory via System → Status — RSS value should not keep rising every day (memory leak indicator).

📆 MingguanWeekly

  • Verifikasi autobackup berjalan — buka Dev Studio → History Settings → Auto Backup, cek kolom "Last backup" menunjukkan waktu terbaru.
  • Cek ukuran file data/scada.db — jika >500 MB pertimbangkan kurangi retentionDays.
  • Cek folder data/backups/ — pastikan rotasi berjalan dan jumlah file sesuai maxBackups.
  • Salin backup terbaru ke media eksternal (NAS/USB/cloud).
  • Review Audit Log — cek aksi tidak biasa (login gagal berulang, perubahan konfigurasi di luar jam kerja).
  • Verify autobackup is running — open Dev Studio → History Settings → Auto Backup, check that the "Last backup" column shows a recent time.
  • Check data/scada.db file size — if >500 MB consider reducing retentionDays.
  • Check the data/backups/ folder — ensure rotation is working and file count matches maxBackups.
  • Copy the latest backup to external media (NAS/USB/cloud).
  • Review Audit Log — check for unusual actions (repeated login failures, configuration changes outside business hours).

🗓️ BulananMonthly

  • Cek ukuran data/history_archive.db — jika >5 GB pertimbangkan kurangi archiveRetentionDays.
  • Test restore backup — restore file backup ke environment test untuk memverifikasi backup valid dan dapat dipulihkan.
  • Cek sisa disk space server — historian tumbuh terus, pastikan disk tidak penuh (>20% free).
  • Review tag yang disabled tapi masih terdaftar — hapus jika tidak diperlukan untuk menjaga database tetap bersih.
  • Check data/history_archive.db size — if >5 GB consider reducing archiveRetentionDays.
  • Test backup restore — restore a backup file to a test environment to verify the backup is valid and recoverable.
  • Check server disk space — the historian keeps growing, ensure the disk is not full (>20% free).
  • Review disabled tags that are still registered — delete if no longer needed to keep the database clean.

🔄 Setiap Upgrade AliScadaEvery AliScada Upgrade

  1. Lakukan backup manual sebelum upgrade dimulai — klik "▶ Backup Now" di Dev Studio → History Settings → Auto Backup.

    Perform a manual backup before starting the upgrade — click "▶ Backup Now" in Dev Studio → History Settings → Auto Backup.

  2. Lakukan juga Project Export dari UI (sebagai backup konfigurasi terpisah).

    Also perform a Project Export from the UI (as a separate configuration backup).

  3. Simpan kedua file tersebut di luar server sebelum melanjutkan upgrade.

    Save both files off the server before proceeding with the upgrade.

  4. Setelah upgrade, verifikasi semua device reconnect dalam 60 detik pertama dan periksa System Logs untuk error.

    After the upgrade, verify all devices reconnect within the first 60 seconds and check System Logs for errors.

Peringatan Penting untuk AdminImportant Warnings for Admin

🔴

Database disimpan di RAM — risiko kehilangan data saat power failure.
AliScada menggunakan arsitektur database in-memory: seluruh scada.db hidup di RAM dan ditulis ke disk setiap beberapa ratus milidetik. Jika proses Node.js mati mendadak (power off, OOM kill, force kill), data dalam jendela waktu tersebut bisa hilang. Mitigasi: gunakan UPS pada server produksi dan aktifkan autobackup dengan interval pendek (6 jam).

🔴

Database besar = sistem lambat.
Setiap kali ada penulisan ke database, AliScada mengekspor seluruh database ke disk secara synchronous. Jika scada.db terlalu besar (karena retention terlalu panjang dengan banyak tag), operasi ini bisa memakan waktu beberapa detik dan membuat UI terasa freeze. Selalu atur retentionDays sesuai rekomendasi tabel di atas.

⚠️

OPC UA Server membutuhkan RAM ekstra.
Jika menggunakan protokol OPC UA Server dengan banyak tag (>1000 tag), layanan node-opcua membutuhkan sekitar 100–200 MB RAM tambahan untuk address space. Pastikan server memiliki RAM ≥ 4 GB jika menggunakan kombinasi OPC UA Server + 1000+ tag.

⚠️

Konfigurasi disimpan ulang → semua koneksi perangkat terputus sementara.
Setiap kali admin menyimpan perubahan device atau tag di Dev Studio, scheduler melakukan reload dan semua koneksi (Modbus, MQTT, OPC UA, dll.) terputus sesaat lalu reconnect otomatis dalam 1–10 detik. Hindari menyimpan konfigurasi saat proses kritis sedang berjalan.

⚠️

OID SNMP Agent tidak persisten antar restart.
Nomor indeks OID pada SNMP Agent (angka N di enterpriseOid.1.kolom.N) bersifat sequential dan stabil selama satu sesi, namun reset ke 1 setiap kali AliScada restart. Jika SNMP manager eksternal (PRTG, Zabbix) menyimpan mapping OID, lakukan re-discovery setelah server restart. Gunakan kolom tagName (OID .1.1.N) sebagai identifier permanen, bukan nomor indeks.

ℹ️

Disk space adalah tanggung jawab admin.
AliScada tidak menghentikan penulisan historian secara otomatis saat disk penuh — hal ini dapat menyebabkan kegagalan tulis database. Pantau sisa disk secara berkala dan pastikan selalu tersedia ruang bebas minimal 20% atau 10 GB (pilih yang lebih besar).


🔧

Troubleshooting

Browser tidak bisa membuka AliScada

Tunggu 10–15 detik setelah start, kemudian refresh. Jika masih gagal, cek status server:

# Linux — cek apakah service berjalan
sudo systemctl status aliscada

# Lihat log error
sudo journalctl -u aliscada -n 50 --no-pager

Port sudah digunakan (EADDRINUSE)

Port 3000 atau 1883 sudah dipakai aplikasi lain. Cari proses yang memakai port tersebut:

# Linux
sudo lsof -i :3000
sudo lsof -i :1883

# Windows (CMD)
netstat -ano | findstr :3000

Edit config.json → ganti port ke nilai lain (mis. 3001) → restart.

Permission denied saat jalankan AliScada (Linux)

sudo chmod +x /opt/aliscada/AliScada \
              /opt/aliscada/start.sh \
              /opt/aliscada/stop.sh

Raspberry Pi — "Exec format error"

Binary yang digunakan tidak sesuai arsitektur. Cek arsitektur Pi:

The binary used does not match the architecture. Check Pi architecture:

uname -m
# aarch64 → gunakan file linux_arm64
# armv7l  → gunakan file linux_armv7

Server berhenti otomatis tiap 2 jamServer stops automatically every 2 hours

Ini adalah batasan Trial Mode. Server shutdown setelah 2 jam per sesi untuk melindungi lisensi. Restart server untuk melanjutkan, atau aktifkan lisensi penuh (Starter ke atas) untuk menghilangkan batas ini.

This is a Trial Mode limitation. The server shuts down after 2 hours per session to protect the license. Restart the server to continue, or activate a full license (Starter or above) to remove this limit.

Reset database

Peringatan: Langkah ini menghapus semua konfigurasi dan data history. Backup folder data\ terlebih dahulu.

Warning: This step deletes all configuration and history data. Back up the data\ folder first.

# Linux
sudo systemctl stop aliscada
sudo mv /opt/aliscada/data/scada.db /opt/aliscada/data/scada.db.bak
sudo systemctl start aliscada
# Database baru dibuat otomatis → akun: admin / admin123# New database created automatically → account: admin / admin123

Referensi CepatQuick Reference

MasalahProblem SolusiSolution
Browser tidak buka / page errorBrowser won't open / page error Tunggu 15 detik, refresh. Cek log server.Wait 15 seconds, refresh. Check server log.
Port sudah dipakaiPort already in use Ganti port di config.json, restart.Change port in config.json, restart.
Tidak bisa loginCannot log in Gunakan akun default (admin / admin123).Use the default account (admin / admin123).
Dashboard kosongDashboard is empty Buat dashboard di Studio → Dashboards → klik Set Default.Create a dashboard in Studio → Dashboards → click Set Default.
Tag tidak update / status BADTag not updating / BAD status Cek status device di Studio → Devices → Test Connection.Check device status in Studio → Devices → Test Connection.
MQTT status Error Cek alamat broker, port, username/password.Check broker address, port, username/password.
Server berhenti tiap 2 jamServer stops every 2 hours Aktifkan lisensi di Studio → License.Activate license in Studio → License.
Raspberry Pi — Exec format error Pastikan arsitektur file sesuai (uname -m).Ensure file architecture matches (uname -m).
Trend 7d/30d tidak ada dataTrend 7d/30d has no data Normal — arsip terbentuk setelah 30 hari pertama.Normal — archives form after the first 30 days.
Telegram — "Bad Request: chat not found" Kirim /start ke bot di Telegram terlebih dahulu, lalu test kembali.Send /start to the bot in Telegram first, then test again.
Email test gagal / authentication errorEmail test failed / authentication error Pastikan App Password digunakan (bukan password akun) jika Gmail 2FA aktif.Ensure App Password is used (not account password) if Gmail 2FA is active.
Notifikasi tidak terkirim padahal alarm aktifNotification not sent even though alarm is active Cek Min Severity dan Cooldown di Studio → Notifications. Mungkin masih dalam jeda cooldown.Check Min Severity and Cooldown in Studio → Notifications. May still be within cooldown period.
Operator tidak bisa buka dashboard tertentuOperator cannot open a specific dashboard Cek pengaturan Set Access di Studio → Users. Tambahkan dashboard ke daftar yang diizinkan.Check Set Access settings in Studio → Users. Add the dashboard to the allowed list.
Tombol USB Webcam disable di StudioUSB Webcam button disabled in Studio ffmpeg tidak ditemukan — taruh ffmpeg.exe di folder AliScada (Windows) atau sudo apt install ffmpeg (Linux). Lihat Setup ffmpeg.ffmpeg not found — place ffmpeg.exe in the AliScada folder (Windows) or run sudo apt install ffmpeg (Linux). See Setup ffmpeg.
Webcam tidak terdeteksi / "no device"Webcam not detected / "no device" Pastikan kamera terhubung. Di Windows jalankan ffmpeg -list_devices true -f dshow -i dummy di CMD untuk melihat output mentahnya.Ensure camera is connected. On Windows run ffmpeg -list_devices true -f dshow -i dummy in CMD to see raw output.
Snapshot webcam error / gambar kosongWebcam snapshot error / blank image Pilih ulang perangkat di Studio → Tags → tag RTSP. Di Linux pastikan user memiliki hak baca /dev/video*.Re-select device in Studio → Tags → RTSP tag. On Linux ensure the user has read access to /dev/video*.
Gambar webcam stuck / tidak refreshWebcam image stuck / not refreshing Pastikan AliScada versi ≥ v1.3 (perbaikan mtime tracking). Restart AliScada untuk mereset stream ffmpeg yang mungkin terkunci.Ensure AliScada version ≥ v1.3 (mtime tracking fix). Restart AliScada to reset the possibly locked ffmpeg stream.
IP Camera RTSP tidak tampil di dashboardIP Camera RTSP not showing on dashboard Pastikan ffmpeg terinstall (lihat Setup ffmpeg). Cek log server untuk error koneksi RTSP. Pastikan transport TCP/UDP sesuai konfigurasi kamera.Ensure ffmpeg is installed (see Setup ffmpeg). Check server log for RTSP connection errors. Ensure TCP/UDP transport matches camera configuration.
Overlay dashboard tidak munculOverlay dashboard not appearing Cek konfigurasi Overlay Window di canvas settings Dashboard Builder. Pastikan dashboard yang direferensi tidak dihapus. Refresh halaman runtime.Check Overlay Window configuration in Dashboard Builder canvas settings. Ensure the referenced dashboard has not been deleted. Refresh the runtime page.
Widget overlay muncul di atas "Rotate Device" (mobile)Overlay widget appears above "Rotate Device" (mobile) Pastikan AliScada versi ≥ v1.3 (perbaikan isolasi z-index). Update ke versi terbaru.Ensure AliScada version ≥ v1.3 (z-index isolation fix). Update to the latest version.
MQTT — payload msgpack tidak terbacaMQTT — msgpack payload not readable Pastikan Payload Type di tag sesuai: gunakan msgpack_base64 jika broker mengonversi ke base64, msgpack_hex jika hex string, atau msgpack untuk binary mentah.Ensure the tag's Payload Type matches: use msgpack_base64 if the broker converts to base64, msgpack_hex for hex string, or msgpack for raw binary.
Overlay Middle / Bottom layer tidak muncul di runtimeOverlay Middle / Bottom layer not showing in runtime Diperbaiki di v1.3 (z-index conflict dengan background canvas). Pastikan versi AliScada ≥ v1.3. Cek juga bahwa dashboard yang direferensi benar-benar ada dan tidak dihapus.Fixed in v1.3 (z-index conflict with background canvas). Ensure AliScada version ≥ v1.3. Also verify the referenced dashboard exists and has not been deleted.
Overlay dashboard muncul di posisi salah / tertimpa widget utamaOverlay dashboard appears in wrong position / overlaps main widgets Gunakan field Pos X / Y di Overlay Window settings (Studio → Dashboard Builder → canvas settings) untuk menggeser posisi awal overlay. Nilai dalam piksel relatif sudut kiri-atas canvas.Use the Pos X / Y fields in Overlay Window settings (Studio → Dashboard Builder → canvas settings) to offset the overlay start position. Values are in pixels relative to the top-left corner of the canvas.
IP Camera RTSP — autentikasi gagal (username/password salah)IP Camera RTSP — authentication failed (wrong username/password) Jangan sematkan kredensial di URL RTSP (rtsp://user:pass@…). Isi field Username dan Password secara terpisah di konfigurasi tag RTSP. AliScada menyuntikkan kredensial ke perintah ffmpeg secara aman.Do not embed credentials in the RTSP URL (rtsp://user:pass@…). Fill in the Username and Password fields separately in the RTSP tag configuration. AliScada injects credentials into the ffmpeg command securely.
Shape widget Arbitrary Line — titik tidak tersimpanShape widget Arbitrary Line — points not saved Pastikan klik Save Dashboard setelah mengedit titik di editor polyline. Titik disimpan dalam format x,y x,y di properti widget — perubahan hanya tersimpan saat dashboard di-save.Ensure you click Save Dashboard after editing points in the polyline editor. Points are stored in x,y x,y format in widget properties — changes are only saved when the dashboard is saved.

🗑️

Hapus InstalasiUninstall

Windows

  1. Jalankan stop.bat untuk menghentikan server.

    Run stop.bat to stop the server.

  2. Backup folder data\ jika ada data yang perlu disimpan.

    Back up the data\ folder if there is any data to keep.

  3. Hapus seluruh folder instalasi AliScada.

    Delete the entire AliScada installation folder.

Linux (dengan systemd)Linux (with systemd)

sudo systemctl stop    aliscada
sudo systemctl disable aliscada
sudo rm /etc/systemd/system/aliscada.service
sudo systemctl daemon-reload

# Backup data jika diperlukan# Back up data if needed
cp -r /opt/aliscada/data ~/aliscada-backup

# Hapus instalasi# Remove installation
sudo rm -rf /opt/aliscada