Как использовать MQTT в проекте Angular

Угловой — это платформа разработки, построенная на основе TypeScript. Он состоит из основанной на компонентах инфраструктуры для создания масштабируемых веб-приложений; набор идеально интегрированных библиотек, охватывающих маршрутизацию, управление формами, взаимодействие клиент-сервер и другие функции; и набор инструментов разработки, помогающих пользователям разрабатывать, создавать, тестировать и обновлять коды.

MQTT — это облегченный протокол передачи сообщений IoT. на основе режима публикации/подписки, обеспечивающего распространение сообщений «один ко многим» и развязку приложений с небольшим потреблением передачи, что может минимизировать сетевой трафик. В то же время он может удовлетворить различные требования к доставке благодаря трем уровням QoS (качество обслуживания) для сообщений.

В этой статье рассказывается, как использовать протокол MQTT в проектах Angular для подключения, подписки, отправки/получения сообщений, отказа от подписки и выполнения других функций между клиентами и брокером MQTT.

Инициализация проекта

Создать новый проект

Ссылка выглядит следующим образом: Создайте проект Angular с помощью Angular CLI

Пример:

ng new my-app

Установка клиентской библиотеки MQTT

В данном случае используется библиотека ngx-mqttкоторый является не просто оболочкой MQTT.js для angular >= 2. Он использует наблюдаемые объекты и заботится об обработке подписки и маршрутизации сообщений. ngx-mqtt хорошо подходит для приложений со многими компонентами и многими подписчиками.

Установить ngx-mqtt через командную строку вы можете использовать команду npm или yarn (любую)

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

Использование MQTT

Подключение к MQTT-брокеру

Мы используем публичный MQTT-брокер предоставленный EMQX в этой статье, который построен на основе Облачный сервис MQTT — Облако EMQX. EMQX — это крупномасштабный распределенный брокер сообщений IoT MQTT, который может эффективно и надежно подключать массивные устройства IoT, обрабатывать и распространять сообщения и данные потока событий в режиме реального времени, а также помогать клиентам создавать критически важные для бизнеса платформы и приложения IoT.

Информация о доступе к серверу выглядит следующим образом:

  • Маклер: broker.emqx.io
  • TCP-порт: 1883 г.
  • Порт веб-сокета: 8083

Коды клавиш для подключения:

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}`)
  })
}
}

После успешного подключения к MQTT Broker вызовите subscribe метод текущего экземпляра MQTT и передать параметры Topic и QoS для успешной подписки.

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())
})
}

unsubscribe метод может освободить ресурсы, удерживаемые подпиской.

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

Публикация сообщений

usafePublish публикует сообщения в темах с дополнительными параметрами, такими как QoS и Retain, как показано ниже.

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

Отключить

disconnect отключит клиент MQTT. Параметр true передается для принудительного отключения от клиента MQTT.

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

Контрольная работа

Мы создаем следующее простое браузерное приложение с Angular, которое имеет следующие функции: установить соединение, подписаться на темы, отправлять и получать сообщения, отписываться, отключаться и так далее. Полный код см.

Угловое приложение MQTTT

Использовать Клиентский инструмент MQTT 5.0 — MQTT X в качестве другого клиента для проверки отправки и получения сообщений.

MQTT-клиент

Прежде чем MQTT X отправит второе сообщение, отмените подписку на стороне браузера, и сторона браузера не будет получать последующие сообщения, отправленные MQTT X.

Мы успешно создали соединение MQTT в проекте Angular и смоделировали сценарии подписки, отправки и получения сообщений, отказа от подписки и отключения между клиентом и MQTT.

Как один из трех основных интерфейсных фреймворков, Angular можно использовать как в браузере, так и на мобильных устройствах. Различные интересные приложения могут быть разработаны путем объединения протокола MQTT и Облачный сервис MQTTтакие как система чата для обслуживания клиентов или система управления для мониторинга информации об устройствах IoT в режиме реального времени.

Первоначально опубликовано на https://www.emqx.com.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *