You are viewing archived documentation for v0.15. Go to latest →

Satellites

Satellites are the audio capture nodes in a BirdNET-NG deployment. They record bird sounds, filter out silence and noise on-device, and upload audio chunks to the hub via MQTT for identification.

What Satellites Do

  • Audio capture — record 3-second WAV chunks at 48kHz mono (BirdNET's native window)
  • On-device filtering — adaptive noise floor + spectral peak SNR detection to reject silence and non-bird audio before upload
  • MQTT upload — send audio chunks and telemetry to the hub over WSS (WebSocket Secure, port 443)
  • Heartbeat — periodic status reports to keep the satellite showing as "online" on the hub

Supported Platforms

Platform Type Status Page
Raspberry Pi Dedicated hardware Available Satellite: Raspberry Pi
Android phone Mobile app Available Satellite: Android

Feature Comparison

BirdNET-NG supports two types of satellites for capturing bird audio in the field: the Pi Satellite (a Node.js agent for Raspberry Pi) and the Phone Satellite (an Android app built with Capacitor). Both connect to the same hub and use the same MQTT protocol, but they differ in hardware capabilities, deployment model, and user interaction.

Feature Pi Satellite Phone Satellite
Audio source ALSA (USB microphone) Native AudioRecord plugin
Sample rate 48kHz native 48kHz (falls back to 44.1kHz / 16kHz)
Audio filtering Adaptive noise floor + spectral peak SNR Same algorithm
Filter config Received from hub via MQTT Received from hub via MQTT
GPS gpsd (external chip) or static env vars Built-in device GPS (auto-update with configurable interval)
Manual GPS Via environment variables In-app settings page
Local buffer sql.js outbox (survives restart) In-memory buffer (lost on app kill, max 100 chunks)
Recording modes live, simulate (white noise), replay (fixtures) Live only
Keep awake N/A (always on, headless) Toggle (Android wake lock)
Default state Starts recording immediately Starts paused (tap to record)
Settings source Environment variables + hub config push In-app settings page + hub config push
Telemetry CPU temp, storage free, uptime Battery level, storage free, uptime
Noise floor Reported in heartbeat Reported in heartbeat
Version tracking Reported in heartbeat Reported in heartbeat
Background operation Systemd service Capacitor background mode
Deployment SSH + npm install + systemd APK install (sideload or build)
Update method git pull + rebuild + restart service Rebuild APK + reinstall
Connectivity WSS (port 443) WSS (port 443)
Registration Auto on first connect (env config) In-app registration screen
Rename From hub UI only From hub UI or in-app settings
On-device logging stdout/journald In-app log viewer with copy/clear

Shared Concepts

MQTT Registration

Every satellite must be registered with the hub before it can connect. Registration creates MQTT credentials and associates the satellite with a tenant. Registration can be done:

  • Via the web UI (Satellites page)
  • Via the REST API (POST /api/satellites)
  • In-app (Android satellite only)

MQTT Topics

All satellites use the same topic structure: birdnet/{tenant_id}/{satellite_id}/{channel} where channel is audio, telemetry, heartbeat, config, or ack.

Heartbeat

Satellites send a lightweight heartbeat at a configurable interval (default 30 seconds, set from hub tenant settings) via MQTT QoS 1. The heartbeat includes the satellite's current state (recording, paused, scheduled_off, error) and noise_floor_rms for filter calibration.

On-Device Audio Filtering

Both satellite types use the same adaptive filtering algorithm:

  1. Adaptive noise floor — tracks ambient noise level over time (smoothing alpha: 0.02)
  2. Minimum RMS energy — rejects silence below threshold (default 0.003)
  3. Spectral peak SNR — requires signal-to-noise ratio above threshold (default 1.5)
  4. Bird-band frequency check — confirms energy in the 1-10kHz bird frequency range

Filter settings are managed centrally in hub tenant settings and pushed to all satellites via MQTT. This typically filters 70-90% of chunks, reducing bandwidth and processing load.

Recording Profiles

Profiles control when satellites capture audio. They are pushed from the hub via MQTT and can be changed on the Satellites page.

Profile Schedule Description
continuous 24/7 Always recording
dawn_chorus sunrise-30min to sunrise+2h Peak bird activity
night_migration sunset+30min to sunset+12h Nocturnal flight calls
low_power sunrise+/-30min, sunset+/-30min Dawn and dusk only

Sunrise and sunset times are calculated automatically from the satellite's GPS coordinates using the NOAA solar algorithm.

When to Use Which

The Pi satellite is the better choice for permanent, always-on installations where power and network are reliable. The phone satellite is ideal for portable or temporary deployments -- field trips, surveys, or testing new locations before committing to a fixed setup.

Future Platforms

The following satellite platforms are planned but not yet available:

  • iPhone — iOS satellite app (planned)
  • ESP32 — low-power microcontroller satellite (planned)
  • Docker satellite — containerized satellite for testing and development (planned)