domingo, 23 de agosto de 2026

Install MMDVMHost and DMRGateway on Debian (Trixie)

 

Instalación MMDVMHost y DMRGateway en Debian 13: La Guía Sencilla que Estabas Buscando

Este tutorial esta basado en Raspberry Pi OS Lite. En este caso se suprime la parte de hacer funcionar la imagen en la raspberry y  la configuracion de SSH para acceder a la linea de comando.


-Actualizar primero todo el sistema antes de empezar:

# sudo apt-get update && sudo apt-get upgrade -y


-Instalamos el Git:

  # sudo apt install git -y


-Instalamos librería nlohmann/json, para manejar archivos JSON en C++ y librería de desarrollo de Mosquito:

( obligatorio para instalar MMDVMHost versión 2026 con mqtt)

  # sudo apt-get install nlohmann-json3-dev

  # sudo apt-get install libmosquitto-dev -y



-Descargar MMDVMHost, DMRGateway y MMDVMCal 

   # cd /opt

   # sudo git clone https://github.com/g4klx/MMDVMHost.git

   # sudo git clone https://github.com/g4klx/DMRGateway.git

   # sudo git clone https://github.com/g4klx/MMDVMCal.git  (opcional)


-Compilar MMDVM:

   # cd /opt/MMDVMHost

   # sudo make


Nota: Si la compilación termina sin errores, verás un archivo ejecutable llamado MMDVM-Host en esa carpeta.


-Compilar DMRGateway:

  #  cd /opt/DMRGateway

  # sudo make


Nota: Si la compilación termina sin errores, verás un archivo ejecutable llamado DMRGwateway en esa carpeta.



-Modificar mmdvm.ini con nano


# cd /opt/MMDVMHost

  # sudo nano MMDVM-Host.ini

configurar el  archivo con la información necesaria indicativo , id, password, puerto gpio o usb, etc.

(yo suelo tener una copia del mmdvm.ini y la restauro con WinSCP con el usuario root)


#En la parte de moden si utilizamos GPIO deberíamos poner ttyAMA0 pero la imagen de raspberry pi IOS, lo conoce con el nombre de serial0 por lo que tenemos que sustituir UARTPort=/dev/AMA0 por UARTPort=/dev/serial0


Recomendación para alargar la vida de la microSD:


# Logging levels, 0=No logging ( en la versión con mosquito creo que no esta esya opción)

DisplayLevel=1

FileLevel=0  ---> nos aseguramos que esta marcada a 0. ( En sistemas como pi-star, la mayoría ya vienen preparadas con un sistema llamado tmpfs o Log2Ram.

Esto significa que escriben los logs en la memoria RAM (que no se desgasta) y no directamente en la MicroSD)


Guarda el archivo presionando `Ctrl + O`, luego `Enter`, y sal con `Ctrl + X`




-Modificar DMRGateway.ini con nano


# cd /opt/DMRGateway

 # sudo nano DMRGateway.ini


Guarda el archivo presionando `Ctrl + O`, luego `Enter`, y sal con `Ctrl + X`




-iniciar manualmente MMDVM

 # sudo /opt/DMRGateway/DMRGateway /opt/DMRGateway/DMRGateway.ini

 # sudo /opt/MMDVMHost/MMDVMHost /opt/MMDVMHost/MMDVM.ini

 # sudo /opt/MMDVMHost/MMDVM-Host /opt/MMDVMHost/MMDVM-Host.ini (versión con mosquito 2026)


Ctrl+Z  --> para salir de la pantalla.


Opening the MMDVM

Cannot open device - /dev/serial0

Este error significa que el programa MMDVMHost no puede comunicarse con tu módem a través del puerto serie de la Raspberry Pi. Ocurre porque el sistema operativo está usando ese puerto para su propia "consola de comandos" (bloqueándolo)

Desactivar la consola serie por defecto, la Raspberry Pi intenta usar el puerto serie para que te conectes a ella, lo que impide que el hotspot MMDVM lo use.



# sudo raspi-config


Navega hasta Interface Options (Opciones de interfaz)

Selecciona Serial Port (Puerto serie)

Cuando te pregunte si quieres que la consola de login esté accesible por serie, elige NO.

