Как настроить MQTT подключение в GRED (Node-RED)


#1

Основным протоколом платформы GreenPL, который используется для работы устройств IoT является MQTT.
Ваши устройства вышли в сеть, появились в разделе “Устройства”, а датчики передают данные, сохраняющиеся в переменных (находятся внутри устройств).
Следующим шагом станет настройка MQTT подключения в GRED (GreenPL Node-RED), чтобы настроить визуальное отображение данных, алгоритмы контроля исполнительных устройств, а также связать DIY девайсы с другими службами и сервисами (например, Sonoff).

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

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

Разберем подключение к данным с датчика с помощью блока MQTT Вход.
Нам потребуется блок, изображенный ниже:
image

Перетащим его на лист.

Внимательный пользователь заметит два значка в правой верхней части блока.

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

Перейдем в свойства с помощью двойного нажатия на блок:

Сервер - MQTT Брокер, к которому осуществляется подключение. В стандартном случае мы будем использовать MQTT брокер GreenPL.
Топик - аналог HTTP адреса в протоколе MQTT. Позволяет получить доступ к той или иной переменной (как для получения, так и для отправки данных). Имеет вид иерархическую структуру. Пример MQTT топика для датчика температуры: /devices/arduino/temperature/lv, где arduino - устройство, temperature - переменная, lv - суффикс для получения последнего значения (last value).
QoS - качество обслуживания MQTT. Существует 3 уровня:

  1. QoS 0 At most once. На этом уровне издатель один раз отправляет сообщение брокеру и не ждет подтверждения от него, то есть отправил и забыл.
  2. QoS 1 At least once. Этот уровень гарантирует, что сообщение точно будет доставлено брокеру, но есть вероятность дублирования сообщений от издателя. После получения дубликата сообщения, брокер снова рассылает это сообщение подписчикам, а издателю снова отправляет подтверждение о получении сообщения. Если издатель не получил PUBACK сообщения от брокера, он повторно отправляет этот пакет, при этом в DUP устанавливается «1».
  3. QoS 2 Exactly once . На этом уровне гарантируется доставка сообщений подписчику и исключается возможное дублирование отправленных сообщений.
    (Информация о качестве обслуживания позаимствована на сайте https://ipc2u.ru/articles/prostye-resheniya/chto-takoe-mqtt/#kachestvo).

Название. Поле для ввода имени блока на листе. Если имя не было введено, тогда будет использоваться строка “Топик”.

Чтобы найти топик переменной (нашего подопытного датчика температуры) перейдите в раздел “Устройства”, затем выберите подключенное устройство (у меня Arduino Uno).

Затем перейдите в датчик температуры (у вас может быть любой другой).

После загрузки интерфейса переменной (нашего подопытного датчика) вы увидите (или нет) данные в виде графика. Данные будут доступны только в том случае, если датчик высылал показания на платформу или вы добавили показания самостоятельно с помощью формы “Управление” в левой части интерфейса, введя число. Я отправил вручную несколько показаний для наглядности:

В левой части интерфейса, на панели свойств, расположена строка “Топик”. Необходимо скопировать все содержимое строки и вставить в свойства блока MQTT в GRED.

Внимание!

Если вы используете блок MQTT Вход и желаете получать с датчика численное значение его показаний без Meta данных, следует в конце топика указывать суффикс “/lv”!
Например, /devices/arduino/temperature/lv

Остается только добавить MQTT подключение.
Это действие необходимо сделать ОДИН (!) раз. Впоследствии, можно пользоваться уже настроенным MQTT подключением!

Нажмите на значок карандаша справа от надписи “Добавить новый mqtt-брокер”.
image

Откроется панель настройки MQTT брокера.

Название - имя вашего MQTT подключения. Можно назвать “Мое подключение”.
Сервер - введите по умолчанию “api.greenpl.ru” (без кавычек).

Затем, перейдите на вкладку “Безопасность”.

Имя пользователя - MQTT API Токен, необходим для аутентификации на MQTT брокере.
Пароль - любая последовательность символов, например “1”.

Примечание: MQTT API Токен можно взять в разделе “Настройки”, вкладка “API”.

После заполнения всех полей настройки MQTT подключения нажмите на красную кнопку “Добавить”, затем кнопку “Готово”.

В правом верхнем углу окна смело жмем красную кнопку “Отправить на сервер”.
Вы увидите всплывающее окно с зеленой пометкой, что все прошло отлично!

Блок MQTT будет помечен зеленым значком снизу с надписью “Подключено”.

Перенесите на лист блок “Отладить” и соедините его с блоком MQTT, после чего отправьте изменения на сервер с помощью красной кнопки “Отправить на сервер” в верхнем левом углу интерфейса.

Переключитесь в правой панели с вкладки “Инфо” на вкладку “Отладка”. Вы увидите поступающие данные с датчика температуры.

Данные успешно принимаются и регистрируются. В дальнейшем, можно составлять алгоритмы для вывода данных на информационную панель или для контроля исполнительных устройств. В случае температуры: управление нагревателем, как вариант :hugs:

А мы, тем временем, продолжаем делать интернет вещей доступнее)