Non-GO — использование IoT-платформ emqx и mqtt в Vue и Nodejs.
Non-GO — использование IoT-платформ emqx и mqtt в Vue и Nodejs.

Предисловие

В этой статье обсуждается «использование платформ Интернета вещей emqx и mqtt в Vue и Nodejs».

Учитесь обобщать, если что-то не так, поправьте меня, спасибо!

Недавно я сделал кое-что, связанное с Интернетом вещей, и, кстати, тоже подведу итог. Мой личный Go-проект все еще в разработке, прошу обратить внимание.

Примерное понимание протокола mqtt

MQTT (Message Queuing Telemetry Transport) — это легкий протокол связи, предназначенный для связи между устройствами IoT и приложениями. Это протокол публикации/подписки, который позволяет устройствам и приложениям взаимодействовать через промежуточного брокера.

  1. Легкость: протокол MQTT очень легок, имеет всего несколько байтов в заголовке протокола и небольшой объем передаваемых данных, что делает его пригодным для использования в сетевых средах с ограниченной пропускной способностью.
  2. Шаблон публикации/подписки: MQTT использует шаблон публикации/подписки для доставки сообщений. Устройство может публиковать сообщения в определенной теме, а другие устройства могут подписаться на эту тему, чтобы получать связанные сообщения.
  3. Надежность. Протокол MQTT поддерживает три уровня качества доставки сообщений (QoS): QoS 0 представляет не более одной доставки, QoS 1 представляет не менее одной доставки, а QoS 2 представляет только одну доставку. Выбрав соответствующий уровень QoS, можно обеспечить надежность сообщений и гарантии доставки.
  4. Асинхронная связь. Протокол MQTT поддерживает асинхронную связь, и устройства могут отправлять и получать сообщения в разное время, не требуя соединения в реальном времени.
  5. Гибкие методы подключения. Протокол MQTT поддерживает несколько методов подключения, включая TCP/IP, WebSocket и т. д., и может адаптироваться к различным сетевым средам и типам устройств.
  6. Безопасность. Протокол MQTT поддерживает зашифрованную связь на основе TLS/SSL, что может обеспечить безопасность и конфиденциальность сообщений.
  7. Низкое энергопотребление. Протокол MQTT разработан с учетом требований к низкому энергопотреблению устройств Интернета вещей и может эффективно использовать энергию устройства.

Протокол MQTT работает следующим образом:

  1. Устройство устанавливает соединение с брокером MQTT через такие протоколы, как TCP/IP или WebSocket.
  2. Устройства могут публиковать сообщения в определенной теме или подписываться на тему, чтобы получать связанные сообщения.
  3. Брокер MQTT отвечает за получение и маршрутизацию сообщений и их доставку на устройства, подписанные на соответствующую тему.
  4. Устройства, подписанные на тему, получают сообщения, относящиеся к этой теме.
  5. Устройство может выбрать соответствующий уровень QoS, необходимый для обеспечения надежности сообщения.

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

Подробное объяснение mqtt

  1. Тема и подстановочные знаки: MQTT использует темы для определения содержимого сообщений. Тема аналогична пути, который может представлять собой иерархическую строку, разделенную косой чертой (/). Например, тема «дом/гостиная/температура».