Cuando te pregunte si quieres habilitar el hardware del puerto serie, elige SÍ.

 Selecciona Finish (Finalizar) y acepta Reiniciar la Raspberry Pi



Una vez hallamos iniciado manualmente los dos servicios y nos hallamos asegurado que el dispositivo esta funcionando correctamente, llega el ultimo paso que es automatizar el arranque de MMDVMHots y DMRGateway  cada vez que se inicie la raspberry.


Arranque automatico:


-Crear el servicio para MMDVMHost


1º Creación del archivo de servicio: 

# sudo nano /lib/systemd/system/mmdvmhost.service

(se abre una pantalla y pegamos el siguiente código marcado en rojo.)


Nota: a partir de 10 de marzo del 2026 se renombro MMDVMHost a MMDVM-Host  y  MMDVM.ini a MMDVM-Host.ini , hay que asegurase de los nombres de las rutas y  archivos a la hora de escribir  comandos.


[Unit]

Description=MMDVMHost Service

After=network.target


[Service]

Type=simple

User=root

WorkingDirectory=/opt/MMDVMHost

# Aquí añadimos el retraso de 1 segundos

ExecStartPre=/bin/sleep 1

ExecStart=/opt/MMDVMHost/MMDVM-Host /opt/MMDVMHost/MMDVM-Host.ini

Restart=on-failure

RestartSec=5


[Install]

WantedBy=multi-user.target


Guarda el archivo presionando `Ctrl + O`, luego `Enter`, y sal con `Ctrl + X`




-Crear el servicio para DMRGateway


Crea el archivo de servicio con este comando:

# sudo nano /etc/systemd/system/dmrgateway.service

(se abre una pantalla y pegamos el siguiente código marcado en rojo.)



[Unit]

Description=Servicio DMRGateway

After=network-online.target mmdvmhost.service

Wants=network-online.target mmdvmhost.service


[Service]

Type=simple

User=root

WorkingDir=/opt/DMRGateway/

ExecStart=/opt/DMRGateway/DMRGateway /opt/DMRGateway/DMRGateway.ini

Restart=on-failure

RestartSec=5


[Install]

WantedBy=multi-user.target


Guarda el archivo presionando `Ctrl + O`, luego `Enter`, y sal con `Ctrl + X`



Aquí te explico de forma muy sencilla qué hacen estas tres líneas:


ExecStartPre=/bin/sleep 3:

 Establece un retarde de 3 segundos para que se ejecute el inicio después de 3  segundos  una vez allá iniciado el sistema, esto es para que se ejecuta una vez el hardware este ya estabilizado después de arrancar.


After=network-online.target mmdvmhost.service:

 Establece el orden de encendido. Le dice al sistema: "Espera a que internet esté bien conectado y a que el programa MMDVM-Host haya arrancado antes de abrir este servicio".


Wants=network-online.target mmdvmhost.service:

 Define una necesidad opcional. Le dice al sistema que intente activar el internet y el programa mmdvmhost, pero si alguno falla, que intente arrancar el DMRGateway de todas formas.


Recargar el sistema para que reconozca los nuevos archivos:

 # sudo systemctl daemon-reload


Habilitar el arranque automático al encender el equipo:

# sudo systemctl enable mmdvmhost.service

# sudo systemctl enable dmrgateway.service


Iniciar los programas en este momento sin necesidad de reiniciar:

# sudo systemctl start mmdvmhost.service

# sudo systemctl start dmrgateway.service


Comandos útiles para controlar los programas 

A partir de ahora, ya no necesitas ejecutar los programas a mano. Puedes controlarlos con estos comandos:

Ver si están funcionando correctamente:

# sudo systemctl status mmdvmhost.service

# sudo systemctl status dmrgateway.service


Otros comandos utiles:

Ver carga CPU

# top


-Update MMDVM Host Software

  # cd /opt/MMDVMHost

 #  sudo git pull

  # sudo make

 # sudo nano MMDVM-Host.ini

 

 -Update DMRGateway:

   #  cd /opt/DMRGateway

   #  sudo git pull

    # sudo make

   # sudo nano DMRGateway.ini




-Comprovar temperatura rpi (opcional)

 # vcgencmd measure_temp



-Copiamos el fichero MMDVM.ini al directorio /etc/ (opcional)

