Logotipo de Zephyrnet

Cómo usar MQTT en The Angular Project

Fecha:

Angular es una plataforma de desarrollo construida sobre TypeScript. Consiste en un marco basado en componentes para crear aplicaciones web escalables; un conjunto de bibliotecas perfectamente integradas que cubren enrutamiento, gestión de formularios, comunicación cliente-servidor y otras funciones; y un conjunto de herramientas de desarrollo para ayudar a los usuarios a desarrollar, construir, probar y actualizar códigos.

MQTT es un protocolo ligero de transferencia de mensajes de IoT basado en el modo de publicación/suscripción, que proporciona distribución de mensajes de uno a muchos y desacoplamiento de aplicaciones con un consumo de transmisión pequeño, lo que puede minimizar el tráfico de red. Al mismo tiempo, puede cumplir con varios requisitos de entrega gracias a sus tres niveles de QoS (Quality of Service) para mensajes.

Este artículo presentará cómo usar el protocolo MQTT en proyectos Angular para conectarse, suscribirse, enviar/recibir mensajes, darse de baja y realizar otras funciones entre clientes y MQTT Broker.

Inicialización del proyecto

Crear un nuevo proyecto

La referencia es la siguiente: Cree un proyecto Angular con Angular CLI

Ejemplo:

ng new my-app

Instalación de la biblioteca de cliente MQTT

La biblioteca utilizada en este caso es ngx-mqtt, que no es solo un contenedor alrededor de MQTT.js para angular >= 2. Utiliza observables y se encarga del manejo de suscripciones y el enrutamiento de mensajes. ngx-mqtt es muy adecuado para aplicaciones con muchos componentes y muchos suscriptores.

Para instalar ngx-mqtt a través de la línea de comando, puede usar el comando npm o yarn (cualquiera de los dos)

npm install ngx-mqtt --save 
yarn add ngx-mqtt

Uso de MQTT

Conexión con el corredor MQTT

Usamos la Corredor MQTT público proporcionada por EMQX en este artículo, que se basa en la Servicio en la nube MQTT – Nube EMQX. EMQX es un intermediario de mensajes IoT MQTT distribuido a gran escala que puede conectar dispositivos IoT masivos de manera eficiente y confiable, procesar y distribuir mensajes y datos de flujo de eventos en tiempo real, y ayudar a los clientes a crear plataformas y aplicaciones IoT críticas para el negocio.

La información de acceso al servidor es la siguiente:

  • Corredor: broker.emqx.io
  • Puerto TCP: 1883
  • Puerto WebSocket: 8083

Códigos clave para la conexión:

import {
 IMqttMessage,
 IMqttServiceOptions,
 MqttService,
 IPublishOptions,
} from 'ngx-mqtt';
import { IClientSubscribeOptions } from 'mqtt-browser';
import { Subscription } from 'rxjs';

@Component({
 selector: 'app-root',
 templateUrl: './app.component.html',
 styleUrls: ['./app.component.scss'],
})
export class AppComponent {
 constructor(private _mqttService: MqttService) {
   this.client = this._mqttService;
}
 private curSubscription: Subscription | undefined;
 connection = {
   hostname: 'broker.emqx.io',
   port: 8083,
   path: '/mqtt',
   clean: true, // Retain session
   connectTimeout: 4000, // Timeout period
   reconnectPeriod: 4000, // Reconnect period
   // Authentication information
   clientId: 'mqttx_597046f4',
   username: 'emqx_test',
   password: 'emqx_test',
   protocol: 'ws',
  }
 subscription = {
   topic: 'topic/mqttx',
   qos: 0,
};
 publish = {
   topic: 'topic/browser',
   qos: 0,
   payload: '{ "msg": "Hello, I am browser." }',
};
 receiveNews = '';
 qosList = [
  { label: 0, value: 0 },
  { label: 1, value: 1 },
  { label: 2, value: 2 },
];
 client: MqttService | undefined;
 isConnection = false;
 subscribeSuccess = false;

 // Create a connection
 createConnection() {
   // Connection string, which allows the protocol to specify the connection method to be used
   // ws Unencrypted WebSocket connection
   // wss Encrypted WebSocket connection
   // mqtt Unencrypted TCP connection
   // mqtts Encrypted TCP connection
   try {
     this.client?.connect(this.connection as IMqttServiceOptions)
  } catch (error) {
     console.log('mqtt.connect error', error);
  }
   this.client?.onConnect.subscribe(() => {
     this.isConnection = true
     console.log('Connection succeeded!');
  });
   this.client?.onError.subscribe((error: any) => {
     this.isConnection = false
     console.log('Connection failed', error);
  });
   this.client?.onMessage.subscribe((packet: any) => {
     this.receiveNews = this.receiveNews.concat(packet.payload.toString())
     console.log(`Received message ${packet.payload.toString()} from topic ${packet.topic}`)
  })
}
}

Una vez que se haya conectado con MQTT Broker con éxito, llame al subscribe método de la instancia MQTT actual y pase los parámetros Tema y QoS para la suscripción exitosa.

doSubscribe() {
 const { topic, qos } = this.subscription
 this.curSubscription = this.client?.observe(topic, { qos } as IClientSubscribeOptions).subscribe((message: IMqttMessage) => {
   this.subscribeSuccess = true
   console.log('Subscribe to topics res', message.payload.toString())
})
}

La unsubscribe El método puede liberar los recursos retenidos por la suscripción.

doUnSubscribe() {
 this.curSubscription?.unsubscribe()
 this.subscribeSuccess = false
}

Publicación de mensajes

La usafePublish publica mensajes sobre temas con opciones opcionales, como QoS y Retain, como se muestra a continuación.

doPublish() {
 const { topic, qos, payload } = this.publish
 console.log(this.publish)
 this.client?.unsafePublish(topic, payload, { qos } as IPublishOptions)
}

Desconectar

La disconnect desconectará el cliente MQTT. El parámetro true se pasa para forzar una desconexión del cliente MQTT.

destroyConnection() {
 try {
   this.client?.disconnect(true)
   this.isConnection = false
   console.log('Successfully disconnected!')
} catch (error: any) {
   console.log('Disconnect failed', error.toString())
}
}

Probar

Creamos la siguiente aplicación de navegador simple con Angular, que tiene las siguientes funciones: establecer una conexión, suscribirse a temas, enviar y recibir mensajes, darse de baja, desconectarse, etc. Para el código completo, consulte: https://github.com/emqx/MQTT-Client-Examples/tree/master/mqtt-client-Angular.js

Uso Herramienta cliente MQTT 5.0 – MQTT X como otro cliente para probar el envío y recepción de mensajes.

Cliente MQTT

Antes de que MQTT X envíe un segundo mensaje, cancele la suscripción en el lado del navegador, y el lado del navegador no recibirá los mensajes posteriores enviados por MQTT X.

Creamos con éxito una conexión MQTT en un proyecto Angular y simulamos los escenarios de suscripción, envío y recepción de mensajes, cancelación de suscripción y desconexión entre el cliente y el MQTT.

Como uno de los tres marcos front-end principales, Angular se puede usar tanto en el navegador como en el lado móvil. Se pueden desarrollar varias aplicaciones interesantes combinando el protocolo MQTT y Servicio en la nube MQTT, como el sistema de chat para la atención al cliente o el sistema de gestión para el seguimiento en tiempo real de la información de los dispositivos IoT.

publicado originalmente en https://www.emqx.com.

punto_img

Información más reciente

punto_img