Güvenli açılış
PTT açılışta donanımsal olarak kapalı; yeniden başlayan uygulama önceki yayını sürdürmez.
A self-hosted EchoLink alternative built from Raspberry Pi gateways, a low-latency media relay and a Laravel panel.
The usual way to link analog radio sites is to rely on a third-party internet linking service — leaving connection policies, monitoring data and device management outside the operator's control.
The hard part is in the field, not in software: RF interference, internet outages, wrong audio levels or a stuck PTT are not fixed by a new app. The goal was to make these problems measurable and diagnosable remotely.
Audio never passes through the web app, its queues or its database. Even if the panel goes down, established talks continue until their grants expire.
Each site has a Raspberry Pi, a full-duplex USB sound card and a radio interface. The Go agent on the Pi captures audio, encodes it with Opus, detects an open receiver from the COS signal or audio level, and drives PTT.
The agent runs an explicit state machine: PTT is held off in hardware at boot, and a restarted application never resumes a previous transmission. If the link to the server is lost, the safe shutdown happens locally; an independent watchdog also limits continuous transmit time.
Connections are opened from the site outwards, so no port forwarding is needed at the site.
Only one source can talk in a group at a time. The first valid request wins; talks are never queued and played out later.
| Parameter | Starting value | Why |
|---|---|---|
| Codec | Opus, mono | Tunable compression and loss tolerance for speech |
| Encoder input | 16 kHz, 16-bit | Resampled with filtering if the card runs at another rate |
| Bitrate | 20 kbit/s (16–24) | Quality vs. bandwidth compared by measurement |
| Frame size | 20 ms (≈50 packets/s) | Balance between latency and efficiency |
| Jitter buffer | 40–80 ms | Upper bound and late-packet drop policy |
| Packet loss concealment | On | Softens the effect of lost frames |
| DTX | Off in the first release | Keeps silence, loss and end of talk distinguishable |
Starting values; tuned per site by measurement.
| Part | Role | Selection criteria |
|---|---|---|
| Core | ||
| Raspberry Pi | Runs the agent | Small model for the prototype; Ethernet and measured load decide in the field |
| USB sound card | Audio capture and playback | Stable on Linux over long runs, separate in/out |
| Analog FM radio | Transmit and receive | External mic, speaker and PTT access |
| Interface | ||
| RX/TX matching board | Levels and isolation | Attenuation, DC blocking |
| PTT driver | Keys the radio | Isolates the Pi from the radio's electrical interface |
| COS input | Is the receiver open? | If the radio exposes it; otherwise audio-based detection |
| Field release | ||
| Independent watchdog | Cuts transmit on a hang | Runs independently of the application |
| Power, enclosure, ferrites | Uptime and interference | Pi and radio power budgeted separately |
A fault in the field must never leave a radio stuck on air, and an outage at the server must not drop talks.
PTT açılışta donanımsal olarak kapalı; yeniden başlayan uygulama önceki yayını sürdürmez.
Uygulama kilitlenirse ya da yayın süresi aşılırsa telsizi yayından çeker.
Her geçidin kendi anahtarı vardır; cihazın beyanına değil doğrulanmış kimliğe güvenilir.
Panelde kaydedilen ile sahada uygulanan ayar ayrı izlenir; hatalı ayar geri alınır.
Ses yolu ayrı servistedir; panel ya da arka plan işleri durduğunda konuşmalar sürer.
Her RF alanında tek yayın geçidi; aynı frekansı duyan noktalar sesi geri döndüremez.
New capabilities are not built into the core; they are added as separate nodes that use the same talk-group contract.
The DMR bridge links a network talkgroup to the platform. The voice assistant node answers time, weather and propagation questions in amateur radio style when called by callsign. The APRS iGate node is receive-only and forwards position packets to the internet.
Each extension was designed through its own architecture decision record and runs as its own service.
The field test surfaced details the lab simulation could not. A talk session that stayed open long after the radio fell silent was traced with a field recording: a small DC offset at the sound card input made silence look like audio and kept VOX open. The agent now filters DC on the capture path; on the same recording VOX closes in 1.8 seconds.
Busy repeater traffic also reshaped the alarm logic: back-to-back short transmissions could falsely trigger the "stuck transmitter" alarm. The alarm now uses the PTT time measured by the agent and only fires after more than 70 seconds of continuous transmit.
Project specification, acceptance tests (T01–T16) and the first architecture decision records.
Control panel, Go media relay and Pi agent; end-to-end lab simulation with two virtual gateways.
Real-time status and talk history; a step-by-step hardware wiring guide inside the panel.
DMR bridge, voice assistant and APRS iGate nodes.
Tried with real radios in two separate analog FM cells. Field recordings directly shaped the agent's audio and alarm settings.
We design the hardware, real-time software and control panel together.
Share your needs and we will design and deliver a tailored solution.