# cd /opt/MMDVMHost

# sudo cp MMDVM-Host.ini /etc/MMDVM-Host.ini




Nota: a partir de 10 de marzo del 2026 MMDVMHost junto con DMRGateway este es el único método de instalar  MMDVM para trabajar con DMR, alternativamente puedes instalar una versión anterior para evitar usar DMRGateway, estas versiones anteriores funcionan perfectamente.

Como veras todos los Tg´s los recibes por 9, eso es normal...recibes por el TG 9 a través del DMRGateway porque el sistema utiliza reglas de reescritura (Rewrite Rules). Traduce el tráfico de los canales o reflectores de la red externa y lo enruta de manera local hacia tu equipo en el Slot y Talkgroup 9, que actúa como canal de audio local y de avisos del sistema. No me parece correcto forzar a DMR a utilizar Gateway, creo que se pierde la filosofía original del uso del sistema DMR y crea un problema añadido ya que hay que modificar todo el codeplug de los equipos.  

Espero que te sea útil toda mi información.

Si tiene cualquier duda puede contactar conmigo por telegram: @ec5zy

viernes, 21 de agosto de 2026

Install mmdvmhost on Debian (Trixie)

 Instalación MMDVMHost en Debian 13: La Guía Sencilla que Estabas Buscando



1º Elejimos la distribucion mas comoda  para instalar, yo recomiendo distribuciones basadas en debian por su robustez. En mi caso elijo Raspberry Pi OS.  podemos descargar desde aquí la imagen. He elejido la opcion lite, (no nos hace falta la interfac grafica).
Con una aplicacion tipo win32 image write quemamos la imagen, por defecto no esta habilitado SSH por lo que os explico como habilitarlo facilmente.

Habilitar SSH: crearemos un archivo con el nombre "ssh"  este archivo no tendra extenion y su interior esta bacio, lo pegaremos en la particion "boot" o  "bootfs" este archivo desaparacera una vez inciemos el sistema.

Usuario y contraseña:  creamos un archivo llamado "userconf.txt" y en su interior  escribiremos el usuario y la contraseña (cifrada)  Lo pegaremos dentro de la carpeta "boot" o  "bootfs"

usuario: pi

contraseña: raspberry



Un hash de contraseña predeterminado para la contraseña raspberry tiene este aspecto:

pi:$6$c70VpvPsVNCG0YR5$l5vWWLsLko9Kj65gcQ8qvMkuOoRkEagI90qi3F/Y7rm8eNYZHW8CY6BOIKwMH7a3YYzZYL90zf304cAHLFaZE0


El siguiente paso seria poner la targeta en la Rasberry y encender para poden empezar a conectarnos via SSH con las credenciales "pi"  "raspberry". En mi caso uso PuTTY como cliente SSH.

Una vez dentro tendremos que instalar una serie de herramientas previas a la compilacion:

Actualizacion des sistema:

# sudo apt-get update && sudo apt-get upgrade -y


-Instalamos el Git:

 # sudo apt install git -y


-Instalar mmdvmhost y mmdvmcal 

# cd /opt

# sudo git clone https://github.com/g4klx/MMDVMHost.git

# sudo git clone https://github.com/g4klx/MMDVMCal.git  (opcional)


-Compilar MMDVM:

# cd /opt/MMDVMHost

  # sudo make


Nota: Si la compilación termina sin errores, verás un archivo ejecutable llamado MMDVMHost en esa carpeta.


-Compilar MMDVMCal (opcional):

# cd /opt/MMDVMCal

 # sudo make


Nota: MMDVMCal generalmente se utiliza para el ajsute de dispositivos DMO´s.


-Modificar mmdvm.ini con nano


# cd /opt/MMDVMHost

  # sudo nano MMDVM.ini

configurar el  archivo con la informacion necesaria indicativo , id, password, puerto gpio o usb, etc.

(yo suelo tener una copia del mmdvm.ini y la restauro con WinSCP con el usuario root para mekor comodidad)


Recomendación para alargar la vida de la microSD:


# Logging levels, 0=No logging

DisplayLevel=1