MQTT также поддерживает подстановочные знаки для более гибких подписок. Существует два типа подстановочных знаков: одноуровневые подстановочные знаки (+) и многоуровневые подстановочные знаки (#). Одноуровневые подстановочные знаки соответствуют одному уровню, а многоуровневые подстановочные знаки соответствуют нулю или более уровням. Например, подписка «дом/+/температура» может соответствовать таким темам, как «дом/гостиная/температура» и «дом/спальня/температура».

  1. Связи и сеансы: Протокол MQTT использует модель соединения на основе сеанса. Устройства могут сохранить сеанс при подключении к брокеру MQTT. Сеансы могут отслеживать состояние подписки и публикации устройства, чтобы предыдущие подписки и публикации можно было восстановить при отключении и повторном подключении устройства.

Сеанс также может установить ясный флаг, указывающий, должен ли агент сохранять состояние подписки и публикации устройства. Если для флага очистки установлено значение true, сеанс будет удален после отключения, а статус подписки и публикации устройства будет очищен.

  1. Уровень качества обслуживания: Протокол MQTT поддерживает три уровня качества обмена сообщениями (QoS):
  • QoS 0: Доставка не более одного раза. После отправки сообщения нет подтверждения, а надежность и доставка сообщения не гарантируются.
  • QoS 1: доставка хотя бы один раз. После отправки сообщения требуется подтверждение. Если подтверждение не получено, сообщение будет отправлено повторно, чтобы гарантировать его доставку хотя бы один раз.
  • QoS 2: Только однократная доставка. После отправки сообщения его необходимо подтвердить дважды, чтобы гарантировать, что сообщение будет доставлено только один раз. Это самый высокий уровень надежности, но он требует больших сетевых издержек.

Устройства могут выбирать соответствующий уровень QoS по мере необходимости. Более высокие уровни QoS приведут к увеличению нагрузки на сеть.

  1. Сохраненные сообщения: MQTT поддерживает механизм хранения сообщений, то есть устройство может публиковать сохраненное сообщение. Когда устройство подписывается на тему, брокер отправляет подписчику последнее сохраненное сообщение. Таким образом, подписчики могут получать самый последний статус или информацию, даже если сообщения были опубликованы до подписки.
  2. Качество обслуживания и задержка: Протокол MQTT обеспечивает баланс между качеством обслуживания и задержкой за счет контроля уровней QoS. Более высокие уровни QoS обеспечивают более надежный обмен сообщениями, но увеличивают нагрузку на сеть и задержку. Более низкие уровни QoS могут снизить нагрузку на сеть и задержку, но могут привести к снижению надежности сообщений.
  3. Безопасность: Протокол MQTT поддерживает шифрованную связь на основе TLS/SSL для обеспечения безопасности и конфиденциальности сообщений. Связь между устройством и агентом может быть зашифрована с помощью протокола Secure Sockets Layer (SSL), чтобы предотвратить перехват и подделку данных.
  4. MQTT-брокер: Брокер MQTT является основным компонентом протокола MQTT и отвечает за получение и маршрутизацию сообщений. Брокеры могут обрабатывать соединения и обмен сообщениями на нескольких устройствах и обеспечивать правильную доставку сообщений в соответствии с отношениями подписки. Прокси также может поддерживать аутентификацию, контроль доступа и другие функции для подписок и публикаций.

О платформе emqx

ЭМК

EMQ X разработан для обеспечения высокой производительности, надежности и масштабируемости для Интернета вещей (IoT) и передачи сообщений в реальном времени. Он поддерживает миллионы одновременных подключений и может обрабатывать большие объемы трафика сообщений.

Архитектура EMQ X использует распределенный дизайн, который позволяет увеличить емкость и пропускную способность за счет горизонтального расширения. Он обеспечивает различные режимы кластера, включая режим «главный-подчиненный», режим с несколькими главными устройствами и режим кластера. Вы можете выбрать подходящий режим в соответствии с фактическими потребностями.

EMQ X также предоставляет мощные функции маршрутизации и пересылки сообщений, которые могут направлять сообщения в разные темы или клиентам в соответствии с разными правилами. Он поддерживает подписки с подстановочными знаками на основе тем и может реализовать гибкую фильтрацию сообщений и режимы подписки.

EMQ X также предоставляет богатую систему плагинов для расширения его функциональности. Он предоставляет множество часто используемых плагинов, включая плагины баз данных, плагины аутентификации, плагины WebHook и т. д., для удовлетворения потребностей различных сценариев.

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

установка emqx

Первым делом скачайте emqx. После скачивания это сжатый пакет, а затем разархивируйте его.

После установки перейдите в каталог bin, введите emqx start и нажмите Enter, чтобы запустить службу. Этот emqx фактически создает локальный сервер mqtt.

Чтобы проверить успешность запуска, мы можем ввести http://localhost:18083/ в локальном браузере. Когда вы увидите изображение ниже, это означает, что служба запустилась успешно. Затем введите имя пользователя и пароль пользователя по умолчанию. имя — admin, а пароль по умолчанию — общедоступный. Введите. Затем вам будет предложено установить имя пользователя и пароль, выбор за вами.

После входа это

Мы можем проверить ссылку в

Тогда мы сможем увидеть нашу собственную ссылку на клиенте

Используйте Vue2 для подключения к локальному серверу emqx.

Сначала установите mqtt,

Адрес официального сайта npm выглядит следующим образом:

mqtt - npm (npmjs.com)

Язык кода:txt
копировать
npm i mqtt 

После установки импортируйте его в компонент Vue. Это синтаксис es6.

Язык кода:html
копировать
import * as mqtt from 'mqtt'

После импорта инкапсулируйте функцию. В методах инкапсулируйте функцию init, а затем вызовите ее в установленной функции жизненного цикла.

Язык кода:html
копировать
    // ссылкаmqtt
    init() {
        console.log('начал');
      // Варианты конфигурации подключения
      let options = {
        connectTimeout: 4000, // тайм-аут
        // Информация о сертификации
        clientId: "111", //Если не заполнено, идентификатор будет сгенерирован случайным образом по умолчанию.
        username: "adminVue", //имя пользователя
        password: "123456", //пароль
      };
      this.client = mqtt.connect("ws://localhost:8083/mqtt", options); //Вызов подключенного API
      //Соединение успешное
      this.client.on("connect", (e) => {
        console.log("Соединение успешно", e);
      });
      //напоминание о переподключении
      this.client.on("reconnect", (error) => {
        console.log("Повторное подключение", error);
      });
      //Напоминание о сбое соединения
      this.client.on("error", (error) => {
        console.log("Соединение не удалось", error);
      });
    },

Затем инкапсулируйте конец функции, чтобы отключить ссылку, а затем вызовите ее в функции жизненного цикла beforeDestroy, прежде чем компонент будет уничтожен.

Язык кода:html
копировать
end(){
    this.client.end()
    this.client = null
    console.log('Отключено');
}

Теперь запускаем проект и в консоли вы можете увидеть следующее

Это также можно увидеть в emqx

Затем мы инкапсулируем функцию sub, которая используется для подписки на сообщения и также вызывается в mount.

Язык кода:html
копировать
    //Подписываемся на сообщение
  sub() {
      let str = 'text'
      this.client.subscribe(str, { qos: 0 }, (err) => {
        if (!err) {
          console.log(`Тема: "${str}" Подписка на сообщение прошла успешно`)
        } else {
          console.log('Ошибка подписки на сообщение')
        }
      })
    },

Затем, после запуска, вы можете увидеть

Используйте nodejs для подключения к локальному серверу emqx.

Принцип аналогичен приведенному выше. Подробности смотрите в коде. Я написал комментарии, поэтому не буду их здесь объяснять. Сначала нужно установить mqtt, а затем импортировать его сюда. Я использую npm и mqtt. а затем поместите пакет mqtt. Файл mqtt копируется отдельно и используется. Функцию прослушивания можно использовать несколько раз для облегчения мониторинга и использования данных в других местах.

Язык кода:txt
копировать
const express = require('express')
const server = new express()
const mqtt = require('mqtt')  //Импортируйте здесь, обратитесь к методу импорта mqtt на официальном сайте npm. Я не стандартный.

// Конфигурация ссылки
const options = {
    clean: true, // true: чистая сессия, false: сохранить сеанс
    connectTimeout: 4000, // тайм-аут
    // Информация о сертификации
    clientId: '222222',
    username: 'test',
    password: '1234'
}
//ws://localhost:8083/mqtt
const connectUrl = 'mqtt://localhost:8083/mqtt'  
const client = mqtt.connect(connectUrl, options)


client.on('connect', () => {
    console.log('Соединение успешно')
})
client.on('reconnect', (error) => {
    console.log('Повторное подключение:', error)
})

client.on('error', (error) => {
    console.log('Ошибка подключения:', error)
})

const i = ['setM2','setM3']
//Подписываемся на сообщение setM3
// client.subscribe(i, (err) => {
//     console.log('Подписка на setM2 успешна')
// })

// client.on('message', (topic, message) => {
//     // const formattedTime = dayjs().format('YYYY-MM-DD HH:mm:ss')
//     console.log('Получено сообщение: ', topic, message.toString())
//     const data = JSON.parse(message)
//     console.log(data)
//   })

server.listen(6666, () => {
    console.log('Прослушивание порта 6666');
})

Подключитесь к бесплатному облачному серверу, предоставляемому платформой emqx.

Стоит отметить, что мы можем использовать облачный сервис, предоставляемый платформой emqx, а это означает, что нам нужно использовать npm только для установки пакета mqtt, а затем мы можем выполнять облачные услуги, и тогда обе стороны будут подключаться к этому бесплатному облаку. сервис, и тогда обе стороны подпишутся. По одной и той же теме можно добиться информационного взаимодействия.

Если вы подключаетесь к локальному серверу mqtt, обе стороны должны находиться в одной локальной сети, но облачные сервисы гораздо удобнее и игнорируют ограничения по расстоянию.

Все вышеперечисленное основано на локальном использовании, что на самом деле относительно неудобно, а платформа emqx также предоставляет людям бесплатный персональный выделенный облачный сервер, к которому также можно подключиться. Ниже будет продемонстрировано использование бесплатных облачных сервисов в Vue. на самом деле это тоже Просто смените локальный на облачный адрес

Язык кода:html
копировать
    this.client = mqtt.connect("ws://broker.emqx.io:8083/mqtt", options); //Вызов подключенного API

В nodejs адрес такой, есть отличия

Язык кода:javascript
копировать
        mqttClient = mqtt.connect('mqtt://broker.emqx.io:1883', options)

Обратите внимание, что перед подключением этими двумя способами вам необходимо установить ранее упомянутые зависимости.

я участвуюНа третьем этапе специального тренировочного лагеря Tencent Technology Creation 2023 года будет проводиться конкурс сочинений. Соберите команду, чтобы выиграть приз!

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose