You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
github-actions[bot] cb20451f1e
chore(release): 2.5.6
1 week ago
.github/workflows fix: align test suite and release infra with develop for 2.2.0 3 months ago
Audio chore: add default Audio assets from legacy installation 7 months ago
data rewrite of adn peer server using clean architecture 7 months ago
docs fix: don't attribute synthetic announcement PTT to a real connected peer 2 months ago
examples/systemd refactor: rename parrot deployment surface to echo 4 months ago
json rewrite of adn peer server using clean architecture 7 months ago
schemas fix: don't attribute synthetic announcement PTT to a real connected peer 2 months ago
src/adn_server fix: write alias downloads atomically and validate checksum before persisting 1 week ago
tests fix: write alias downloads atomically and validate checksum before persisting 1 week ago
.gitignore fix: audit refactors, report contract, and concurrent OBP downlink (#36) 3 months ago
CHANGELOG.md chore(release): 2.5.6 1 week ago
README.md chore(release): 2.5.6 1 week ago
README_es.md feat: add HP3ICC acknowledgments to README 2 months ago
adn-echo.example.yaml refactor: rename parrot deployment surface to echo 4 months ago
adn-server.example.yaml fix: retry alias JSON downloads on a short poll instead of waiting a full STALE_DAYS cycle 1 week ago
adn-server.py refactor: rename parrot deployment surface to echo 4 months ago
adn-voice.example.yaml fix: inject scheduled voice via routing and restore monitor TX events 3 months ago
mkdocs.es.yml Merge pull request #50 from ce5rpy/feat/obp-proxy-fan-in 3 months ago
mkdocs.yml Merge pull request #50 from ce5rpy/feat/obp-proxy-fan-in 3 months ago
pyproject.toml chore(release): 2.5.6 1 week ago
pytest.ini fix: audit refactors, report contract, and concurrent OBP downlink (#36) 3 months ago
requirements-docs.txt docs: add server and monitor documentation 6 months ago
requirements.txt feat(v2): vendor dmr_utils3 into domain/dmr (V2-P0-008) 4 months ago

README.md

ADN DMR Peer Server

Version 2.5.6 — pairs with adn-monitor 2.0.0-rc.4 (report v2 slim wire + JSON HELLO).

ADN DMR conference bridge server. Configuration is YAML; the codebase follows clean architecture (domain, application, infrastructure). v2 adds integrated PROXY, SubscriptionStore routing, report v2 to the monitor, and a unified adn-server.py entrypoint (--echo, --doctor, --no-proxy). See CHANGELOG.md.

License

GPL v3. Derived from FreeDMR / HBlink.

Requirements

  • Python 3.10+
  • Dependencies: pip install -r requirements.txt
  • ffmpeg (system package) — required for voice/TTS. Install via your distro:
    • Debian/Ubuntu: apt install ffmpeg
    • openSUSE: zypper install ffmpeg
    • Fedora/RHEL: dnf install ffmpeg or yum install ffmpeg

Configuration

Copy adn-server.example.yaml to adn-server.yaml and edit with your settings. Production config is not committed.

The example includes an integrated hotspot proxy (PROXY) and optional MySQL self-service (SELF_SERVICE). For self-service, install the optional extra: pip install -e ".[selfservice]". See Hotspot proxy (integrated). Disable standalone adn-proxy if you use the integrated proxy on the same host.

Voice configuration

Voice features (announcements, TTS, recording) use a separate config file. Copy adn-voice.example.yaml to adn-voice.yaml and edit. If the file does not exist, voice features are disabled (no error). Changes are hot-reloaded every 15 seconds.

  • Each item (ANNOUNCEMENTS, TTS_ANNOUNCEMENTS) has its own LANGUAGE and ENABLED: true to activate.
  • ANNOUNCEMENT_LANGUAGES is optional (for voice ident only); announcements/TTS work without it.
  • TTS requires ffmpeg + vocoder (TTS_VOCODER_CMD or TTS_AMBESERVER_HOST). Pipeline: .txt → gTTS → .mp3 → ffmpeg → .wav → vocoder → .ambe. First time: create Audio/<LANG>/ondemand/<FILE>.txt with the text. See Voice, announcements, and TTS.

Documentation (MkDocs)

Documentation (MkDocs): English under docs/en/, Spanish under docs/es/ (server/ and monitor/ in each). Install the doc stack first (includes Material); otherwise you may see Unrecognised theme name: 'material' if mkdocs on your PATH is not the same environment.

python3 -m pip install -r requirements-docs.txt
python3 -m mkdocs build -f mkdocs.yml          # → site/en/
python3 -m mkdocs build -f mkdocs.es.yml       # → site/es/

Use the same python3 you use for the project (e.g. pyenv’s 3.11.8). Preview the combined tree: cd site && python3 -m http.server then open /en/ and /es/, or run python3 -m mkdocs serve -f mkdocs.yml for English only.

Output: site/en/ and site/es/ under gitignored site/.

Tests

python3 -m pip install -e ".[dev]"
python3 -m pytest tests/ -q

See Testing in the docs site. File index: tests/README.md.

Run

pip install -r requirements.txt
python adn-server.py

Options:

python adn-server.py -c /path/to/adn-server.yaml
python adn-server.py --logging DEBUG
python adn-server.py --doctor          # config, ports, peers (exit 1 on errors)
python adn-server.py --no-proxy        # disable integrated PROXY

Echo (playback)

Separate process (same binary) records group voice and plays it back on TG 9990.

cp adn-echo.example.yaml adn-echo.yaml
python adn-server.py --echo -c adn-echo.yaml

See Echo (playback) in the docs site for an overview.

systemd: example units in examples/systemd/ (adn-server.service, adn-echo.service).

Acknowledgments

Thanks to Esteban Mackay, HP3ICC, for ideas, help, testing, and suggestions throughout development.


Español

Powered by TurnKey Linux.