FileLevel=0  ---> cuando modifiquemos el archivo d configuracion mmdvm.ini nos aseguramos que esta marcada a 0. (En sistemas como pi-star, la mayoría ya          vienen preparadas con un sistema llamado tmpfs o Log2Ram.

Esto significa que escriben los logs en la memoria RAM (que no se desgasta) y no directamente en la MicroSD)

Guarda el archivo presionando `Ctrl + O`, luego `Enter`, y sal con `Ctrl + X`


-iniciar MMDVM

 # sudo /opt/MMDVMHost/MMDVMHost /opt/MMDVMHost/MMDVM.ini



¡¡Ya tenemos MMDVM funcionando!!


Nota: este proceso sirve para paquetes MMDVMHost con fecha 27 de enero de 2026 o anteriores. Posteriormente  se ha introducido varios cambios en MMDVMHost que a dia de hoy no estan consolidados, por lo que prefiero esta ultima fecha como aconsejable instalar a dia de hoy. Para intalacion de MMDVMHost posteriores hay que instalar MMDVMGateway como paquete adiccional, ese proceso no esta en este tutorial. Cuando sea mas estable realizare su procedimiento. Para cualquier duda o ayuda puede contactar conmigo por telegram: @ec5zy y estare encantado en ayudarle. 



miércoles, 19 de agosto de 2026

Auto start MMDVMHost in Debian (Trixie)

 Guía definitiva: Arranque automático y robusto de MMDVMHost en Debian

# Cómo programar el arranque automático de MMDVMHost en Debian (Systemd)


Si utilizas una instalación limpia de Linux (como Debian Trixie Core, Ubuntu Server o Raspberry Pi OS Lite) para tu nodo o repetidor digital, automatizar el arranque de **MMDVMHost** es fundamental. 


La forma más eficiente, moderna y segura de hacerlo es creando un servicio nativo en **systemd**. Esto garantizará que el programa inicie solo al encender el equipo, que espere a que haya internet y que se reinicie automáticamente si sufre alguna caída.


En esta guía veremos cómo configurarlo paso a paso, incluyendo un retardo de seguridad de 5 segundos para dar tiempo a que los puertos de hardware se estabilicen.


## Paso 1: Crear el archivo de servicio en Systemd

Vamos a crear el archivo de configuración que le dirá a Linux cómo y cuándo ejecutar el programa:

   sudo nano /etc/systemd/system/mmdvmhost.service


2. Pega el siguiente contenido. *(Asegúrate de cambiar tu usuario por la ubicación real de tu instalación)*:


[Unit]

Description=MMDVMHost Service

After=network.target


[Service]

Type=simple

User=root

WorkingDirectory=/opt/MMDVMHost

# Aquí añadimos el retraso de 5 segundos

ExecStartPre=/bin/sleep 5

ExecStart=/opt/MMDVMHost/MMDVMHost /opt/MMDVMHost/MMDVM.ini

Restart=on-failure

RestartSec=5


[Install]

WantedBy=multi-user.target


[Install]

WantedBy=multi-user.target


3. Guarda el archivo presionando `Ctrl + O`, luego `Enter`, y sal con `Ctrl + X`.



## Paso 2: Activar e iniciar el servicio

Ahora debemos indicar a Linux que lea la nueva configuración y active el arranque automático en cada inicio del sistema.


Ejecuta estos tres comandos en orden:

# 1. Recargar el sistema para que detecte el nuevo archivo

sudo systemctl daemon-reload


# 2. Habilitar el arranque automático al encender el equipo

sudo systemctl enable mmdvmhost.service


# 3. Iniciar el programa inmediatamente

sudo systemctl start mmdvmhost.service


## Paso 3: Comandos útiles de control

Una vez instalado, no necesitas volver a tocar el archivo de configuración. Puedes gestionar tu MMDVMHost con estos comandos rápidos desde cualquier ruta:


* **Ver el estado actual** (saber si está corriendo o dio error):

  sudo systemctl status mmdvmhost.service


* **Detener el programa**:

 sudo systemctl stop mmdvmhost.service


* **Reiniciar el programa**:

 sudo systemctl restart mmdvmhost.service


¡Y listo! Con esto tienes un nodo MMDVM totalmente autónomo, seguro y robusto en tu servidor Debian.

