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

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

Микро Лайн
Нет описания правки
Нет описания правки
 
(не показано 13 промежуточных версий этого же участника)
Строка 5: Строка 5:
Уважаемые пользователи!  
Уважаемые пользователи!  


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


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


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


Актуальная версия документа также доступна на сайте [https://zont.online zont.online] в разделе "[https://zont.online/manual Поддержка. Техническая документация]". Документ доступен для чтения и скачивания в формате *.pdf.
Актуальная версия документа также доступна на сайте [https://zont.online zont.online] в разделе "[https://zont.online/manual Поддержка. Техническая документация]". Документ доступен для чтения и скачивания в формате *.pdf.
Строка 16: Строка 16:
=='''Общие сведения'''==
=='''Общие сведения'''==
===<font color="c45911">Назначение и применение MQTT</font>===
===<font color="c45911">Назначение и применение MQTT</font>===
MQTT (Message Queue Telemetry Transport) – небольшой, открытый и маловесный протокол обмена данными. Он используется для передачи информации между удаленными локациями в случае ограниченной пропускной способности канала и небольшого размера кода. Эти особенности позволяют применять его в Промышленном интернете вещей (IIoT), при Машинно-Машинном взаимодействии (М2М).  
MQTT (Message Queue Telemetry Transport) – это протокол обмена сообщениями, который часто используется в IoT (интернете вещей) для организации связи между устройствами и серверами.  


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


Протокол ориентируется на простоту в использовании и легкую встраиваемость в любую систему, невысокую нагрузку на каналы связи и/или работу в условиях постоянной потери связи.
===<font color="c45911">Область применения</font>===
MQTT используется в системах умного дома для решения различных задач:
 
'''''Управление устройствами''''': Лампы, термостаты, жалюзи, датчики движения и другие устройства могут отправлять и получать команды через MQTT. Например, термостат может публиковать текущую температуру в доме, а также принимать команды на изменение установленной температуры.
 
'''''Датчики''''': MQTT может быть использован датчиками для передачи данных в центральную систему. Это могут быть датчики температуры, влажности, освещенности, движения и т. д.
 
'''''Уведомления''''': Система умного дома может использовать MQTT для отправки уведомлений пользователю о различных событиях, таких как обнаружение движения, открытие двери или протечка воды.
 
'''''Интеграция с внешними службами''''': MQTT может быть мостом между устройствами умного дома и облачными сервисами или другими внешними системами. Например, умный дом может автоматически включать или прерывать полив, если прогноз погоды сообщает о дожде.
 
'''''Межустройственное взаимодействие''''': Устройства могут общаться друг с другом через MQTT, чтобы координировать свои действия. Например, когда вы включаете режим охраны, уходя из дома, свет и другие потребители электроэнергии могут автоматически выключаться.
 
'''''Интеграция оборудования разных производителей''''': Благодаря стандартизации MQTT устройства разных производителей могут легко взаимодействовать друг с другом.
 
'''''Безопасность''''': С использованием SSL/TLS MQTT может обеспечить шифрование и аутентификацию, что критично для умных домов, чтобы обеспечить приватность и безопасность пользователей.
 
Одним из популярных решений на основе MQTT для умного дома является '''Home Assistant''', платформа автоматизации дома с открытым исходным кодом, которая поддерживает MQTT и множество других протоколов и технологий.
 
 
===<font color="c45911">Основные понятия MQTT</font>===
MQTT имеет клиент-серверную архитектуру. Обмен сообщениями происходит через центральный сервер (Broker – Брокер). Клиенты не могут общаться напрямую друг с другом, и весь обмен данными происходит через Брокера.
 
Клиенты могут выступать в роли поставщиков данных (Publisher – Издатель) и в роли получателей данных (Subscriber – Подписчик).
 
Стандартный порт MQTT-брокера для нешифрованных входящих TCP-соединений – 1883, а для использования защищенного SSL-подключения – 8883. Последний требует настройки использования клиентом и брокером сертификатов шифрования соединения.
 
'''Брокер''' – это центральный узел MQTT, обеспечивающий маршрутизацию сообщений между клиентами. Обмен данными между клиентами происходит только через брокера. В качестве брокера может выступать серверное ПО или контроллер. В его задачи входит получение сообщений от клиентов, временное хранение и доставка данных клиентам, контроль за доставкой сообщений.
 
'''Издатели / Подписчики''' – устройства интернета вещей выступающие в качестве клиентов и взаимодействующие с брокером напрямую. Издатели публикуют данные MQTT, например рассылают текущие параметры окружающей среды, а Подписчики эти данные используют. В частности, в роли подписчика выступает увлажнитель воздуха в системе умного дома: датчик влажности публикует свои показатели, а увлажнитель на их основе регулирует интенсивность своей работы.
 
'''Топик (канал)''' – предназначен для разделения сообщений. Это удобный механизм, позволяющий называть датчики. Хорошей практикой организации топиков является разделение по уровням от общего к частному. Например:
 
[[Файл:Топик MQTT.jpg|353x353пкс]]
 
В схеме MQTT-клиенты не знают о существовании друг друга, и не взаимодействуют напрямую.
 
Брокер может получать данные из разных источников, возвращать подписчикам.
 
[[Файл:Брокер MQTT.jpg|808x808пкс]]
 
В протоколе MQTT гарантия доставки определяется параметром QoS (Quality of service), который указывается при отправке сообщения:
 
*0 – максимум один раз. Подтверждение доставки не производится. Подходит для передачи телеметрической информации от устройств, потеря которой не критична.
*1 – хотя бы один раз. Производится однократное подтверждение доставки, но при нестабильном соединении возможно дублирование переданного сообщения. Подходит для отправки важной телеметрии или команд, которые устанавливают конкретное значение.
*2 – ровно один раз. Производится несколько подтверждений доставки для исключения дублирования. Подходит для инициализации действий повторение которых недопустимо или команд на увеличение/уменьшение значений параметров. Наиболее затратный тип доставки по времени и использованию трафика.
 
 
=='''Применение протокола MQTT в контроллерах ZONT'''==
Протокол MQTT поддерживается контроллерами ZONT, модели [[H1000+ PRO.V2]], [[H2000+ PRO.V2]], С2000+ PRO, начиная с 420-ой версии прошивки.
 
Обмен данными контроллера с другими устройствами по протоколу MQTT работает ТОЛЬКО по каналам связи Wi-Fi и Ethernet.
 
<font color="c45911">'''''Примечание:'''''</font> По GSM каналу (мобильная сеть) MQTT не работает.
 
 
===<font color="c45911">Настройка Брокера (MQTT сервера)</font>===
<font color="c45911">''Запуск собственного MQTT брокера:''</font>
 
В этой инструкции мы возьмём популярный MQTT-брокер с открытым исходным кодом - Mosquitto. Предполагаем, что наш компьютер находится в одной локальной сети с подключаемыми устройствами.
 
'''Настройка на Windows'''
 
*Скачать установщик Windows для 32 или 64 битной системы с https://mosquitto.org/download/ и выполнить установку приложения
 
[[Файл:Установка Mosquitto (1).jpg|568x568пкс]]  [[Файл:Установка Mosquitto (2).jpg|570x570пкс]]
 
[[Файл:Установка Mosquitto (3).jpg|567x567пкс]]  [[Файл:Установка Mosquitto (4).jpg|564x564пкс]]
 
*Открыть файл C:\Program Files\mosquitto\mosquitto.conf и добавить в самый конец файла:
 
log_type all


listener 1883


===<font color="c45911">Область применения</font>===
protocol mqtt
Основное предназначение протокола MQTT – работа с телеметрией – получением данных от различных датчиков и устройств.
 
allow_anonymous true
 
*Открыть Диспетчер задач -> вкладка Сервисы -> в контекстном меню строки mosquitto выбрать Перезагрузить
 
*Открыть Брандмауэр Windows и создать правило для Входящих соединений:
 
Тип правила: Порт
 
Протокол: TCP, Указать порт: 1883
 
Действие: Разрешить соединение
 
Профиль: выбрать все три


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


Наиболее часто на практике протокол MQTT используется в:
*Теперь брокер доступен в локальной сети на порту 1883
*Открыть меню Пуск -> Служебные - Windows -> Командная строка
*Узнать IP адрес компьютера можно выполнив в командной строке: ipconfig | findstr "IPv4"
*Ссылкой для подключения тогда будет:


*<u>Системах мониторинга инженерных систем и оборудования</u>. На различном промышленном оборудовании, агрегатах и трубопроводах устанавливаются датчики, которые контролируют работу оборудования в режиме реального времени: снимают показания и передают значения в центр обработки данных. Все это позволяет мгновенно реагировать на проблемы, минимизировать поломки оборудования, исключить аварии и простои.
<nowiki>mqtt://{{IP-адрес компьютера в локальной сети}}:1883</nowiki>


*<u>Системах мониторинга окружающей среды</u>. Позволяет контролировать климатические показатели, температуру, влажность, давление, скорость ветра, наличие осадков, сейсмическую активность и устойчивость к ней зданий и сооружений. В удаленных регионах размещаются маломощные датчики, которые с заданным интервалом снимают информацию и передают ее на обработку через MQTT брокер.
Например, mqtt://192.168.10.273:1883
*<u>Системы работы с важными данными</u>. Например, учет биллинга мобильных операторов и провайдеров. Позволяют передавать информацию о текущем состоянии клиентских счетов без риска ее потери. Информация передается «точно один раз», что исключает также и ее дублирование, снижает количество аномалий.




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


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


[[Файл:Как работает MQTT.jpg|846x846пкс]]
sudo apt update


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


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


*'''Издатели''': Это те, кто отправляют сообщения. Они указывают topic – тему. Как пример – датчики, снимающие показания с термометров или других устройств, подключенных к Интернету вещей.
<nowiki>*</nowiki> Для других дистрибутивов пакет mosquitto должен быть доступен в соответствующих им репозиториях. Также имеется возможность использовать Docker контейнер: <nowiki>https://hub.docker.com/_/eclipse-mosquitto</nowiki>
*'''Подписчики''': Конечные получатели информации. Они могут работать с разными издателями, в зависимости от того, на какие топики они подписаны. Как пример – аналитическая облачная система.


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


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


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


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


allow_anonymous true


===<font color="c45911">Подключение</font>===
*Перезагрузить сервис выполнив: sudo systemctl restart mosquitto
Протокол MQTT поддерживается контроллерами [[H1000+ PRO.V2|H1000+PRO.V2]], [[H2000+ PRO.V2|H2000+PRO.V2]], C2000+ PRO (версии прошивки не ниже 420).
*Теперь брокер доступен в локальной сети на порту 1883
*Узнать IP адреса компьютера можно выполнив: hostname -I
*Ссылкой для подключения тогда будет:


MQTT на контроллерах ZONT работает по каналам связи Wi-Fi и Ethernet.
<nowiki>mqtt://{{IP-адрес компьютера в локальной сети}}:1883</nowiki>


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


Например, mqtt://192.168.10.29:1883


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


mqtt://username:password@mqtt.eclipseprojects.io:1883
mqtt://username:password@mqtt.eclipseprojects.io:1883
Строка 92: Строка 174:


===<font color="c45911">Публикация данных</font>===
===<font color="c45911">Публикация данных</font>===
Имя топика формируется из имени настройки топика/имя объекта.
Формат передаваемых данных:
<font color="c45911">'''Датчик'''</font>
<font color="c45911">'''Датчик'''</font>
{| class="wikitable"
{| class="wikitable"
Строка 102: Строка 188:
}
}
|}
|}
где:
v - напряжение Вольты (значение float)
v - напряжение Вольты (значение float)


