Использование протокола MQTT в контроллерах ZONT: различия между версиями

Материал из Библиотека

Микро Лайн
Нет описания правки
Нет описания правки
 
(не показано 8 промежуточных версий этого же участника)
Строка 21: Строка 21:


Протокол ориентируется на простоту в использовании и легкую встраиваемость в любую систему, невысокую нагрузку на каналы связи и/или работу в условиях постоянной потери связи.
Протокол ориентируется на простоту в использовании и легкую встраиваемость в любую систему, невысокую нагрузку на каналы связи и/или работу в условиях постоянной потери связи.


===<font color="c45911">Область применения</font>===
===<font color="c45911">Область применения</font>===
Строка 34: Строка 35:
*<u>Системы работы с важными данными</u>. Например, учет биллинга мобильных операторов и провайдеров. Позволяют передавать информацию о текущем состоянии клиентских счетов без риска ее потери. Информация передается «точно один раз», что исключает также и ее дублирование, снижает количество аномалий.
*<u>Системы работы с важными данными</u>. Например, учет биллинга мобильных операторов и провайдеров. Позволяют передавать информацию о текущем состоянии клиентских счетов без риска ее потери. Информация передается «точно один раз», что исключает также и ее дублирование, снижает количество аномалий.


=== <font color="c45911">Особенности протокола MQTT</font> ===
 
===<font color="c45911">Особенности протокола MQTT</font>===
MQTT использует для организации соединения и передачи информации протокол TCP/IP. По умолчанию применяется порт 1883. Если требуется дополнительно обеспечить защиту данных, используется SSL. В этом случае для подключения применяется порт 8883.
MQTT использует для организации соединения и передачи информации протокол TCP/IP. По умолчанию применяется порт 1883. Если требуется дополнительно обеспечить защиту данных, используется SSL. В этом случае для подключения применяется порт 8883.


Строка 45: Строка 47:
В процессе взаимодействия принимает участие три категории пользователей:
В процессе взаимодействия принимает участие три категории пользователей:


* '''Издатели''': Это те, кто отправляют сообщения. Они указывают topic – тему. Как пример – датчики, снимающие показания с термометров или других устройств, подключенных к Интернету вещей.  
*'''Издатели''': Это те, кто отправляют сообщения. Они указывают topic – тему. Как пример – датчики, снимающие показания с термометров или других устройств, подключенных к Интернету вещей.
* '''Подписчики''': Конечные получатели информации. Они могут работать с разными издателями, в зависимости от того, на какие топики они подписаны. Как пример – аналитическая облачная система.  
*'''Подписчики''': Конечные получатели информации. Они могут работать с разными издателями, в зависимости от того, на какие топики они подписаны. Как пример – аналитическая облачная система.


* '''Брокер''': Это основной узел MQTT, обеспечивающий стабильную передачу информации между клиентами: издателями и подписчиками. Он получает информацию от издателя, обрабатывает ее, передает подписчикам, контролирует доставку. Роль брокера зачастую возлагается на сервер или контроллер.
*'''Брокер''': Это основной узел MQTT, обеспечивающий стабильную передачу информации между клиентами: издателями и подписчиками. Он получает информацию от издателя, обрабатывает ее, передает подписчикам, контролирует доставку. Роль брокера зачастую возлагается на сервер или контроллер.


Для взаимодействия с брокером предусмотрен набор стандартизированных сообщений:
Для взаимодействия с брокером предусмотрен набор стандартизированных сообщений:


* '''Connect''': установка доступа/соединения;
*'''Connect''': установка доступа/соединения;
* '''Disconnect''': разрыв соединения;
*'''Disconnect''': разрыв соединения;
* '''Publish''': публикация информации в topic;
*'''Publish''': публикация информации в topic;
* '''Subscribe''': подписка на topic;
*'''Subscribe''': подписка на topic;
* '''Unsubscribe''': отписка от topic.
*'''Unsubscribe''': отписка от topic.


Все эти действия выполняются с брокером.
Все эти действия выполняются с брокером.


=== <font color="c45911">Подключение</font> ===
 
