MQTT v3.1.1 Gateway
TinyMQ v2.7.0 introdujo un gateway nativo MQTT v3.1.1 sin dependencias externas en el puerto TCP 1883.
Esto permite que dispositivos IoT, microcontroladores (como ESP32/Arduino) y clientes MQTT estándar publiquen y se suscriban al broker TinyMQ directamente.
Enrutamiento entre protocolos
TinyMQ traduce de forma transparente entre protocolos. Un mensaje publicado vía HTTP puede ser consumido por un cliente MQTT, y viceversa.
Funcionalidades soportadas
- Connect: Con o sin autenticación.
- Publish: QoS 0 y QoS 1 están totalmente soportados. (Los paquetes QoS 2 se rechazan de forma controlada).
- Subscribe: Soporta múltiples topics por paquete.
- Ping:
PINGREQyPINGRESPpara keep-alive. - Protección OOM: Las conexiones MQTT respetan el límite de 2 MB de payload del broker.
Mapeo de topics y wildcards
MQTT utiliza caracteres wildcard distintos a los de las expresiones regulares estándar. TinyMQ traduce automáticamente los wildcards de MQTT a su formato interno.
| Patrón MQTT | Traducción en TinyMQ | Descripción |
|---|---|---|
# | * | Coincide con todo (multinivel) |
+ | * | En TinyMQ, el + de nivel único se mapea actualmente a * |
Autenticación
Si has protegido tu broker mediante la variable de entorno TINYMQ_API_KEY, los clientes MQTT deben proporcionar esta clave para conectarse.
- Username: Se ignora.
- Password: Debe coincidir exactamente con
TINYMQ_API_KEY. TinyMQ usa comparación en tiempo constante para prevenir ataques de temporización.
Ejemplo: CLI de Mosquitto
Publicar un mensaje:
mosquitto_pub -h localhost -p 1883 -t "sensor/temp" -m "24.5" -P "your_api_key"
Suscribirse a un topic:
mosquitto_sub -h localhost -p 1883 -t "sensor/#" -P "your_api_key"
Ejemplo: Python (Paho-MQTT)
import paho.mqtt.client as mqtt
def on_message(client, userdata, msg):
print(f"Received: {msg.payload.decode()} on {msg.topic}")
client = mqtt.Client()
client.username_pw_set(username="", password="your_api_key")
client.on_message = on_message
client.connect("localhost", 1883, 60)
client.subscribe("sensor/#")
client.loop_forever()
Deshabilitar MQTT
Si no necesitas el gateway MQTT y quieres cerrar el puerto 1883, configura:
TINYMQ_MQTT_DISABLE=true