Строка 111: Строка 199:
|+
|+
|{
|{
“t”:23.5,
"t":23.5,


“a”:1
"a":1


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


Строка 126: Строка 216:
|+
|+
|{
|{
“t”:23.5,
"t": 23.5,


“a”:1,
"a": 1,


“h”:85,
"h": 85,


“b” - 100,
"b": 100,


“r” - 78
"r": 78


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


Строка 153: Строка 245:
|+
|+
|{
|{
“s”:23.5,
"s": 23.5,


“c”:1
"c": 1


}
}
|}
|}
где:
s - целевая температура
s - целевая температура


Строка 168: Строка 262:
|+
|+
|{
|{
“s”:1
"s": 1


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


Строка 179: Строка 275:
|+
|+
|{
|{
“s”:1
"s": 1


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


Строка 190: Строка 288:
|+
|+
|{
|{
“s”:1
"s": 1


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


Строка 201: Строка 301:
|+
|+
|{
|{
“s”:1,
"s": 1,


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


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


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




Строка 216: Строка 322:
|+
|+
|{
|{
“water”:45.6,
"water": 45.6,


“dhw”:34.5,
"dhw": 34.5,


“return”:30.4,
"return": 30.4,


“modul”:99,
"modul": 99,


press:2.4,
"press": 2.4,


state:1,
"state": 1,


err:0
"err": 0


}
}
|}
|}
где:
water - температура теплоносителя
water - температура теплоносителя


Строка 243: Строка 351:


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




Строка 255: Строка 365:
|+
|+
|{
|{
"Id": 12345,


“Id”:12345,
"cmd": "$command"
 
“cmd”: command


}
}
Строка 268: Строка 377:
|+
|+
|{
|{
"name": "Кнопка",


“name”: “Кнопка”,
"cmd": "$command"
 
“cmd”: command


}
}
Строка 287: Строка 395:




<font color="c45911">'''Формат поля cmd для разных типов объектов'''</font>
===<font color="c45911">Формат поля cmd для разных типов объектов</font>===
{| class="wikitable"
{| class="wikitable"
|+
|+
Строка 380: Строка 488:
|T
|T
|Установка температуры
|Установка температуры
|команда это значение температуры в децекельвинах
|команда это значение температуры в децикельвинах
Пример: {“cmd”:3000}
Пример: {“cmd”:3000}
|-
|-
Строка 414: Строка 522:




===<font color="c45911">Интеграция с Home Assistant</font>===
=='''Интеграция с Home Assistant'''==
В настройках топика галочка – формат Home Assistant.
Прежде чем приступить к интеграции, необходимо убедиться, что в профиле в Home Assistant включен "расширенный режим".
 
В настройках топика устройства ZONT необходимо активировать формат Home Assistant.
 
[[Файл:Формат Home Assistant (1).jpg|695x695пкс]]


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




====<font color="c45911">Список поддерживаемых типов объектов</font>====
===<font color="c45911">Список поддерживаемых типов объектов</font>===
{| class="wikitable"
{| class="wikitable"
|+
|+
Строка 460: Строка 572:




====<font color="c45911">Решения для Home Assistant (примеры)</font>====
===<font color="c45911">Решения для Home Assistant (примеры)</font>===


=====<font color="c45911">Пример добавления датчика из ZONT в HA</font>=====
====<font color="c45911">Пример добавления датчика из ZONT в HA</font>====
<font color="c45911">''Запись в файл конфигурации HA:''</font>
<font color="c45911">''Запись в файл конфигурации HA:''</font>
{| class="wikitable"
{| class="wikitable"
Строка 477: Строка 589:
unit_of_measurement: "°C"  
unit_of_measurement: "°C"  


value_template: [[Файл:Value.jpg|119x119пкс]]
value_template: <nowiki>"{{ value_json.t }}"</nowiki>
|}
|}
<font color="c45911">''Пояснения:''</font>  
<font color="c45911">''Пояснения:''</font>  


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


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


state_topic - имя топика  
state_topic - имя топика


value_template: [[Файл:Value.jpg|127x127пкс]]
value_template: <nowiki>"{{ value_json.t }}"</nowiki>


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


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




=====<font color="c45911">Пример трансляции значения датчика из HA в ZONT</font>=====
====<font color="c45911">Пример трансляции значения датчика из HA в ZONT</font>====
Создается автоматизация – Настройки – Автоматизация и сцены – Создать – Когда – ставим условие, на которое будет срабатывать отправка в топик Шаблон значения:  
Создается автоматизация – Настройки – Автоматизация и сцены – Создать – Когда – ставим условие, на которое будет срабатывать отправка в топик
 
Шаблон значения:  
 
"cmd": <nowiki>{{ (((states('sensor.datchik_temperatury_spalnia_temperature') | float) * 10 + 2730 ) | int) | string }}</nowiki>
 
тут что в <nowiki>{{* }}</nowiki>
 
states('sensor.datchik_temperatury_spalnia_temperature') - имя сенсора (датчика)
 
внутри HA


[[Файл:Cmd mqtt.jpg|855x855пкс]]
| float |int |string переводы по типам переменных


[[Файл:Cmd2 mqtt.jpg|794x794пкс]]
<nowiki>"cmd": {{ 1 (states('sensor.datchik_temperatury_spalnia_temperature')) | string }}</nowiki>




[[Файл:Шаблон MQTT.jpg]]
[[Файл:Шаблон MQTT.jpg]]

Текущая версия от 13:26, 2 декабря 2024

О документе

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

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

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

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

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


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

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

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


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

MQTT используется в системах умного дома для решения различных задач:

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

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

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

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

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

Интеграция оборудования разных производителей: Благодаря стандартизации MQTT устройства разных производителей могут легко взаимодействовать друг с другом.

Безопасность: С использованием SSL/TLS MQTT может обеспечить шифрование и аутентификацию, что критично для умных домов, чтобы обеспечить приватность и безопасность пользователей.

Одним из популярных решений на основе MQTT для умного дома является Home Assistant, платформа автоматизации дома с открытым исходным кодом, которая поддерживает MQTT и множество других протоколов и технологий.


Основные понятия MQTT

MQTT имеет клиент-серверную архитектуру. Обмен сообщениями происходит через центральный сервер (Broker – Брокер). Клиенты не могут общаться напрямую друг с другом, и весь обмен данными происходит через Брокера.

Клиенты могут выступать в роли поставщиков данных (Publisher – Издатель) и в роли получателей данных (Subscriber – Подписчик).

Стандартный порт MQTT-брокера для нешифрованных входящих TCP-соединений – 1883, а для использования защищенного SSL-подключения – 8883. Последний требует настройки использования клиентом и брокером сертификатов шифрования соединения.

Брокер – это центральный узел MQTT, обеспечивающий маршрутизацию сообщений между клиентами. Обмен данными между клиентами происходит только через брокера. В качестве брокера может выступать серверное ПО или контроллер. В его задачи входит получение сообщений от клиентов, временное хранение и доставка данных клиентам, контроль за доставкой сообщений.

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

Топик (канал) – предназначен для разделения сообщений. Это удобный механизм, позволяющий называть датчики. Хорошей практикой организации топиков является разделение по уровням от общего к частному. Например:

Топик MQTT.jpg

В схеме MQTT-клиенты не знают о существовании друг друга, и не взаимодействуют напрямую.

Брокер может получать данные из разных источников, возвращать подписчикам.

Брокер MQTT.jpg

В протоколе MQTT гарантия доставки определяется параметром QoS (Quality of service), который указывается при отправке сообщения:

  • 0 – максимум один раз. Подтверждение доставки не производится. Подходит для передачи телеметрической информации от устройств, потеря которой не критична.
  • 1 – хотя бы один раз. Производится однократное подтверждение доставки, но при нестабильном соединении возможно дублирование переданного сообщения. Подходит для отправки важной телеметрии или команд, которые устанавливают конкретное значение.
  • 2 – ровно один раз. Производится несколько подтверждений доставки для исключения дублирования. Подходит для инициализации действий повторение которых недопустимо или команд на увеличение/уменьшение значений параметров. Наиболее затратный тип доставки по времени и использованию трафика.


Применение протокола MQTT в контроллерах ZONT

Протокол MQTT поддерживается контроллерами ZONT, модели H1000+ PRO.V2, H2000+ PRO.V2, С2000+ PRO, начиная с 420-ой версии прошивки.

Обмен данными контроллера с другими устройствами по протоколу MQTT работает ТОЛЬКО по каналам связи Wi-Fi и Ethernet.

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


Настройка Брокера (MQTT сервера)

Запуск собственного MQTT брокера:

В этой инструкции мы возьмём популярный MQTT-брокер с открытым исходным кодом - Mosquitto. Предполагаем, что наш компьютер находится в одной локальной сети с подключаемыми устройствами.

Настройка на Windows

  • Скачать установщик Windows для 32 или 64 битной системы с https://mosquitto.org/download/ и выполнить установку приложения

Установка Mosquitto (1).jpg Установка Mosquitto (2).jpg

Установка Mosquitto (3).jpg Установка Mosquitto (4).jpg

  • Открыть файл C:\Program Files\mosquitto\mosquitto.conf и добавить в самый конец файла:

log_type all

listener 1883

protocol mqtt

allow_anonymous true

  • Открыть Диспетчер задач -> вкладка Сервисы -> в контекстном меню строки mosquitto выбрать Перезагрузить
  • Открыть Брандмауэр Windows и создать правило для Входящих соединений:

Тип правила: Порт

Протокол: TCP, Указать порт: 1883

Действие: Разрешить соединение

Профиль: выбрать все три

Имя: BrokerMQTT

  • Теперь брокер доступен в локальной сети на порту 1883
  • Открыть меню Пуск -> Служебные - Windows -> Командная строка
  • Узнать IP адрес компьютера можно выполнив в командной строке: ipconfig | findstr "IPv4"
  • Ссылкой для подключения тогда будет:

mqtt://{{IP-адрес компьютера в локальной сети}}:1883

Например, mqtt://192.168.10.273:1883


Настройка на Debian, Ubuntu

  • Выполнить в терминале:

sudo apt update

sudo apt upgrade -y

sudo apt install -y mosquitto

* Для других дистрибутивов пакет mosquitto должен быть доступен в соответствующих им репозиториях. Также имеется возможность использовать Docker контейнер: https://hub.docker.com/_/eclipse-mosquitto

  • В папке /etc/mosquitto/conf.d/ создать файл local.conf со следующим содержимым:

log_type all

listener 1883

protocol mqtt

allow_anonymous true

  • Перезагрузить сервис выполнив: sudo systemctl restart mosquitto
  • Теперь брокер доступен в локальной сети на порту 1883
  • Узнать IP адреса компьютера можно выполнив: hostname -I
  • Ссылкой для подключения тогда будет:

mqtt://{{IP-адрес компьютера в локальной сети}}:1883


Например, mqtt://192.168.10.29:1883

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

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-ошибка)

err - код ошибки


Подписка

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

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

  • Заданием 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 (1).jpg

При использовании этой опции соответствующие элементы из 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_json.t }}"

Пояснения:

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

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

state_topic - имя топика

value_template: "{{ value_json.t }}"

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

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


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

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

Шаблон значения:

"cmd": {{ (((states('sensor.datchik_temperatury_spalnia_temperature') | float) * 10 + 2730 ) | int) | string }}

тут что в {{* }}

states('sensor.datchik_temperatury_spalnia_temperature') - имя сенсора (датчика)

внутри HA

| float |int |string переводы по типам переменных

"cmd": {{ 1 (states('sensor.datchik_temperatury_spalnia_temperature')) | string }}


Шаблон MQTT.jpg