Использование протокола MQTT в контроллерах ZONT: различия между версиями
Материал из Библиотека
Микро Лайн
Admin (обсуждение | вклад) Нет описания правки |
Admin (обсуждение | вклад) Нет описания правки |
||
(не показано 13 промежуточных версий этого же участника) | |||
Строка 5: | Строка 5: | ||
Уважаемые пользователи! | Уважаемые пользователи! | ||
В настоящем документе приведена информация по | В настоящем документе приведена информация по организации обмена данными контроллера ZONT со сторонним оборудованием по протоколу '''MQTT'''. | ||
Обращаем Ваше внимание на то, что настоящий документ постоянно обновляется и корректируется. Это связано с разработкой и применением новых функций, которые не использовались ранее. В связи с этим тексты некоторых разделов могут изменяться и/или дополняться, а некоторые иллюстрации и скриншоты, представленные в документе, могут устареть. | Обращаем Ваше внимание на то, что настоящий документ постоянно обновляется и корректируется. Это связано с разработкой и применением новых функций, которые не использовались ранее. В связи с этим тексты некоторых разделов могут изменяться и/или дополняться, а некоторые иллюстрации и скриншоты, представленные в документе, могут устареть. | ||
Если Вы обнаружили ошибки и/или неточности — | Если Вы обнаружили ошибки и/или неточности — пожалуйста, сообщите нам на 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) – | MQTT (Message Queue Telemetry Transport) – это протокол обмена сообщениями, который часто используется в IoT (интернете вещей) для организации связи между устройствами и серверами. | ||
===<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 | |||
protocol mqtt | |||
allow_anonymous true | |||
*Открыть Диспетчер задач -> вкладка Сервисы -> в контекстном меню строки mosquitto выбрать Перезагрузить | |||
*Открыть Брандмауэр Windows и создать правило для Входящих соединений: | |||
Тип правила: Порт | |||
Протокол: TCP, Указать порт: 1883 | |||
Действие: Разрешить соединение | |||
Профиль: выбрать все три | |||
Имя: BrokerMQTT | |||
*Теперь брокер доступен в локальной сети на порту 1883 | |||
*Открыть меню Пуск -> Служебные - Windows -> Командная строка | |||
*Узнать IP адрес компьютера можно выполнив в командной строке: ipconfig | findstr "IPv4" | |||
*Ссылкой для подключения тогда будет: | |||
<nowiki>mqtt://{{IP-адрес компьютера в локальной сети}}:1883</nowiki> | |||
Например, mqtt://192.168.10.273:1883 | |||
'''Настройка на Debian, Ubuntu''' | |||
*Выполнить в терминале: | |||
sudo apt update | |||
sudo apt upgrade -y | |||
sudo apt install -y mosquitto | |||
* | <nowiki>*</nowiki> Для других дистрибутивов пакет mosquitto должен быть доступен в соответствующих им репозиториях. Также имеется возможность использовать Docker контейнер: <nowiki>https://hub.docker.com/_/eclipse-mosquitto</nowiki> | ||
* | *В папке /etc/mosquitto/conf.d/ создать файл local.conf со следующим содержимым: | ||
log_type all | |||
listener 1883 | |||
protocol mqtt | |||
allow_anonymous true | |||
*Перезагрузить сервис выполнив: sudo systemctl restart mosquitto | |||
*Теперь брокер доступен в локальной сети на порту 1883 | |||
*Узнать IP адреса компьютера можно выполнив: hostname -I | |||
*Ссылкой для подключения тогда будет: | |||
<nowiki>mqtt://{{IP-адрес компьютера в локальной сети}}:1883</nowiki> | |||
Например, mqtt://192.168.10.29:1883 | |||
<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, | |||
"a":1 | |||
} | } | ||
|} | |} | ||
где: | |||
t - температура по цельсию (значение float) | t - температура по цельсию (значение float) | ||
Строка 126: | Строка 216: | ||
|+ | |+ | ||
|{ | |{ | ||
"t": 23.5, | |||
"a": 1, | |||
"h": 85, | |||
"b": 100, | |||
"r": 78 | |||
} | } | ||
|} | |} | ||
где: | |||
t - температура по цельсию (значение float) | t - температура по цельсию (значение float) | ||
Строка 153: | Строка 245: | ||
|+ | |+ | ||
|{ | |{ | ||
"s": 23.5, | |||
"c": 1 | |||
} | } | ||
|} | |} | ||
где: | |||
s - целевая температура | s - целевая температура | ||
Строка 168: | Строка 262: | ||
|+ | |+ | ||
|{ | |{ | ||
"s": 1 | |||
} | } | ||
|} | |} | ||
где: | |||
s - текущее состояние (0 - выкл, 1 - вкл) | s - текущее состояние (0 - выкл, 1 - вкл) | ||
Строка 179: | Строка 275: | ||
|+ | |+ | ||
|{ | |{ | ||
"s": 1 | |||
} | } | ||
|} | |} | ||
где: | |||
s - текущее состояние (0 - выкл, 1 - вкл) | s - текущее состояние (0 - выкл, 1 - вкл) | ||
Строка 190: | Строка 288: | ||
|+ | |+ | ||
|{ | |{ | ||
"s": 1 | |||
} | } | ||
|} | |} | ||
где: | |||
s - текущее состояние (0 - не активен, 1 - открытие, 2 - закрытие) | s - текущее состояние (0 - не активен, 1 - открытие, 2 - закрытие) | ||
Строка 201: | Строка 301: | ||
|+ | |+ | ||
|{ | |{ | ||
"s": 1, | |||
"t": "Выключено" | |||
} | } | ||
|} | |} | ||
где: | |||
t - текстовое представление статуса (название из настроек для активного или неактивного состояния) | s - текущее состояние | ||
(0 - не активен, 1 - активен, > 0 - значения для аналогового регулятора) | |||
t - текстовое представление статуса | |||
(название из настроек для активного или неактивного состояния) | |||
Строка 216: | Строка 322: | ||
|+ | |+ | ||
|{ | |{ | ||
"water": 45.6, | |||
"dhw": 34.5, | |||
"return": 30.4, | |||
"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, | |||
"cmd": "$command" | |||
} | } | ||
Строка 268: | Строка 377: | ||
|+ | |+ | ||
|{ | |{ | ||
"name": "Кнопка", | |||
"cmd": "$command" | |||
} | } | ||
Строка 287: | Строка 395: | ||
<font color="c45911"> | ===<font color="c45911">Формат поля cmd для разных типов объектов</font>=== | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ | |+ | ||
Строка 380: | Строка 488: | ||
|T | |T | ||
|Установка температуры | |Установка температуры | ||
|команда это значение температуры в | |команда это значение температуры в децикельвинах | ||
Пример: {“cmd”:3000} | Пример: {“cmd”:3000} | ||
|- | |- | ||
Строка 414: | Строка 522: | ||
== | =='''Интеграция с Home Assistant'''== | ||
В настройках топика | Прежде чем приступить к интеграции, необходимо убедиться, что в профиле в Home Assistant включен "расширенный режим". | ||
В настройках топика устройства ZONT необходимо активировать формат Home Assistant. | |||
[[Файл:Формат Home Assistant (1).jpg|695x695пкс]] | |||
При использовании этой опции соответствующие элементы из ZONT автоматически отобразятся и синхронизируются с интерфейсом Home Assistant. | При использовании этой опции соответствующие элементы из ZONT автоматически отобразятся и синхронизируются с интерфейсом Home Assistant. | ||
Строка 422: | Строка 534: | ||
===<font color="c45911">Список поддерживаемых типов объектов</font>=== | |||
{| class="wikitable" | {| class="wikitable" | ||
|+ | |+ | ||
Строка 460: | Строка 572: | ||
===<font color="c45911">Решения для Home Assistant (примеры)</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_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_template: <nowiki>"{{ value_json.t }}"</nowiki> | ||
"value_json." - способ обработки сообщения | "value_json." - способ обработки сообщения | ||
t - имя ключа в json по которому получаем значение | t - имя ключа в json по которому получаем значение | ||
====<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 | |||
| float |int |string переводы по типам переменных | |||
<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-клиенты не знают о существовании друг друга, и не взаимодействуют напрямую.
Брокер может получать данные из разных источников, возвращать подписчикам.
В протоколе 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/ и выполнить установку приложения
- Открыть файл 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://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 | Включение |
Вид интерфейса настройки топиков
Интеграция с Home Assistant
Прежде чем приступить к интеграции, необходимо убедиться, что в профиле в Home Assistant включен "расширенный режим".
В настройках топика устройства ZONT необходимо активировать формат Home Assistant.
При использовании этой опции соответствующие элементы из ZONT автоматически отобразятся и синхронизируются с интерфейсом Home Assistant.
Список поддерживаемых типов объектов
Объект 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 }}