This commit is contained in:
2026-08-08 17:10:02 +02:00
+67 -47
View File
@@ -1,42 +1,47 @@
SIP-DMR Radio Gateway # SIP-DMR Radio Gateway
Un gateway bidirezionale scritto in Python che permette di collegare centralini VoIP SIP (come FreePBX) a reti radio DMR (tramite protocollo OpenBridge). Un gateway bidirezionale scritto in Python che permette di collegare centralini VoIP SIP (come FreePBX) a reti radio DMR (tramite protocollo OpenBridge).
Il sistema gestisce l'handshake SIP, la transcodifica audio in tempo reale tra PCM (G.711a) e AMBE, il controllo PTT tramite toni DTMF e il cambio dinamico del Talkgroup direttamente dal tastierino del telefono, simulando il comportamento di una vera radio. Il sistema gestisce l'handshake SIP, la transcodifica audio in tempo reale tra PCM (G.711a) e AMBE, il controllo PTT tramite toni DTMF e il cambio dinamico del Talkgroup direttamente dal tastierino del telefono, simulando il comportamento di una vera radio.
🚀 Caratteristiche Principali ## 🚀 Caratteristiche Principali
Integrazione Trasparente: Dialoga nativamente con FreePBX gestendo i ping OPTIONS (Trunk PJSIP). * **Integrazione Trasparente:** Dialoga nativamente con FreePBX gestendo i ping `OPTIONS` (Trunk PJSIP).
* **Cambio Canale al Volo:** Digita il numero del Talkgroup sul telefono e il gateway ti sposterà di stanza senza far cadere la chiamata.
* **Sicurezza IP:** Rifiuta nativamente le connessioni SIP da IP non autorizzati.
* **Aggiornamento Display:** Usa il protocollo `re-INVITE` per mostrare Caller ID (DMR ID) e Talkgroup attivi sui telefoni hardware compatibili.
Cambio Canale al Volo: Digita il numero del Talkgroup sul telefono e il gateway ti sposterà di stanza senza far cadere la chiamata. ---
Sicurezza IP: Rifiuta nativamente le connessioni SIP da IP non autorizzati. ## 🛠️ 1. Prerequisiti di Sistema (Debian / Ubuntu)
Aggiornamento Display: Usa il protocollo re-INVITE per mostrare Caller ID (DMR ID) e Talkgroup attivi sui telefoni hardware compatibili.
🛠️ 1. Prerequisiti di Sistema (Debian / Ubuntu)
Prima di installare il gateway, assicurati di avere gli strumenti di compilazione e l'ambiente Python installati sul server: Prima di installare il gateway, assicurati di avere gli strumenti di compilazione e l'ambiente Python installati sul server:
Bash ```bash
sudo apt update && sudo apt upgrade -y sudo apt update && sudo apt upgrade -y
sudo apt install -y git build-essential python3 python3-venv python3-pip sudo apt install -y git build-essential python3 python3-venv python3-pip
(Nota: su architetture a 64-bit potrebbe essere necessario installare libc6-dev-i386 per compilare correttamente l'emulatore AMBE). ```
*(Nota: su architetture a 64-bit potrebbe essere necessario installare `libc6-dev-i386` per compilare correttamente l'emulatore AMBE).*
📻 2. Installazione Motore Audio (md380-emu) ---
Il cuore della conversione audio è l'emulatore open-source md380-emu. Va scaricato, compilato e lasciato in esecuzione in background. ## 📻 2. Installazione Motore Audio (md380-emu)
Bash Il cuore della conversione audio è l'emulatore open-source `md380-emu`. Va scaricato, compilato e lasciato in esecuzione in background.
```bash
cd /opt cd /opt
sudo git clone https://github.com/nostar/md380-emu.git sudo git clone https://github.com/nostar/md380-emu.git
cd md380-emu cd md380-emu
sudo make sudo make
Creazione del demone Systemd per l'emulatore: ```
Crea il file /etc/systemd/system/md380-emu.service:
Ini, TOML **Creazione del demone Systemd per l'emulatore:**
Crea il file `/etc/systemd/system/md380-emu.service`:
```ini
[Unit] [Unit]
Description=MD380 AMBE Emulator Description=MD380 AMBE Emulator
After=network.target After=network.target
@@ -51,17 +56,23 @@ RestartSec=3
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
```
Abilita e avvia il servizio: Abilita e avvia il servizio:
Bash ```bash
sudo systemctl enable md380-emu --now sudo systemctl enable md380-emu --now
```
---
## 💻 3. Installazione del Gateway Python
💻 3. Installazione del Gateway Python
Clona questo repository e configura l'ambiente virtuale: Clona questo repository e configura l'ambiente virtuale:
Bash ```bash
cd /opt cd /opt
git clone <URL_DEL_TUO_GITLAB> sip-dmr-gateway git clone https://git.arifvg.it/iv3jdv/sip-dmr-gateway.git
cd sip-dmr-gateway cd sip-dmr-gateway
# Crea e attiva il Virtual Environment # Crea e attiva il Virtual Environment
@@ -70,45 +81,49 @@ source venv/bin/activate
# Installa le dipendenze # Installa le dipendenze
pip install -r requirements.txt pip install -r requirements.txt
```
Copia i file di esempio per creare la tua configurazione reale: Copia i file di esempio per creare la tua configurazione reale:
Bash ```bash
cp config.example.json config.json cp config.example.json config.json
cp utenti.example.json utenti.json cp utenti.example.json utenti.json
Modifica config.json: Inserisci le credenziali del tuo server HBlink/OpenBridge, le porte e, soprattutto, l'IP autorizzato del tuo server FreePBX per la sicurezza. ```
**Modifica `config.json`:** Inserisci le credenziali del tuo server HBlink/OpenBridge, le porte e, soprattutto, l'IP autorizzato del tuo server FreePBX per la sicurezza.
---
## ⚙️ 4. Configurazione FreePBX
⚙️ 4. Configurazione FreePBX
Affinché il centralino dialoghi correttamente con il Gateway, crea un Trunk PJSIP con queste regole: Affinché il centralino dialoghi correttamente con il Gateway, crea un Trunk PJSIP con queste regole:
Autenticazione: Nessuna (Identity via IP Match). L'IP match deve puntare all'IP del server dove gira questo script Python. * **Autenticazione:** Nessuna (Identity via IP Match). L'IP match deve puntare all'IP del server dove gira questo script Python.
* **Qualify Frequency:** Lascialo attivo (es. 60 secondi). Il gateway risponderà regolarmente con `200 OK`.
* **Codecs:** Disabilita tutto e lascia spuntato **SOLO `alaw`** (G.711a).
* **Advanced -> DTMF Mode:** Imposta su `RFC4733`.
* **Advanced -> Trust RPID/PAI:** Imposta su `Yes`.
* **Advanced -> Send RPID/PAI:** Imposta su `Both`.
Qualify Frequency: Lascialo attivo (es. 60 secondi). Il gateway risponderà regolarmente con 200 OK. Crea poi una Rotta in Uscita (Outbound Route) che intercetti un prefisso a tua scelta (es. `99`) e che lo *strippi* (lo elimini), inviando al Trunk solo il numero del Talkgroup.
Codecs: Disabilita tutto e lascia spuntato SOLO alaw (G.711a). ---
Advanced -> DTMF Mode: Imposta su RFC4733. ## 📞 5. Utilizzo e Comandi DTMF (Tastierino)
Advanced -> Trust RPID/PAI: Imposta su Yes. Chiama la rotta configurata su FreePBX seguita dal Talkgroup desiderato (es. componi `99 222` per entrare sul TG 222). Una volta in linea, usa il tastierino del telefono per pilotare la radio:
Advanced -> Send RPID/PAI: Imposta su Both. * **Tasto `*` (Asterisco):** Premi per abilitare il PTT e iniziare a trasmettere.
* **Tasto `#` (Cancelletto):** Premi per disabilitare il PTT e tornare in ascolto.
* **Tasti `0-9` (Cambio Canale):** Digita il numero di un nuovo Talkgroup (es. `9`, `1`) e rilascia i tasti. Dopo circa 2,5 secondi il sistema ti sposterà automaticamente sul nuovo TG (verrai avvisato da un aggiornamento sul display del telefono, se supportato).
Crea poi una Rotta in Uscita (Outbound Route) che intercetti un prefisso a tua scelta (es. 99) e che lo strippi (lo elimini), inviando al Trunk solo il numero del Talkgroup. ---
📞 5. Utilizzo e Comandi DTMF (Tastierino) ## 🔄 6. Esecuzione come Servizio (Produzione)
Chiama la rotta configurata su FreePBX seguita dal Talkgroup desiderato (es. componi 99 222 per entrare sul TG 222). Una volta in linea, usa il tastierino del telefono per pilotare la radio: Per far avviare il Gateway automaticamente al boot, crea il file `/etc/systemd/system/sipdmr.service`:
Tasto * (Asterisco): Premi per abilitare il PTT e iniziare a trasmettere. ```ini
Tasto # (Cancelletto): Premi per disabilitare il PTT e tornare in ascolto.
Tasti 0-9 (Cambio Canale): Digita il numero di un nuovo Talkgroup (es. 9, 1) e rilascia i tasti. Dopo circa 2,5 secondi il sistema ti sposterà automaticamente sul nuovo TG (verrai avvisato da un aggiornamento sul display del telefono, se supportato).
🔄 6. Esecuzione come Servizio (Produzione)
Per far avviare il Gateway automaticamente al boot, crea il file /etc/systemd/system/sipdmr.service:
Ini, TOML
[Unit] [Unit]
Description=Gateway SIP-DMR Core Description=Gateway SIP-DMR Core
After=network.target md380-emu.service After=network.target md380-emu.service
@@ -126,11 +141,16 @@ SyslogIdentifier=sipdmr
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target
```
Abilita e avvia il gateway: Abilita e avvia il gateway:
Bash ```bash
sudo systemctl enable sipdmr --now sudo systemctl enable sipdmr --now
```
Per visualizzare i log in tempo reale e monitorare il traffico radio: Per visualizzare i log in tempo reale e monitorare il traffico radio:
Bash ```bash
journalctl -u sipdmr -f journalctl -u sipdmr -f
```