Mega 2561 и MQTT

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
stilet69
Сообщения: 103
Зарегистрирован: 30 июн 2017, 19:14

Mega 2561 и MQTT

Сообщение stilet69 » 01 июл 2017, 11:20

Здравствуйте! Хотел бы спросить о настройках работы с MQTT. Я ввел в конфигурацию Меги настройки MQTT сервера (пишет, что соединился), на сервер установлен брокер mosquitto. В настоящий момент подключен только датчик DHT22 к порту 7. Но топика с показанием датчика я не наблюдаю.
IP Megad - 192.168.0.14, сервер mqtt на адресе 192.168.0.100. Я так понимаю, что Мега должна создать топик megad/14 в котором будут состояния портов
Или работа mqtt невозможна без php скрипта (судя по описанию)?

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Mega 2561 и MQTT

Сообщение Andrey_B » 01 июл 2017, 13:49

В настоящий момент контроллер публикует сообщения только по событию. Например, когда срабатывает вход.
Порт, настроенный для работы с DHT22 не генерирует события. Через HTTP значение датчика можно получить с помощью "cmd=get". А вот в существующей реализации MQTT механизм запроса текущего значения порта пока не сделан.

stilet69
Сообщения: 103
Зарегистрирован: 30 июн 2017, 19:14

Re: Mega 2561 и MQTT

Сообщение stilet69 » 02 июл 2017, 12:09

Понятно. Подскажите, а полноценную работу с MQTT вы планируете сделать? Эта информация влияет на выбор системы управления умным домом.
Если да, то приблизительно какой срок? Я понимаю как программист, что срок какой либо фичи это понятие относительное, но все же ;-)

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Mega 2561 и MQTT

Сообщение Andrey_B » 02 июл 2017, 12:18

А что вы понимаете под полноценной работой с MQTT? Чего не хватает в первую очередь? Выдачи информации о состоянии порта в ответ на запрос?

stilet69
Сообщения: 103
Зарегистрирован: 30 июн 2017, 19:14

Re: Mega 2561 и MQTT

Сообщение stilet69 » 04 июл 2017, 18:58

Думаю, что под полноценной реализацией я бы имел ввиду публикацию в топиках MQTT самим контроллером с каким то задаваемым в параметрах интервалом.
То есть контроллер сам создал топик например megad/14/07 (14 номер IP или ID контроллера, 07 номер порта) и через интервал времени задаваемый в настройках обновлял бы информацию. Идеально бы интервал обновления задавать для каждого порта отдельно (для каждого типа датчика все таки свои особенности).
Ну и при срабатывании тоже обновлять информацию только для сработавшего порта.

J0K3R
Сообщения: 16
Зарегистрирован: 05 май 2017, 17:12

Re: Mega 2561 и MQTT

Сообщение J0K3R » 19 ноя 2017, 08:03

Andrey_B, подниму тему, так как меня, как и многих, интересует возможность "полноценной работы MQTT": в данном вопросе ориентируюсь на MQTT реализацию для Sonoff-устройств - Sonoff-Tasmota. Конечно, от Меги не требуется поддержка настройки всех параметров через MQTT (что было бы оптимально), но можно ли хотя бы реализовать отдельные топики на каждый порт (in и out)? Это гораздо удобнее, прописать в OH2 одной строкой поддержку выключателя. Напр., для Sonoff сейчас у меня выглядит так:

Код: Выделить всё

