Apa itu Linux Appliance?

e-QSO ORARI Linux Appliance v4.1.5 adalah versi gateway yang berjalan di berbagai perangkat Linux — dari STB Android TV Box bekas hingga Raspberry Pi dan PC/Server.

💡 Keunggulan vs Windows:
  • ✅ Konsumsi daya ±5 Watt (vs 50-150W PC)
  • ✅ Hardware murah — STB bekas ±Rp 200-300rb
  • ✅ Headless — tanpa monitor, keyboard, atau mouse
  • ✅ Web UI real-time — update status <200ms via SSE
  • ✅ Mobile-friendly — kontrol dari smartphone
  • ✅ Auto-start dan auto-reconnect
  • ✅ Power Off / Reboot STB dari Web UI
✅ Platform yang Didukung:
PlatformDistroArsitekturStatus
STB B860H / HG680P Armbian (Debian/Ubuntu base) ARM64 ✅ Rekomendasi utama
Raspberry Pi 4 / 5 Raspberry Pi OS / Ubuntu Server ARM64 ✅ Didukung penuh
PC / Mini PC / Server Debian 12 / Ubuntu Server 22.04+ x86_64 ✅ Didukung penuh
Orange Pi / Banana Pi Armbian ARM64 ✅ Kompatibel

⚠️ Tidak mendukung Linux Desktop (Ubuntu Desktop, dll) karena konflik PulseAudio dengan ALSA. Gunakan versi Server/Headless.

1. Hardware yang Diperlukan

KomponenSpesifikasiKeterangan
STB / SBC B860H / Raspberry Pi 4 / PC Lihat tabel platform di atas
MicroSD / Storage 16GB+ Class 10 Untuk OS. PC bisa pakai HDD/SSD internal
USB Soundcard C-Media CM108 / HS-100B / PCM2902 Audio TX/RX ke radio. Cek: aplay -l
Arduino Nano CH340 atau FTDI Kontrol PTT dan baca sinyal COS dari radio
Kabel Interface Audio 3.5mm + konektor radio Hubungkan soundcard ke mic/speaker radio
⚠️ Topologi USB — Penting!
  • Arduino WAJIB di port USB terpisah dari soundcard
  • Jangan pakai hub USB yang sama (power budget tidak cukup)
  • STB B860H punya 2+ port USB — gunakan port berbeda

2. Persiapan OS

🎯 Untuk STB / Raspberry Pi / SBC (ARM64)
Gunakan Armbian atau Raspberry Pi OS Lite. Download dari armbian.com, flash ke MicroSD dengan Balena Etcher, lalu:
  1. Boot dari MicroSD
  2. Akses via SSH: ssh root@<IP-STB>
  3. Selesaikan setup awal (password, timezone)
  4. Pastikan terhubung ke internet
🖥️ Untuk PC / Server (x86_64)
Gunakan Debian 12 atau Ubuntu Server 22.04/24.04 (versi server/minimal, bukan desktop). Install OS seperti biasa, pastikan SSH aktif.

3. Instalasi — Satu Perintah

Download dan jalankan installer di terminal SSH:

curl https://orari.id/repo/installer.sh > /tmp/installer.sh
bash /tmp/installer.sh

Installer akan otomatis:

  1. ✅ Deteksi arsitektur (ARM64 / x86_64) dan distro Linux
  2. ✅ Install dependensi (Nginx, PHP, libsodium, libopus, Qt5, alsa-utils)
  3. ✅ Auto-detect versi PHP (support PHP 8.1 s/d 8.4)
  4. ✅ Download binary e-QSO ORARI v4.1.5
  5. ✅ Verifikasi integritas (SHA256)
  6. ✅ Setup Nginx + PHP-FPM (dengan SSE pool terpisah)
  7. ✅ Setup systemd service (journal logging + DNS wait)
  8. ✅ Setup permission journald untuk Web UI
  9. ✅ Start appliance
⏱️ Estimasi waktu: 3-10 menit tergantung kecepatan internet. Tidak ada wizard — semua berjalan otomatis.

4. Setelah Instalasi — Akses Web UI

Buka browser dari smartphone atau PC di jaringan yang sama:

http://<IP-ADDRESS-STB>

Jika lupa IP address:

hostname -I

Di Web UI, lakukan:

  1. Register — daftarkan gateway baru (jika belum punya akun)
  2. Login — dengan callsign gateway (YH...)
  3. Settings — konfigurasi audio device dan serial PTT
📱 Real-time via SSE: Status TX/RX, userlist, dan VU meter diupdate otomatis <200ms — tanpa reload halaman. Tidak perlu laptop — cukup browser di HP.

5. Mengenal Web UI

HalamanFungsi
Dashboard Monitor TX/RX real-time, room panel, ping, VU meter, log viewer, kontrol mic/speaker
Dashboard → Admin Toolbar Approve, Revoke, Mute, Unmute, Kick, Move Room (khusus admin)
Settings → Server Server address, port, default room
Settings → Audio Mic/speaker gain, tone control Bass/Mid/Treble, preset audio quality
Settings → PTT Serial port, baudrate, COS logic (HIGH/LOW), PTT pin, test PTT
Settings → System Control Power Off STB, Reboot STB, Stop Appliance — remote via Web UI
Admin Panel Manajemen user, room CRUD, audio quality server, pending approval (khusus admin)

6. Arduino Nano — Sketch COS/PTT Controller

Arduino Nano berfungsi sebagai interface antara sinyal radio (COS/PTT) dan appliance Linux via USB Serial.