Nota: a partir de 10 de marzo del 2026 se renombro MMDVM.ini a MMDVMHost.ini hay que asegurase de los nombres de las rutas y  archivos a la hora de escribir  comandos.
Esto fué un ejemplo con un paquete estable de MMDVMHost. No suelo instalar paquetes que aun estan depurandose.

domingo, 16 de agosto de 2026

Compile For STM32F446 MMDVM stm32f446 and stm32f767

 En esta entrada vamos ha ver paso a paso como compilar e instalar el firmware MMDVM para una placa stm32f446re y una stmf767zi. 



Estas placas tienen 180mhz y 210mhz respectivamente y son las mas aconsejables para hacer funcionar  sistemas basados en MMDVM por su velocidad de reloj. 


Para  este trabajo vamos ha utilizar una Rapberry Pi 4 1GB ram, aunque se podría compilar en otras plataformas ARM incluidos pc y mac.



El sistema elegido es Raspberri PI OS Lite  Debian versión 13 (trixie)  (sin interface grafica)

La podemos descargar del siguiente enlace, downloads raspios_lite


La descomprimimos y la quemamos en una microSD, en mi caso de 16gb. Se puede  quemar con  Raspberry Pi Imager en mi caso es muy rápido y cómodo. Durante el proceso de grabado de la imagen, recordar  activar SSH y si es necesario dar información para conectarse vía wifi. Recordar que esta imagen es Lite y no tiene interface grafica.


Finalizado de la grabación de la imagen


Una vez grabada en la tarjeta habilitaremos  la conexión SSH ya que for defecto esta deshabilitada por seguridad. Deberemos crear dos archivos, uno habilitará el servicio SSH y le otro archivo generara el usuario y contraseña de acceso.

Habilitar SSH: crearemos un archivo con el nombre "ssh"  este archivo no tendrá extensión y su interior esta vacío, lo pegaremos en la partición "boot" o  "bootfs" este archivo desaparecerá una vez incoemos el sistema.

Usuario y contraseña:  creamos un archivo llamado "userconf.txt" y en su interior  escribiremos el usuario y la contraseña (cifrada)  Lo pegaremos dentro de la carpeta "boot" o  "bootfs"

usuario: pi

contraseña: raspberry


Un hash de contraseña predeterminado para la contraseña raspberry tiene este aspecto:

pi:$6$c70VpvPsVNCG0YR5$l5vWWLsLko9Kj65gcQ8qvMkuOoRkEagI90qi3F/Y7rm8eNYZHW8CY6BOIKwMH7a3YYzZYL90zf304cAHLFaZE0

El siguiente paso seria poner la tarjeta en la Rasberry y encender para poden empezar a conectarnos vía SSH con las credenciales "pi"  "raspberry". En mi caso uso PuTTY como cliente SSH.

Una vez dentro tendremos que instalar una serie de herramientas previas a la compilación:

Actualizar la lista de paquetes:

sudo apt-get update


Instalar la cadena de herramientas y los paquetes necesarios:

sudo apt-get install git gcc-arm-none-eabi gdb-multiarch libstdc++-arm-none-eabi-newlib autoconf libtool pkg-config libusb-1.0-0 libusb-1.0-0-dev


Instalar OpenOCD:

git clone https://github.com/ntfreak/openocd

cd openocd

./bootstrap

./configure

make

sudo make install


Descarga el paquete MMDVM de la fuente:

git clone https://github.com/g4klx/MMDVM

cd MMDVM

git submodule init

git submodule update


Editamos Config.h acorde a nuestras preferencias:

nano Config.h


Compilamos el código:

make f767 (para stm32f767zi)

make nucleo (para nucleo stm32f446re)


             Si todo ha  ido bien, nos mostrará una salida como esta:

                  
Para localizar el firmware tendremos una carpeta llamada "bin" en la ruta ~/openocd/MMDVM 


 la carpeta "bin" contiene el firmware compilado y listo para grabar . para obtener el firmware  y pasarlo a un pc con windows podemos utilizar 
WINscp via SSH (con usuario root)






Una vez en el  pc podemos grabar el firmware en la placa STM con  ST-LINK utility.


Conectamos la placa via usb al pc  y mediante lectura y grabación  grabamos el firmware el la placa. Ya tendremos nuestra placa lista para enchufar al sistema