Switch sw21_1 "Toilet lamp [MAP(ru.map):%s]" <light> (grToilet, grLight) {mqtt="
	<[mosquitto:sonoff/sw2/stat/POWER1:state:default], <[mosquitto:sonoff/sw2/tele/STATE:state:JSONPATH($.POWER1)],
	>[mosquitto:sonoff/sw2/cmnd/POWER1:command:ON:1], >[mosquitto:sonoff/sw2/cmnd/POWER1:command:OFF:0]"
J3-SmartHome: MegaD + TinkerBoard + Home Assistant

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Mega 2561 и MQTT

Сообщение Andrey_B » 19 ноя 2017, 10:29

J0K3R писал(а):но можно ли хотя бы реализовать отдельные топики на каждый порт (in и out)?
Отдельные топики на каждый IN реализовать можно. Не знаю, какие традиции приняты в мире MQTT на этот счет, и какой подход к формированию топиков считать более оптимальным. Нужно, чтобы кто-то еще отписался по этому поводу.
Отдельные топики на каждый OUT? Сейчас, чтобы включить несколько портов, нужно отправить в топик "cmd" данные вида "7:1;8:1;9:1". Вы предлагаете отправлять данные отдельными пакетами? Цитата: "MQTT отличается высокой эффективностью связи даже в сетях с низкой пропускной способностью." Зная, как все это устроено изнутри, не разделяю всеобщей истерии по поводу MQTT в IoT. Простота интеграции - вопрос дискуссионный. Более высокая эффективность по сравнению с HTTP? Нет. Более высокая скорость обработки данных по сравнению с HTTP? Нет. Зато достаточно грохнуться брокеру, чтобы все пропало.

MSapogov
Сообщения: 312
Зарегистрирован: 13 май 2015, 08:44
Откуда: г. Томск

Re: Mega 2561 и MQTT

Сообщение MSapogov » 19 ноя 2017, 15:51

Мне очень нравится как распределены метрики тут - https://wifi-iot.com/p/wiki/23/ru/
Уж очень привык... каждый порт - свой топик.
А вот с MQTT JSON - https://wifi-iot.com/p/wiki/87/ru/ даже и не разбирался...
Последний раз редактировалось MSapogov 19 ноя 2017, 15:59, всего редактировалось 1 раз.

J0K3R
Сообщения: 16
Зарегистрирован: 05 май 2017, 17:12

Re: Mega 2561 и MQTT

Сообщение J0K3R » 19 ноя 2017, 15:58

Andrey_B писал(а):Сейчас, чтобы включить несколько портов, нужно отправить в топик "cmd" данные вида "7:1;8:1;9:1".
Вот этот момент как раз и не удобен. Для чего поддержка групп на Меге? Считаю это как раз и работа сервера (напр., в OpenHab2 это легко реализуется назначением группы для элемента, как то всем лампам, и пр.). Единственно необходимым групповым управлением на Меге считаю вкл/выкл всех портов (по all команде).
Что касается падения брокера - так сие "беда" любого централизованного управления в УД (что на OpenHab, на MajorDomo и любом сервере). В продакшене в ИТ для этого строят redudancy инфраструктуру, в Меге для этого есть поле Act.
Насчет стабильности MQTT говорить не готов (это больше вопрос практики), как и об эффективности - все же Мега сугубо удел гиков и продвинутых, и для "нас" эффективности HTTP, как и MQTT вполне достаточно (ИМХО).
На текущий момент опробовал binding для OH2 от Petros, но, к сожалению, там проблема с входящими сообщениями (Мега -> OH2-binding). Далее пробовал прикрутить классический HTTP-binding, но в банальном сценарии с выключателем натолкнулся на невозможность передать двоеточие (":") в URL - OH2 таким образом (с помощью ":") разделяет поля (и не предлагает никакие варианты экранирования спец.символов). В итоге для себя вижу оставшееся решение по синхронизации "Мега <-> УД на OH2", поддерживаемое обеими сторонами, - протокол MQTT. Т.е. пока даже речи не идет об эффективности, добиться бы хотя бы стабильности...
J3-SmartHome: MegaD + TinkerBoard + Home Assistant

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Mega 2561 и MQTT

Сообщение Andrey_B » 20 ноя 2017, 12:57

J0K3R писал(а):
Andrey_B писал(а):Сейчас, чтобы включить несколько портов, нужно отправить в топик "cmd" данные вида "7:1;8:1;9:1".
Вот этот момент как раз и не удобен. Для чего поддержка групп на Меге? Считаю это как раз и работа сервера (напр., в OpenHab2 это легко реализуется назначением группы для элемента, как то всем лампам, и пр.). Единственно необходимым групповым управлением на Меге считаю вкл/выкл всех портов (по all команде).
Это не группа в понимании контроллера. Это просто серия команд. И это довольно полезная особенность, которая оптимизирует работу самого узкого места с точки зрения всего процесса взаимодействия устройства с сервером - сетевой обмен информацией. Гораздо оптимальнее отправить все нужные команды одним пакетом, а не разбивать это на несколько отдельных сессий.

Что касается входов.
В данный момент устройство публикует информацию в топике типа "megad/14", где "14" - последний байт IP-адреса.
Если публиковать информацию в топике "megad/14/0", где "0" - номер порта, это решит вашу проблему? Кто-то еще реально использует MQTT с MegaD-2561?

Что касается выходов.
Сейчас устройство подписывается на топик "megad/14/cmd"
Не вижу достаточно оснований подписываться на количество топиков, равное количеству выходов.
Если по каким-то причинам ПО на сервере не умеет или не хочет собирать команды в одну, оно может публиковать команды в топик "megad/14/cmd" по одной. Так в OH2 будет работать?

x13dev
Сообщения: 396
Зарегистрирован: 22 окт 2012, 11:40
Откуда: Бавария

Re: Mega 2561 и MQTT

Сообщение x13dev » 20 ноя 2017, 15:32

Andrey_B писал(а): Не вижу достаточно оснований подписываться на количество топиков, равное количеству выходов.
Можно подписаться на megad/14/out/+

Wildcards: '+' single level, '#' multi level

J0K3R
Сообщения: 16
Зарегистрирован: 05 май 2017, 17:12

Re: Mega 2561 и MQTT

Сообщение J0K3R » 20 ноя 2017, 17:11

OH2 будет работать и при текущей реализации MQTT со стороны Меги, но если как-то удастся решить проблему двоеточия: и в HTTP binding и в MQTT OpenHab2 использует ":" в собственных целях как разделители. Поэтому двоеточие в URL (или MQTT команде) всегда трактуется неверно. Есть ли возможность заменить двоеточие как разделитель между портом и командой на стороне Меги другим спец.символом либо дополнить какой-нибудь альтернативой?
J3-SmartHome: MegaD + TinkerBoard + Home Assistant

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Mega 2561 и MQTT

Сообщение Andrey_B » 20 ноя 2017, 17:30

Я могу добавить обработку символа "=". По смыслу подходит. Например: 7=1;8=0

J0K3R
Сообщения: 16
Зарегистрирован: 05 май 2017, 17:12

Re: Mega 2561 и MQTT

Сообщение J0K3R » 21 ноя 2017, 13:56

Это было бы великолепно - OH2 HTTP Binding заработал бы должным образом.
J3-SmartHome: MegaD + TinkerBoard + Home Assistant

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Mega 2561 и MQTT

Сообщение Andrey_B » 22 ноя 2017, 13:00

Добавил в 4.19b8

J0K3R
Сообщения: 16
Зарегистрирован: 05 май 2017, 17:12

Re: Mega 2561 и MQTT

Сообщение J0K3R » 24 ноя 2017, 05:20

Респект. Наконец, удалось интегрировать Мегу в OH2 нативными средствами (HTTP и MQTT binding). Большое спасибо!
J3-SmartHome: MegaD + TinkerBoard + Home Assistant

empenoso
Сообщения: 1039
Зарегистрирован: 11 ноя 2015, 08:03
Откуда: Пермь

Re: Mega 2561 и MQTT

Сообщение empenoso » 24 ноя 2017, 07:13

J0K3R писал(а):Респект. Наконец, удалось интегрировать Мегу в OH2 нативными средствами (HTTP и MQTT binding). Большое спасибо!
То есть получается в OH2 функционал как у биндинга https://github.com/Pshatsillo/openhab2M ... g/releases ?

J0K3R
Сообщения: 16
Зарегистрирован: 05 май 2017, 17:12

Re: Mega 2561 и MQTT

Сообщение J0K3R » 24 ноя 2017, 11:09

empenoso писал(а):То есть получается в OH2 функционал как у биндинга https://github.com/Pshatsillo/openhab2M ... g/releases ?
Да. К сожалению, биндинг мне настроить не удалось - наблюдалась нестабильная связь в направлении Mega -> OH2:MegadBinding. У меня логика управления светом смещена в сторону OH2, т.е. такая схема:

Код: Выделить всё

возвратный_выключатель -> Mega:IN -(http)-> OH2 -(http)-> Mega:OUT -> лампочка
Пришлось отказаться от биндинга Pshatsillo, и после изменений в логике работы Меги, реализовать такую схему:

Код: Выделить всё

возвратный_выключатель -> Mega:IN -(mqtt)-> OH2 -(http)-> Mega:OUT -> лампочка
на биндингах OH2: HTTP и MQTT. Пока работает без задержек, буду тестировать и накручивать дальше.
J3-SmartHome: MegaD + TinkerBoard + Home Assistant

nkh
Сообщения: 39
Зарегистрирован: 12 авг 2016, 11:13

Re: Mega 2561 и MQTT

Сообщение nkh » 11 дек 2017, 15:39

Andrey_B писал(а):
J0K3R писал(а):Простота интеграции - вопрос дискуссионный. Более высокая эффективность по сравнению с HTTP? Нет. Более высокая скорость обработки данных по сравнению с HTTP? Нет.
Простота интеграции это ведь плюс, поддержка mqtt есть у многих проектов, потому и девайсы с его поддержкой сейчас актуальны

nkh
Сообщения: 39
Зарегистрирован: 12 авг 2016, 11:13

Re: Mega 2561 и MQTT

Сообщение nkh » 22 дек 2017, 12:29

Отдельные топики на каждый OUT? Сейчас, чтобы включить несколько портов, нужно отправить в топик "cmd" данные вида "7:1;8:1;9:1". Вы предлагаете отправлять данные отдельными пакетами?
можно не убирать общий топик cmd, а в настройках каналов указать как взаимодействовать с этим топиком, галочки "подписаться", "публиковать", и отдельно настройка стороннего топика

Ответить