===<font color="c45911">Подключение</font>===
Протокол MQTT поддерживается контроллерами [[H1000+ PRO.V2|H1000+PRO.V2]], [[H2000+ PRO.V2|H2000+PRO.V2]], C2000+ PRO (версии прошивки не ниже 420).
Протокол MQTT поддерживается контроллерами [[H1000+ PRO.V2|H1000+PRO.V2]], [[H2000+ PRO.V2|H2000+PRO.V2]], C2000+ PRO (версии прошивки не ниже 420).


Строка 67: Строка 70:
<font color="c45911">''Примечание:''</font> По каналу GSM (мобильная сеть) MQTT не работает.
<font color="c45911">''Примечание:''</font> По каналу GSM (мобильная сеть) MQTT не работает.


=== <font color="c45911">Настройка сервера</font> ===
 
===<font color="c45911">Настройка сервера</font>===
<font color="c45911">''Пример настройки адреса MQTT сервера:''</font>
<font color="c45911">''Пример настройки адреса MQTT сервера:''</font>


Строка 86: Строка 90:
mqtt://mqtt.eclipseprojects.io:1883
mqtt://mqtt.eclipseprojects.io:1883


=== <font color="c45911">Публикация данных</font> ===
 
Датчик
===<font color="c45911">Публикация данных</font>===
<font color="c45911">'''Датчик'''</font>
{| class="wikitable"
{| class="wikitable"
|+
|+
Строка 100: Строка 105:


a - доступность датчика (0-не доступен, 1-доступен)
a - доступность датчика (0-не доступен, 1-доступен)
<font color="c45911">'''Термодатчик'''</font>
{| class="wikitable"
|+
|{
“t”:23.5,
“a”:1
}
|}
t - температура по цельсию (значение float)
a - доступность датчика (0-не доступен, 1-доступен)
<font color="c45911">'''Радио термодатчик'''</font>
{| class="wikitable"
|+
|{
“t”:23.5,
“a”:1,
“h”:85,
“b” - 100,
“r” - 78
}
|}
t - температура по цельсию (значение float)
a - доступность датчика (0-не доступен, 1-доступен)
h - влажность
b - уровень заряда батареи
r - rssi уровень сигнала
<font color="c45911">'''Отопительный контур'''</font>
{| class="wikitable"
|+
|{
“s”:23.5,
“c”:1
}
|}
s - целевая температура
с - текущая температура
<font color="c45911">'''Реле'''</font>
{| class="wikitable"
|+
|{
“s”:1
}
|}
s - текущее состояние (0 - выкл, 1 - вкл)
<font color="c45911">'''Насос'''</font>
{| class="wikitable"
|+
|{
“s”:1
}
|}
s - текущее состояние (0 - выкл, 1 - вкл)
<font color="c45911">'''Смеситель'''</font>
{| class="wikitable"
|+
|{
“s”:1
}
|}
s - текущее состояние (0 - не активен, 1 - открытие, 2 - закрытие)
<font color="c45911">'''Пользовательские элементы управления'''</font>
{| class="wikitable"
|+
|{
“s”:1,
“t”:”Включено”
}
|}
s - текущее состояние (0 - не активен, 1 - активен, > 0 - значения для аналогового регулятора)
t - текстовое представление статуса (название из настроек для активного или неактивного состояния)
<font color="c45911">'''Адаптер цифровой шины котла'''</font>
{| class="wikitable"
|+
|{
“water”:45.6,
“dhw”:34.5,
“return”:30.4,
“modul”:99,
press:2.4,
state:1,
err:0
}
|}
water - температура теплоносителя
dhw - температура ГВС
return - температура обратки
modul - уровень модуляции %
press - давление теплоносителя
state - состояние котла (0-выкл 1-работает 2-ошибка)
===<font color="c45911">Подписка</font>===
Для управления устройством в получаемом сообщении должен быть выбран объект, которому предназначена команда.
Выбрать объект можно одним из трех способов:
*Заданием id объекта в поле данных сообщения.
{| class="wikitable"
|+
|{
“Id”:12345,
“cmd”: command
}
|}
*Заданием имени объекта в поле данных сообщения.
{| class="wikitable"
|+
|{
“name”: “Кнопка”,
“cmd”: command
}
|}
*Заданием имени объекта в поле имени topic.
<font color="c45911">''Пример имени топика:''</font>
'''ZONT/Дом/Управление/Кнопка'''
В настройках можно указать для подписки все подтопики топика обычным способом:
'''ZONT/Дом/Управление/#'''
<font color="c45911">'''Формат поля cmd для разных типов объектов'''</font>
{| class="wikitable"
|+
!Код
!Команда
!Описание
|-
| colspan="3" |<font color="c45911">'''Аналоговый вход'''</font>
|-
|0 N
|Установка значения N
|Для аналогового входа можно установить значение, для использования этой возможности в настройках входа не следует назначать привязку к реальному входу. (N - значение х 0,1 вольт)
|-
|1 N
|Установка значения N
|Для аналогового входа можно установить значение, для использования этой возможности в настройках входа не следует назначать привязку к реальному входу. (N - значение float)
|-
| colspan="3" |<font color="c45911">'''Аналоговый термодатчик'''</font>
|-
|N
|Установка температуры N
|N - значение в деци кельвинах (пример: 21.5 гр -> 2730 + 215 = 2945)
|-
|0 N
|Установка температуры N
|N - значение в деци кельвинах (пример: 21.5 гр -> 2730 + 215 = 2945)
|-
|1 N
|Установка температуры N
|N - значение в градусах цельсия float
|-
| colspan="3" |<font color="c45911">'''Цифровой термодатчик'''</font> (предпочтительнее использовать чем аналоговый)
|-
|N
|Установка температуры N
|N - значение в деци кельвинах (пример: 21.5 гр -> 2730 + 215 = 2945)
|-
|0 N
|Установка температуры N
|N - значение в деци кельвинах (пример: 21.5 гр -> 2730 + 215 = 2945)
|-
|1 N
|Установка температуры N
|N - значение в градусах цельсия float
|-
| colspan="3" |<font color="c45911">'''Охранная зона'''</font>
|-
|0
|Снятие с охраны
|
|-
|1
|Постановка на охрану
|
|-
|2
|Инверсия охраны
|
|-
| colspan="3" |<font color="c45911">'''Оповещение'''</font>
|-
|0
|Выполнить
|Производится настроенное оповещение
|-
| colspan="3" |<font color="c45911">'''Действие с выходом'''</font>
|-
|0
|Выполнить
|Выполняется действие с выходом
|-
| colspan="3" |<font color="c45911">'''Трёхходовой кран'''</font>
|-
|1
|Полностью открыть
|
|-
|2
|Полностью закрыть
|
|-
|3
|Открыть на шаг
|
|-
|4
|Закрыть на шаг
|
|-
| colspan="3" |<font color="c45911">'''Контур отопления'''</font>
|-
|T
|Установка температуры
|команда это значение температуры в децекельвинах
Пример: {“cmd”:3000}
|-
| colspan="3" |<font color="c45911">'''Режим терморегулирования'''</font>
|-
|0
|Установка режима
|
|-
| colspan="3" |<font color="c45911">'''Элемент управления (кнопки)'''</font>
|-
|0
|Действия по выключению
|Выполнение действий веб элемента
|-
|1
|Действия по включению
|Выполнение действий веб элемента
|-
| colspan="3" |<font color="c45911">'''Сирена / Индикатор / Реле / Насос'''</font>
|-
|0
|Выключение
|
|-
|1
|Включение
|
|}
Вид интерфейса настройки топиков
[[Файл:Настройка топиков MQTT.jpg]]
===<font color="c45911">Интеграция с Home Assistant</font>===
В настройках топика галочка – формат Home Assistant.
При использовании этой опции соответствующие элементы из ZONT автоматически отобразятся и синхронизируются с интерфейсом Home Assistant.
[[Файл:Формат Home Assistant.jpg]]
====<font color="c45911">Список поддерживаемых типов объектов</font>====
{| class="wikitable"
|+
!Объект ZONT
!Компонент HA
|-
|Датчик
|Sensor
|-
|Датчик температуры
|Sensor
|-
|Контур отопления
|Climate
|-
|Элемент пользователя - статус
|Binary_sensor
|-
|Элемент пользователя - простая кнопка
|Button
|-
|Элемент пользователя - сложная кнопка
|Switch
|-
|Элемент пользователя - аналоговый регулятор
|Valve
|-
|Насос
|Switch
|-
|Реле
|Switch
|}
<font color="c45911">''Примечание:''</font> В именах топиков допускается использование русских и английских букв, цифр, пробелов и других стандартных ASCII символов.
Не допускается использование нестандартных символов (например символа градусов ° ), в этом случае соединение с брокером может быть разорвано.
====<font color="c45911">Решения для Home Assistant (примеры)</font>====
=====<font color="c45911">Пример добавления датчика из ZONT в HA</font>=====
<font color="c45911">''Запись в файл конфигурации HA:''</font>
{| class="wikitable"
|+
|mqtt:
sensor:
- name: "MQTT_Миша"
state_topic: "HA/ZONT/TS/TD/DT_Миша"
suggested_display_precision: 1
unit_of_measurement: "°C"
value_template: [[Файл:Value.jpg|119x119пкс]]
|}
<font color="c45911">''Пояснения:''</font>
name - имя какое хотим
suggested_display_precision - знаки после запятой
state_topic - имя топика
value_template: [[Файл:Value.jpg|127x127пкс]]
"value_json." - способ обработки сообщения
t - имя ключа в json по которому получаем значение
=====<font color="c45911">Пример трансляции значения датчика из HA в ZONT</font>=====
Создается автоматизация – Настройки – Автоматизация и сцены – Создать – Когда – ставим условие, на которое будет срабатывать отправка в топик Шаблон значения:
[[Файл:Cmd mqtt.jpg|855x855пкс]]
[[Файл:Cmd2 mqtt.jpg|794x794пкс]]
[[Файл:Шаблон MQTT.jpg]]

Текущая версия от 11:49, 16 октября 2024

О документе

Уважаемые пользователи!

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

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

Если Вы обнаружили ошибки и/или неточности — отправьте, пожалуйста, описание проблемы с указанием страницы документа на e-mail: support@microline.ru.

Актуальная версия документа также доступна на сайте zont.online в разделе "Поддержка. Техническая документация". Документ доступен для чтения и скачивания в формате *.pdf.


Общие сведения

Назначение и применение MQTT

MQTT (Message Queue Telemetry Transport) – небольшой, открытый и маловесный протокол обмена данными. Он используется для передачи информации между удаленными локациями в случае ограниченной пропускной способности канала и небольшого размера кода. Эти особенности позволяют применять его в Промышленном интернете вещей (IIoT), при Машинно-Машинном взаимодействии (М2М).

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

Протокол ориентируется на простоту в использовании и легкую встраиваемость в любую систему, невысокую нагрузку на каналы связи и/или работу в условиях постоянной потери связи.


Область применения

Основное предназначение протокола MQTT – работа с телеметрией – получением данных от различных датчиков и устройств.

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

Наиболее часто на практике протокол MQTT используется в:

  • Системах мониторинга инженерных систем и оборудования. На различном промышленном оборудовании, агрегатах и трубопроводах устанавливаются датчики, которые контролируют работу оборудования в режиме реального времени: снимают показания и передают значения в центр обработки данных. Все это позволяет мгновенно реагировать на проблемы, минимизировать поломки оборудования, исключить аварии и простои.
  • Системах мониторинга окружающей среды. Позволяет контролировать климатические показатели, температуру, влажность, давление, скорость ветра, наличие осадков, сейсмическую активность и устойчивость к ней зданий и сооружений. В удаленных регионах размещаются маломощные датчики, которые с заданным интервалом снимают информацию и передают ее на обработку через MQTT брокер.
  • Системы работы с важными данными. Например, учет биллинга мобильных операторов и провайдеров. Позволяют передавать информацию о текущем состоянии клиентских счетов без риска ее потери. Информация передается «точно один раз», что исключает также и ее дублирование, снижает количество аномалий.


Особенности протокола MQTT

MQTT использует для организации соединения и передачи информации протокол TCP/IP. По умолчанию применяется порт 1883. Если требуется дополнительно обеспечить защиту данных, используется SSL. В этом случае для подключения применяется порт 8883.

MQTT ориентирован на обмен сообщениями между устройствами по принципу «издатель – подписчик».

Как работает MQTT.jpg

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

В процессе взаимодействия принимает участие три категории пользователей:

  • Издатели: Это те, кто отправляют сообщения. Они указывают topic – тему. Как пример – датчики, снимающие показания с термометров или других устройств, подключенных к Интернету вещей.
  • Подписчики: Конечные получатели информации. Они могут работать с разными издателями, в зависимости от того, на какие топики они подписаны. Как пример – аналитическая облачная система.
  • Брокер: Это основной узел MQTT, обеспечивающий стабильную передачу информации между клиентами: издателями и подписчиками. Он получает информацию от издателя, обрабатывает ее, передает подписчикам, контролирует доставку. Роль брокера зачастую возлагается на сервер или контроллер.

Для взаимодействия с брокером предусмотрен набор стандартизированных сообщений:

  • Connect: установка доступа/соединения;
  • Disconnect: разрыв соединения;
  • Publish: публикация информации в topic;
  • Subscribe: подписка на topic;
  • Unsubscribe: отписка от topic.

Все эти действия выполняются с брокером.


Подключение

Протокол MQTT поддерживается контроллерами H1000+PRO.V2, H2000+PRO.V2, C2000+ PRO (версии прошивки не ниже 420).

MQTT на контроллерах ZONT работает по каналам связи Wi-Fi и Ethernet.

Примечание: По каналу GSM (мобильная сеть) MQTT не работает.


Настройка сервера

Пример настройки адреса MQTT сервера:

mqtt://username:password@mqtt.eclipseprojects.io:1883

Адрес : mqtt.eclipseprojects.io

Порт: 1883

Имя пользователя: username

Пароль: password

Пример настройки MQTT.jpg

Примечание: Если имя пользователя и пароль не используются, то их можно не указывать:

mqtt://mqtt.eclipseprojects.io:1883


Публикация данных

Датчик

{

“v”:12.3,

“a”:1

}

v - напряжение Вольты (значение float)

a - доступность датчика (0-не доступен, 1-доступен)


Термодатчик

{

“t”:23.5,

“a”:1

}

t - температура по цельсию (значение float)

a - доступность датчика (0-не доступен, 1-доступен)


Радио термодатчик

{

“t”:23.5,

“a”:1,

“h”:85,

“b” - 100,

“r” - 78

}

t - температура по цельсию (значение float)

a - доступность датчика (0-не доступен, 1-доступен)

h - влажность

b - уровень заряда батареи

r - rssi уровень сигнала


Отопительный контур

{

“s”:23.5,

“c”:1

}

s - целевая температура

с - текущая температура


Реле

{

“s”:1

}

s - текущее состояние (0 - выкл, 1 - вкл)


Насос

{

“s”:1

}

s - текущее состояние (0 - выкл, 1 - вкл)


Смеситель

{

“s”:1

}

s - текущее состояние (0 - не активен, 1 - открытие, 2 - закрытие)


Пользовательские элементы управления

{

“s”:1,

“t”:”Включено”

}

s - текущее состояние (0 - не активен, 1 - активен, > 0 - значения для аналогового регулятора)

t - текстовое представление статуса (название из настроек для активного или неактивного состояния)


Адаптер цифровой шины котла

{

“water”:45.6,

“dhw”:34.5,

“return”:30.4,

“modul”:99,

press:2.4,

state:1,

err:0

}

water - температура теплоносителя

dhw - температура ГВС

return - температура обратки

modul - уровень модуляции %

press - давление теплоносителя

state - состояние котла (0-выкл 1-работает 2-ошибка)


Подписка

Для управления устройством в получаемом сообщении должен быть выбран объект, которому предназначена команда.

Выбрать объект можно одним из трех способов:

  • Заданием id объекта в поле данных сообщения.
{

“Id”:12345,

“cmd”: command

}

  • Заданием имени объекта в поле данных сообщения.
{

“name”: “Кнопка”,

“cmd”: command

}

  • Заданием имени объекта в поле имени topic.

Пример имени топика:

ZONT/Дом/Управление/Кнопка

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

ZONT/Дом/Управление/#


Формат поля cmd для разных типов объектов

Код Команда Описание
Аналоговый вход
0 N Установка значения N Для аналогового входа можно установить значение, для использования этой возможности в настройках входа не следует назначать привязку к реальному входу. (N - значение х 0,1 вольт)
1 N Установка значения N Для аналогового входа можно установить значение, для использования этой возможности в настройках входа не следует назначать привязку к реальному входу. (N - значение float)
Аналоговый термодатчик
N Установка температуры N N - значение в деци кельвинах (пример: 21.5 гр -> 2730 + 215 = 2945)
0 N Установка температуры N N - значение в деци кельвинах (пример: 21.5 гр -> 2730 + 215 = 2945)
1 N Установка температуры N N - значение в градусах цельсия float
Цифровой термодатчик (предпочтительнее использовать чем аналоговый)
N Установка температуры N N - значение в деци кельвинах (пример: 21.5 гр -> 2730 + 215 = 2945)
0 N Установка температуры N N - значение в деци кельвинах (пример: 21.5 гр -> 2730 + 215 = 2945)
1 N Установка температуры N N - значение в градусах цельсия float
Охранная зона
0 Снятие с охраны
1 Постановка на охрану
2 Инверсия охраны
Оповещение
0 Выполнить Производится настроенное оповещение
Действие с выходом
0 Выполнить Выполняется действие с выходом
Трёхходовой кран
1 Полностью открыть
2 Полностью закрыть
3 Открыть на шаг
4 Закрыть на шаг
Контур отопления
T Установка температуры команда это значение температуры в децекельвинах

Пример: {“cmd”:3000}

Режим терморегулирования
0 Установка режима
Элемент управления (кнопки)
0 Действия по выключению Выполнение действий веб элемента
1 Действия по включению Выполнение действий веб элемента
Сирена / Индикатор / Реле / Насос
0 Выключение
1 Включение

Вид интерфейса настройки топиков

Настройка топиков MQTT.jpg


Интеграция с Home Assistant

В настройках топика галочка – формат Home Assistant.

При использовании этой опции соответствующие элементы из ZONT автоматически отобразятся и синхронизируются с интерфейсом Home Assistant.

Формат Home Assistant.jpg


Список поддерживаемых типов объектов

Объект ZONT Компонент HA
Датчик Sensor
Датчик температуры Sensor
Контур отопления Climate
Элемент пользователя - статус Binary_sensor
Элемент пользователя - простая кнопка Button
Элемент пользователя - сложная кнопка Switch
Элемент пользователя - аналоговый регулятор Valve
Насос Switch
Реле Switch

Примечание: В именах топиков допускается использование русских и английских букв, цифр, пробелов и других стандартных ASCII символов.

Не допускается использование нестандартных символов (например символа градусов ° ), в этом случае соединение с брокером может быть разорвано.


Решения для Home Assistant (примеры)

Пример добавления датчика из ZONT в HA

Запись в файл конфигурации HA:

mqtt:

sensor:

- name: "MQTT_Миша"

state_topic: "HA/ZONT/TS/TD/DT_Миша"

suggested_display_precision: 1

unit_of_measurement: "°C"

value_template: Value.jpg

Пояснения:

name - имя какое хотим

suggested_display_precision - знаки после запятой

state_topic - имя топика

value_template: Value.jpg

"value_json." - способ обработки сообщения

t - имя ключа в json по которому получаем значение


Пример трансляции значения датчика из HA в ZONT

Создается автоматизация – Настройки – Автоматизация и сцены – Создать – Когда – ставим условие, на которое будет срабатывать отправка в топик Шаблон значения:

Cmd mqtt.jpg

Cmd2 mqtt.jpg


Шаблон MQTT.jpg