📋 Wiring Arduino Nano:
  • D2 ← COS output radio (input ke Arduino)
  • D3 → PTT input radio (output dari Arduino)
  • D13 — LED indikator onboard (menyala saat PTT aktif)
  • GND ↔ GND radio (ground bersama, WAJIB)
⚠️ Catatan COS Logic: Arah logika COS (active HIGH atau LOW) tergantung radio. Bisa dikonfigurasi di Settings → PTT → COS Logic tanpa perlu upload ulang sketch.
⬇️ Download .ino
// ============================================================
// e-QSO ORARI Linux Appliance — Arduino Sketch
// Versi: 2.1
// Developer: YB8RSE - OM FRANKIE

const int COS_PIN = 2;      // COS normal
const int COS_INV_PIN = 4;  // COS terbalik (LOW = aktif)
const int PTT_PIN = 13;

void setup() {
    Serial.begin(9600);
    pinMode(COS_PIN, INPUT);
    pinMode(COS_INV_PIN, INPUT);
    pinMode(PTT_PIN, OUTPUT);
    digitalWrite(PTT_PIN, LOW);
    Serial.println("ARDUINO:READY");
    delay(2000);
}

void loop() {
    int readingD2 = digitalRead(COS_PIN);
    int readingD4 = digitalRead(COS_INV_PIN);

    static bool lastD2 = HIGH, lastD4 = LOW;
    
    // D2: HIGH = COS aktif
    if (readingD2 != lastD2) {
        lastD2 = readingD2;
        bool cosActive = (readingD2 == HIGH);
        Serial.print("COS:");
        Serial.println(cosActive ? "1" : "0");
    }

    // D4: LOW = COS aktif (invert)
    if (readingD4 != lastD4) {
        lastD4 = readingD4;
        bool cosActive = (readingD4 == LOW);
        Serial.print("COS:");
        Serial.println(cosActive ? "1" : "0");
    }

    if (Serial.available()) {
        String cmd = Serial.readStringUntil('\n');
        cmd.trim();
        if (cmd == "PTT:1") digitalWrite(PTT_PIN, HIGH);
        if (cmd == "PTT:0") digitalWrite(PTT_PIN, LOW);
        if (cmd == "PING") Serial.println("PONG");
    }

    delay(10);
}

7. Keamanan TX — Hardware Only

Proteksi berlapis memastikan TX hanya dari sinyal COS radio fisik:

  • 🔒 Layer 1: Tidak ada tombol PTT di Web UI
  • 🔒 Layer 2: API endpoint TX mengembalikan HTTP 403
  • 🔒 Layer 3: C++ binary tidak memiliki handler TX manual
  • 🔒 Layer 4: TX Watchdog — otomatis TX_STOP setelah 3 menit
  • 🔒 Layer 5: PTT OFF otomatis saat koneksi terputus
⚠️ Regulasi: TX tanpa memegang radio fisik melanggar regulasi penggunaan frekuensi amatir ORARI. Proteksi ini tidak dapat dinonaktifkan.

8. Troubleshooting

GejalaSolusi
Arduino tidak terdeteksi Pindah ke port USB berbeda. Cek: ls /dev/ttyUSB*
COS tidak trigger TX Settings → PTT → ubah COS Logic (HIGH/LOW)
Audio tidak terdengar / bergetar Cek aplay -l, sesuaikan audio device di Settings. Software resampling otomatis menangani perbedaan sample rate.
TX stuck / doubling TX Watchdog aktif otomatis setelah 3 menit. Atau restart appliance via Settings → System Control.
Web UI tidak bisa diakses (504) systemctl restart php8.2-fpm nginx
Tidak bisa connect ke server saat boot Normal — service menunggu DNS siap (max 30 detik). Cek: journalctl -u eqso-appliance -n 20
Audio engine mati sendiri Audio watchdog restart otomatis dalam 30 detik. Tidak perlu restart manual.
Library Qt5 error apt install libqt5network5t64 libqt5core5t64 libqt5serialport5

Perintah Berguna

# Lihat log appliance realtime
journalctl -u eqso-appliance -f

# Lihat 50 baris log terakhir
journalctl -u eqso-appliance -n 50 --no-pager

# Restart service
systemctl restart eqso-appliance

# Cek status
systemctl status eqso-appliance

# Cek audio devices
aplay -l && arecord -l

# Cek serial/Arduino
ls /dev/ttyUSB*

# Cek IP address
hostname -I

Spesifikasi Teknis

KomponenDetail
BinaryC++17 / Qt5 — compiled ARM64 & x86_64
Audio CodecOpus — support 8/12/16/24/48 kHz (semua preset server) dengan software resampling
Audio DeviceALSA direct — per-user Opus decoder untuk audio multi-user
EnkripsiChaCha20-Poly1305 (libsodium)
Web ServerNginx + PHP 8.x-FPM dengan SSE pool terpisah (real-time <200ms)
Log Systemsystemd journal — clear log benar-benar bersih via Web UI
Serial ControlArduino Nano (CH340/FTDI) — D2=COS, D3=PTT, D13=LED
WatchdogTX watchdog 3 menit + Audio watchdog 30 detik + DNS wait saat boot
Konsumsi RAM~12 MB runtime
Konsumsi CPU5-15% Cortex-A53 (S905X) saat idle/RX
ProtokolTCP 8080 (Command) + UDP 8082 (Audio)
Versiv4.1.5