From 0bfd1ce925d7f57343fdf02f2c5302176b5c579d Mon Sep 17 00:00:00 2001 From: IV3JDV Date: Sun, 9 Aug 2026 12:03:48 +0200 Subject: [PATCH] aggiornato README.md --- README.md | 54 +++++++++++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index a10d4e0..852d346 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ # 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)[cite: 2]. +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[cite: 2]. +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 -* **Integrazione Trasparente:** Dialoga nativamente con FreePBX gestendo i ping `OPTIONS` (Trunk PJSIP)[cite: 2]. -* **Cambio Canale al Volo:** Digita il numero del Talkgroup sul telefono e il gateway ti sposterà di stanza senza far cadere la chiamata[cite: 2]. -* **Sicurezza IP:** Rifiuta nativamente le connessioni SIP da IP non autorizzati[cite: 2]. -* **Aggiornamento Display:** Usa il protocollo `re-INVITE` per mostrare Caller ID (DMR ID) e Talkgroup attivi sui telefoni hardware compatibili[cite: 2]. +* **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. * **Transcoding 100% Software:** Nessun hardware dedicato richiesto (es. DVStick). Il sistema usa l'emulatore nativo `md380-emu` elaborando l'audio crudo (RAW) direttamente tramite CPU. * **Multi-Tenancy Dinamica:** Gestisce chiamate simultanee multiple. Il motore alloca e dealloca dinamicamente le porte UDP instradando gli stream audio in tempo reale sui vocoder liberi. * **Audio Bidirezionale G.711 / AMBE:** Converte al volo i pacchetti SIP A-Law in PCM lineare 16-bit (tramite modulo `audioop`) per la rete DMR, e viceversa. @@ -18,20 +18,20 @@ Il sistema gestisce l'handshake SIP, la transcodifica audio in tempo reale tra P ## 🛠️ 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[cite: 2]: +Prima di installare il gateway, assicurati di avere gli strumenti di compilazione e l'ambiente Python installati sul server: ```bash sudo apt update && sudo apt upgrade -y 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)[cite: 2].* +*(Nota: su architetture a 64-bit potrebbe essere necessario installare `libc6-dev-i386` per compilare correttamente l'emulatore AMBE).* --- ## 📻 2. Installazione Motore Audio Scalabile (md380-emu) -Il cuore della conversione audio è l'emulatore open-source `md380-emu`[cite: 2]. Va scaricato, compilato e configurato come "template" Systemd per supportare un pool di porte[cite: 2]. +Il cuore della conversione audio è l'emulatore open-source `md380-emu`. Va scaricato, compilato e configurato come "template" Systemd per supportare un pool di porte. ```bash cd /opt @@ -79,7 +79,7 @@ done ## 💻 3. Installazione del Gateway Python -Clona questo repository e configura l'ambiente virtuale[cite: 2]: +Clona questo repository e configura l'ambiente virtuale: ```bash cd /opt @@ -94,45 +94,45 @@ source venv/bin/activate pip install -r requirements.txt ``` -Copia i file di esempio per creare la tua configurazione reale[cite: 2]: +Copia i file di esempio per creare la tua configurazione reale: ```bash cp config.example.json config.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[cite: 2]. +**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 -Affinché il centralino dialoghi correttamente con il Gateway, crea un Trunk PJSIP con queste regole[cite: 2]: +Affinché il centralino dialoghi correttamente con il Gateway, crea un Trunk PJSIP con queste regole: -* **Autenticazione:** Nessuna (Identity via IP Match)[cite: 2]. L'IP match deve puntare all'IP del server dove gira questo script Python[cite: 2]. -* **Qualify Frequency:** Lascialo attivo (es. 60 secondi)[cite: 2]. Il gateway risponderà regolarmente con `200 OK`[cite: 2]. -* **Codecs:** Disabilita tutto e lascia spuntato **SOLO `alaw`** (G.711a)[cite: 2]. -* **Advanced -> DTMF Mode:** Imposta su `RFC4733`[cite: 2]. -* **Advanced -> Trust RPID/PAI:** Imposta su `Yes`[cite: 2]. -* **Advanced -> Send RPID/PAI:** Imposta su `Both`[cite: 2]. +* **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`. -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[cite: 2]. +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) -Chiama la rotta configurata su FreePBX seguita dal Talkgroup desiderato (es. componi `99 222` per entrare sul TG 222)[cite: 2]. Una volta in linea, usa il tastierino del telefono per pilotare la radio[cite: 2]: +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: -* **Tasto `*` (Asterisco):** Premi per abilitare il PTT e iniziare a trasmettere[cite: 2]. -* **Tasto `#` (Cancelletto):** Premi per disabilitare il PTT e tornare in ascolto[cite: 2]. -* **Tasti `0-9` (Cambio Canale):** Digita il numero di un nuovo Talkgroup (es. `9`, `1`) e rilascia i tasti[cite: 2]. Dopo circa 2,5 secondi il sistema ti sposterà automaticamente sul nuovo TG (verrai avvisato da un aggiornamento sul display del telefono, se supportato)[cite: 2]. +* **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). --- ## 🔄 6. Esecuzione come Servizio (Produzione) -Per far avviare il Gateway automaticamente al boot, crea il file `/etc/systemd/system/sipdmr.service`[cite: 2]: +Per far avviare il Gateway automaticamente al boot, crea il file `/etc/systemd/system/sipdmr.service`: ```ini [Unit] @@ -154,13 +154,13 @@ SyslogIdentifier=sipdmr WantedBy=multi-user.target ``` -Abilita e avvia il gateway[cite: 2]: +Abilita e avvia il gateway: ```bash sudo systemctl enable sipdmr --now ``` -Per visualizzare i log in tempo reale e monitorare il traffico radio[cite: 2]: +Per visualizzare i log in tempo reale e monitorare il traffico radio: ```bash journalctl -u sipdmr -f