Saltar al contenido principal

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: PINGREQ y PINGRESP para 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 MQTTTraducción en TinyMQDescripció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