🐧 e-QSO ORARI Linux Appliance
RF Gateway berbasis Linux — hemat listrik, headless, kontrol via Web UI real-time
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.
- ✅ 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 | Distro | Arsitektur | Status |
|---|---|---|---|
| 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
| Komponen | Spesifikasi | Keterangan |
|---|---|---|
| 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 |
- 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
Gunakan Armbian atau Raspberry Pi OS Lite. Download dari armbian.com, flash ke MicroSD dengan Balena Etcher, lalu:
- Boot dari MicroSD
- Akses via SSH:
ssh root@<IP-STB> - Selesaikan setup awal (password, timezone)
- Pastikan terhubung ke internet
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:
- ✅ Deteksi arsitektur (ARM64 / x86_64) dan distro Linux
- ✅ Install dependensi (Nginx, PHP, libsodium, libopus, Qt5, alsa-utils)
- ✅ Auto-detect versi PHP (support PHP 8.1 s/d 8.4)
- ✅ Download binary e-QSO ORARI v4.1.5
- ✅ Verifikasi integritas (SHA256)
- ✅ Setup Nginx + PHP-FPM (dengan SSE pool terpisah)
- ✅ Setup systemd service (journal logging + DNS wait)
- ✅ Setup permission journald untuk Web UI
- ✅ Start appliance
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:
- Register — daftarkan gateway baru (jika belum punya akun)
- Login — dengan callsign gateway (YH...)
- Settings — konfigurasi audio device dan serial PTT
5. Mengenal Web UI
| Halaman | Fungsi |
|---|---|
| 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.
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)
// ============================================================
// 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
8. Troubleshooting
| Gejala | Solusi |
|---|---|
| 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
| Komponen | Detail |
|---|---|
| Binary | C++17 / Qt5 — compiled ARM64 & x86_64 |
| Audio Codec | Opus — support 8/12/16/24/48 kHz (semua preset server) dengan software resampling |
| Audio Device | ALSA direct — per-user Opus decoder untuk audio multi-user |
| Enkripsi | ChaCha20-Poly1305 (libsodium) |
| Web Server | Nginx + PHP 8.x-FPM dengan SSE pool terpisah (real-time <200ms) |
| Log System | systemd journal — clear log benar-benar bersih via Web UI |
| Serial Control | Arduino Nano (CH340/FTDI) — D2=COS, D3=PTT, D13=LED |
| Watchdog | TX watchdog 3 menit + Audio watchdog 30 detik + DNS wait saat boot |
| Konsumsi RAM | ~12 MB runtime |
| Konsumsi CPU | 5-15% Cortex-A53 (S905X) saat idle/RX |
| Protokol | TCP 8080 (Command) + UDP 8082 (Audio) |
| Versi | v4.1.5 |
Lihat juga: Interface Gateway Homebrew → | Setting Audio → | Troubleshooting →