Publicar mensaje Mqtt

Roy 60 Puntos de reputación
2024-10-25T13:20:43.4333333+00:00

Estoy desarrollando una plataforma para dispositivos IoT. Al enrutar mensajes MQTT a través de un "namespacetopic" y una suscripción con un webhook, envío mensajes desde los nodos IoT al servidor web. Ahora, necesito enviar un mensaje MQTT desde un celular a través de una API en el servidor web para que los dispositivos puedan recibirlo.

¿Cómo podría lograr esto?

Azure
Azure
Plataforma e infraestructura de informática en la nube para crear, implementar y administrar aplicaciones y servicios a través de una red mundial de centros de datos administrados por Microsoft.
595 preguntas
0 comentarios No hay comentarios
{count} votos

2 respuestas

Ordenar por: Muy útil
  1. Gao Chen 10,665 Puntos de reputación Personal externo de Microsoft Moderador
    2024-10-25T18:20:31.6+00:00

    Hola Roy,
    ¡Bienvenido(a) a Microsoft Q&A!

    Para enviar un mensaje MQTT desde un celular a través de una API en tu servidor web, puedes seguir estos pasos:

    1. Configura tu API en el servidor web
    • Crea un endpoint en tu servidor que reciba las solicitudes HTTP (por ejemplo, POST) desde la aplicación móvil. Este endpoint debe aceptar los datos que deseas enviar como mensaje MQTT.
    1. Implementa la lógica en el servidor
    • En el backend, utiliza una biblioteca MQTT (como paho-mqtt en Python o mqtt.js en Node.js) para conectarte a tu broker MQTT.
    • Cuando recibas una solicitud en tu endpoint, extrae los datos del mensaje y publica el mensaje en el topic correspondiente.
       # Ejemplo en Python usando Flask y Paho MQTT
       from flask import Flask, request
       import paho.mqtt.client as mqtt
    
       app = Flask(__name__)
    
       # Configura el cliente MQTT
       mqtt_client = mqtt.Client()
       mqtt_client.connect("broker.hivemq.com", 1883, 60)  # Cambia por tu broker
    
       @app.route('/send', methods=['POST'])
       def send_message():
           data = request.json
           topic = data['topic']
           message = data['message']
           mqtt_client.publish(topic, message)
           return "Mensaje enviado", 200
    
       if __name__ == '__main__':
           app.run(debug=True)
    
    1. Desarrolla la aplicación móvil
    • En tu aplicación móvil, crea una interfaz que permita al usuario ingresar el mensaje y el topic.
    • Utiliza una biblioteca HTTP (como axios en JavaScript o Retrofit en Android) para enviar una solicitud POST a tu API con el mensaje y el topic.
       // Ejemplo en JavaScript usando Axios
       axios.post('https://tu-servidor.com/send', {
           topic: 'tu/topic',
           message: 'Hola desde el celular!'
       })
       .then(response => {
           console.log('Mensaje enviado:', response.data);
       })
       .catch(error => {
           console.error('Error al enviar el mensaje:', error);
       });
    
    1. Prueba el flujo
    • Asegúrate de que tu broker MQTT esté funcionando y que los dispositivos IoT estén suscritos al topic correcto.
    • Envía un mensaje desde la aplicación móvil y verifica que los dispositivos IoT lo reciban correctamente.

    Adicionalmente, yo recomendaria que te asegures de implementar autenticación y autorización en tu API para evitar accesos no autorizados. Espero que estos consejos ayuden a resolver el problema. Si necesitas más asistencia, estoy a tu disposición.

    Atentamente,

    Gao


    Si esta respuesta resolvió tu consulta, por favor haz clic en 'Aceptar respuesta'. Esto nos ayuda a mejorar continuamente la calidad y relevancia de nuestras soluciones.


  2. Gao Chen 10,665 Puntos de reputación Personal externo de Microsoft Moderador
    2024-10-30T19:22:10.3766667+00:00

    Hola de nuevo Roy,

    En este caso, utilizando PHP, puedes seguir estos pasos:

    • Configura tu servidor MQTT: Asegúrate de tener un broker MQTT en funcionamiento (como Mosquitto) que pueda recibir y enviar mensajes.
    • Desarrolla un endpoint en tu servidor que reciba las solicitudes desde el celular. Aquí tienes un ejemplo básico:
        <?php
        require 'vendor/autoload.php'; // Asegúrate de tener la librería de PHP MQTT instalada
        use PhpMqtt\Client\MqttClient;
        use PhpMqtt\Client\ConnectionSettings;
        $host = 'tu_broker_mqtt'; // Dirección de tu broker MQTT
        $port = 1883; // Puerto del broker MQTT
        $topic = 'tu/namespacetopic'; // El topic al que deseas publicar
        // Configura la conexión
        $settings = (new ConnectionSettings)
            ->setUsername('tu_usuario')
            ->setPassword('tu_contraseña');
        $mqtt = new MqttClient($host, $port);
        $mqtt->connect($settings);
        // Obtén el mensaje del cuerpo de la solicitud
        $data = json_decode(file_get_contents('php://input'), true);
        $message = $data['message'] ?? '';
        // Publica el mensaje en el topic
        $mqtt->publish($topic, $message, 0);
        // Desconéctate
        $mqtt->disconnect();
        echo json_encode(['status' => 'success', 'message' => 'Mensaje enviado']);
        ?>
      
    • Realiza la solicitud desde el celular. Puedes usar una biblioteca como axios o fetch en JavaScript para enviar una solicitud POST a tu API como por ejemplo:
        const message = { message: "Hola desde el celular" };
        fetch('https://tu_dominio.com/api/send_message.php', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
            },
            body: JSON.stringify(message),
        })
        .then(response => response.json())
        .then(data => console.log(data))
        .catch(error => console.error('Error:', error));
      
    • Luego asegúrate de probar el flujo completo: enviar un mensaje desde el celular y verificar que los dispositivos IoT lo reciban correctamente.

    Para hacer lo mencionado anteriormente, te recomiendo asegúrarte de implementar medidas de seguridad en tu API, como autenticación y validación de datos e implementa un manejo adecuado de errores tanto en el servidor como en el cliente para mejorar la experiencia del usuario.

    Espero que información brindada fuera útil. Si necesitas más asistencia, no dudes en hacermelo saber.

    Atentamente,

    Gao


    Si esta respuesta resolvió tu consulta, por favor haz clic en 'Aceptar respuesta'. Esto nos ayuda a mejorar continuamente la calidad y relevancia de nuestras soluciones.


Su respuesta

Las respuestas se pueden marcar como respuestas aceptadas por el autor de la pregunta, lo que ayuda a los usuarios a conocer la respuesta que resolvió el problema del autor.