Setting up a Headless ACARS Ground Station
One of the primary requirements for commercial and enterprise clients is the ability to deploy RF sensors in remote or restrictive environments where a graphical interface isn't feasible. Mycelium's headless architecture makes it trivial to deploy a fully functional, bidirectional ACARS ground station on lightweight edge hardware like a Raspberry Pi.
Using the Aviation Mission Pack, Mycelium goes beyond simply "listening" to ACARS. It can actively manage sessions, transmit squitter messages, and automatically acknowledge aircraft downlinks.
Step 1: The Deployment Script
Mycelium has a built-in script interpreter that executes .mycelium script files line by line, exactly as if each command were typed at the interactive prompt. Comments begin with # and are ignored. The first line uses a shebang so the script can be run directly as an executable:
#!/usr/bin/Myce # Headless ACARS ground station — 131.725 MHz VHF # Hardware: RTL-SDR (RX) + HackRF (TX) tool create -p ACARS -n ground_station tool set -n ground_station -r RTLSDR_0 -t hackrf_0 tool set -n ground_station -f 131725000 -m AM:MSK # Start squitter broadcast thread (identifies this station to aircraft) directive create -t ground_station -n start_squitter -c Always -a ACARS_Squitter_Start directive set -t ground_station -n start_squitter -a ACARS_Squitter_Start -p XA -i CID -I KCID -N 1 -L 4153N -O 09143W -S V131725 # Auto-acknowledge all received uplinks directive create -t ground_station -n auto_ack -c Always -a ACARS_Auto_Ack_Start # Receive loop: wait for data, forward to central collector, clear buffer directive create -t ground_station -n listen -c Null -a Receive directive create -t ground_station -n forward -c Any -a TCP_Send directive set -t ground_station -n forward -a TCP_Send -H 10.0.0.50 -P 5044 directive create -t ground_station -n clear -c Always -a Clear_Data execute
Make the script executable and it can be invoked directly:
chmod +x ground_station.mycelium ./ground_station.mycelium
Alternatively, pass it as an argument to the binary — useful for systemd services or Docker containers where you control the command explicitly:
Myce ground_station.mycelium
Both forms are equivalent. The interpreter detects a script argument at startup, selects the Interpreter interface instead of the interactive CLI, and executes each command in sequence. Once the last command runs, the process exits — unless a tool is still running, in which case it blocks until all tools stop.
Step 2: Running on Boot
A minimal systemd unit to launch this at boot on a headless edge node:
[Unit] Description=Mycelium ACARS Ground Station After=network.target [Service] ExecStart=/usr/bin/Myce /opt/missions/ground_station.mycelium Restart=on-failure [Install] WantedBy=multi-user.target
The Architecture
This deployment model allows you to deploy dozens of these lightweight nodes across a geographic area. They will autonomously handle the complex RF handshake procedures, demodulation, and decoding, while funneling a clean stream of JSON telemetry back to a centralized dashboard.
Conclusion
Mycelium transforms standard SDR hardware into an active participant in the National Airspace System's datalink, doing the heavy lifting of protocol state-management autonomously.
← Back to Blog