Mega 2561 и MQTT

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
martiniman
Сообщения: 528
Зарегистрирован: 09 авг 2016, 15:09
Откуда: Сочи

Re: Mega 2561 и MQTT

Сообщение martiniman » 25 янв 2018, 15:21

r7s писал(а):
25 янв 2018, 14:57
Опять же, если сервер умеет парсить, то парсить - гораздо (думаю разница измеряется порядками) быстрее, чем передавать по сети. А если не умеет, то, возможно, это не тот сервер, который стоит использовать.
Я про клиента MQTT говорил, их много и для iOS и для Android, просто прописал топик и вывел кнопку на экран. И сервер не нужен.
alex946 писал(а):
25 янв 2018, 15:18
Имхо, все примеры за и против тут немного не о том. Суть-то в том, что чем более стандартно реализован протокол обмена со стороны Меги, тем проще и легче её интегрировать в прочие системы. Если есть возможность улучшить работу MQTT - отлично, нет - тогда и думать про обходные варианты.
Согласен полностью.

martiniman
Сообщения: 528
Зарегистрирован: 09 авг 2016, 15:09
Откуда: Сочи

Re: Mega 2561 и MQTT

Сообщение martiniman » 25 янв 2018, 15:32

Andrey_B - можно узнать какая библиотека взята за основу в вашем контроллере? Как дела обстоят с QoS, retain, LWT и пр.
Вся прелесть в контроле за доставкой сообщения, если QoS работает как задумано - то перезагрузка или переподключение совсем не страшно - сообщение дойдет.

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

Re: Mega 2561 и MQTT

Сообщение Andrey_B » 25 янв 2018, 17:12

martiniman писал(а):
25 янв 2018, 15:32
можно узнать какая библиотека взята за основу в вашем контроллере?
Никакая.
martiniman писал(а):
25 янв 2018, 15:32
Как дела обстоят с QoS, retain, LWT и пр.
Вся прелесть в контроле за доставкой сообщения, если QoS работает как задумано - то перезагрузка или переподключение совсем не страшно - сообщение дойдет.
QoS=0,Retain Flag=0,Will Flag=0
Насчет контроля доставки. Все это работает поверх TCP.

Igor78
Сообщения: 143
Зарегистрирован: 26 янв 2015, 14:44
Откуда: Москва

Re: Mega 2561 и MQTT

Сообщение Igor78 » 25 янв 2018, 17:55

Протестировал работу MQTT на последнем fw: 4.23b1

Стенд для тестирования:

MegaD-2561 v2.2 RTC +14IN +14R
Сенсор TTP223 подключен к входу 14IN
Светильник подключен к выходу 14R
RGB светодиод подключен к выходам PCA9685
Реле (для обратной связи в виде щелчка) подключено через транзистор к выходу PCA9685

Задача: касаемся сенсора - свет горит, касаемся второй раз - гаснет, светодиод меняет цвета, реле щелкает во время касания

По HTTP все прекрасно работает, по MQTT - Mega через раз отваливается :(

При касании сенсора Mega пишет в топик соответствующего входа
В ответ получает в cmd:

По переднему фронту (P):

15=1 или 15=0 - вкл/выкл релейный выход к которому подключен светильник

5e0=xxxx
5e1=xxxx - засветить заданным для индикации касания цветом и яркостью RGB светодиод
5e2=xxxx

5e4=4095 - включить реле для щелчка
пауза 70 миллисекунд
5e4=0 - выключить реле для щелчка

По заднему фронту (R):

5e0=xxxx
5e1=xxxx - засветить заданным для текущего режима светильника (вкл/выкл) цветом и яркостью RGB светодиод
5e2=xxxx

Таким образом за одно касание сенсора мы получаем от Меги 2 посылки (может быть и 3 при длинном касании), в ответ Мега получает 9 команд.

Я понимаю, что количество команд можно сократить объединив их, и я, конечно, так и сделаю, но неужели это нормально, что контроллер не справляется с такой небольшой нагрузкой?
С уважением, Игорь

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

Re: Mega 2561 и MQTT

Сообщение Andrey_B » 25 янв 2018, 18:08

Я предупреждал, что поддержка MQTT в стадии бета.
Речь в данном случае не идет, что контроллер не справляется. Для него десяток другой пакетов в секунду - семечки.
Причина в очень специфической реализации поддержки протокола. Не вдаваясь в подробности, если TCP-пакеты от сервера по разным командам/событиям приходят не по порядку, то это может приводить к реконнекту. Посмотрю, что можно сделать.

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

Re: Mega 2561 и MQTT

Сообщение empenoso » 25 янв 2018, 19:32

martiniman писал(а):
25 янв 2018, 15:32
Andrey_B - можно узнать какая библиотека взята за основу в вашем контроллере? Как дела обстоят с QoS, retain, LWT и пр.
Andrey_B, поддержки живости LWT https://www.hivemq.com/blog/mqtt-essent ... -testament реально очень не хватает на Sonoff-Tasmota идельно работает и всегда знаешь, когда устройство недоступно.


А никто не разобрался как по mqtt отличить длинные нажатия? Нашел примеры в интернете с парсингом JSONPATH по условию, но из-за того что параметр m передается мегой не всегда - все правила в опенхаб с ошибками заканчиваются.

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

Number   P2_ALL_hold        "ВКЛ всё [%s]"	    { mqtt="<[mosquitto:megad/60/2:state:JSONPATH($.[?(@.port=='2')].m)]" }

martiniman
Сообщения: 528
Зарегистрирован: 09 авг 2016, 15:09
Откуда: Сочи

Re: Mega 2561 и MQTT

Сообщение martiniman » 25 янв 2018, 20:49

Можно конечно правилом парсить, но это совсем уж костыль. Просто получать в строковую переменную и парсить.
Для нажатия должны быть четкие значения - 0,1,2,3
Я вообще не разбираюсь в парсерах с кучей восклицательных знаков, запятых и скобок как большинство простых людей.
И контроллер из простого превращается в устройство для гиков.
Так почему ж просто не отдавать по одному значению на переменную?

Alex_Jet
Сообщения: 1251
Зарегистрирован: 12 янв 2014, 18:00
Откуда: Россия, г.Томск

Re: Mega 2561 и MQTT

Сообщение Alex_Jet » 26 янв 2018, 06:18

martiniman писал(а):
25 янв 2018, 20:49
Можно конечно правилом парсить, но это совсем уж костыль...
Я вообще не разбираюсь в парсерах с кучей восклицательных знаков, запятых и скобок как большинство простых людей.
Ну если можно создать правило, то это не костыль. Костыль - это когда пишешь плагин-парсер переработки данных, чтобы потом все это обычным правилом разбирать.
RegExp - это довольно интересная и занятная штука! Вначале напоминает головоломку, но когда выучишь основные правила, то выражение для парсинга пишется достаточно легко. Рекомендую разобраться чтобы тривиальные задачи выполнять в одно действие!

Alex_Jet
Сообщения: 1251
Зарегистрирован: 12 янв 2014, 18:00
Откуда: Россия, г.Томск

Re: Mega 2561 и MQTT

Сообщение Alex_Jet » 26 янв 2018, 06:33

empenoso писал(а):
25 янв 2018, 19:32
Andrey_B, поддержки живости LWT https://www.hivemq.com/blog/mqtt-essent ... -testament реально очень не хватает на Sonoff-Tasmota идельно работает и всегда знаешь, когда устройство недоступно.
Если бы вы понимали чем в корне различаются MegaD и ESP, то не просили бы у Андрея лишних наворотов. MQTT в MegaD - это глубоко экспериментальная версия, поскольку изначально весь проект создавался для работы по HTTP. Я, думаю, если надо чтобы MegaD поддерживала полностью все что нужно для MQTT необходимо делать ответвление прошивки в сторону MQTT (что одному разработчику крайне нежелательно), либо скорее всего менять полностью архитектуру прошивки, затачивая ее и под HTTP и под MQTT. Это практически то же что сделать сейчас работу (и интерфейс) 1-wire устройств идентичный с работой (и интерфейсом) I2C устройств.

Если вы еще говорите, про QOS, LWT и retain, то вам дорога с ESP и подобными, но не MegaD-2561. QOS, LWT, retain - это плюшки, которые обязаны быть на производстве с кучей распределенных сетей, там где магистраль строиться на MPLS, а региональные сегменты на L3 типа VRF, чтобы гарантировать работоспособность всех устройств управления, а значит и технологических процессов. Правда я даже не представляю когда MQTT дойдет до производственного применения, наверно, к 2025-му вендоры начнут закладывать MQTT в прошивки железа, когда он хоть чуточку обкатается в IoT.
MegaD-2561 имеет совсем другой сегмент - это Smart Home, где ключевым словом является Home! Там где есть обычные плоские сети и малая вероятность проникновения в сеть злоумышленников!

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

Re: Mega 2561 и MQTT

Сообщение Andrey_B » 26 янв 2018, 17:16

Igor78, попробуйте 4.23b3

Igor78
Сообщения: 143
Зарегистрирован: 26 янв 2015, 14:44
Откуда: Москва

Re: Mega 2561 и MQTT

Сообщение Igor78 » 26 янв 2018, 18:52

Andrey_B писал(а):
26 янв 2018, 17:16
Igor78, попробуйте 4.23b3
Похоже, что заработало как надо! Спасибо!
Дизконнектов и пропусков комманд не наблюдаю.

Углубленное тестирование проведу в начале следующей недели.
С уважением, Игорь

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

Re: Mega 2561 и MQTT

Сообщение stilet69 » 27 янв 2018, 11:24

Коллеги вы не могли бы сюда бросить версии операционной системы и названия и версии брокера MQTT - я никак не могу на своей версии добится устойчивой работы MQTT. У меня Малинка 3й версии и брокер Москито входящий в стандартный дистр Raspian c версией 1.4.10.
Я сейчас переустановил на самые новые версии 1.4.14, но ошибки не исчезли.
Может это как то связано с тем, что процессор на x86, а ARM. Но навряд ли.

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

Re: Mega 2561 и MQTT

Сообщение Andrey_B » 27 янв 2018, 11:59

Raspberry Pi 3 Model B V1.2

pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.9.59-v7+ #1047 SMP Sun Oct 29 12:19:23 GMT 2017 armv7l GNU/Linux

pi@raspberrypi:~ $ dpkg -l |grep mosquitto
ii mosquitto 1.4.10-3 armhf MQTT version 3.1/3.1.1 compatible message broker

sudo systemctl stop mosquitto

pi@raspberrypi:~ $ sudo /usr/sbin/mosquitto -v
1517039778: mosquitto version 1.4.10 (build date Mon, 29 May 2017 13:43:29 +0100) starting
1517039778: Using default config.
1517039778: Opening ipv4 listen socket on port 1883.
1517039778: Opening ipv6 listen socket on port 1883.
1517039784: New connection from 192.168.0.14 on port 1883.
1517039784: New client connected from 192.168.0.14 as megad-14 (c1, k30).
1517039784: Sending CONNACK to megad-14 (0, 0)
1517039785: Received SUBSCRIBE from megad-14
1517039785: megad/14/cmd (QoS 0)
1517039785: megad-14 0 megad/14/cmd
1517039785: Sending SUBACK to megad-14
1517039803: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14/15', ... (37 bytes))
1517039803: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14/15', ... (37 bytes))
1517039803: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14/15', ... (37 bytes))
1517039803: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14/15', ... (37 bytes))
1517039804: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14/15', ... (37 bytes))
1517039804: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14/15', ... (37 bytes))
1517039804: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14/15', ... (37 bytes))
1517039804: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14/15', ... (37 bytes))
1517039804: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14/15', ... (37 bytes))
1517039805: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14/15', ... (37 bytes))
1517039808: Received PINGREQ from megad-14
1517039808: Sending PINGRESP to megad-14

"Ну и так далее..."

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

Re: Mega 2561 и MQTT

Сообщение stilet69 » 27 янв 2018, 13:07

Андрей спасибо. У меня то же самое, но - ошибка. Установил на свой ноутбук версию 1.4.8 - c ней Мега работает стабильно. Сейчас попробую из сорцов собрать 1.4.8

alex946
Сообщения: 204
Зарегистрирован: 05 дек 2015, 22:48
Контактная информация:

Re: Mega 2561 и MQTT

Сообщение alex946 » 27 янв 2018, 13:11

Хм. А не будет ли "дешевле" использовать внешнюю прокладку между мегой и MQTT в случаях, требующих каких-то более расширенных возможностей протокола? Например, на базе вот этой библиотеки: https://www.hivemq.com/blog/mqtt-client ... quitto-php

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

Re: Mega 2561 и MQTT

Сообщение stilet69 » 27 янв 2018, 13:14

А у вас какой дистрибутив? Rasspian?

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

Re: Mega 2561 и MQTT

Сообщение Andrey_B » 27 янв 2018, 14:25

pi@raspberrypi:~ $ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"

stilet69, я думаю дело не в версии брокера, не в версии ОС или дистрибутива.
"Проблема" возможно где-то в сетевой части. Кстати, а какая у вас "ошибка"?
Как подключена Raspberry к локальной сети? Напрямую в коммутатор/роутер или через Wi-Fi? Если проводом, то нет ли в роутере или коммутаторе, при условии, что он умный, каких-то особенных настроек для данного порта?
Нет ли каких-то установок файрвола? Вывод 'sudo iptables -L -n'

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

Re: Mega 2561 и MQTT

Сообщение stilet69 » 27 янв 2018, 17:25

Андрей - и малинка и домашний ноут подключены к роутеру через Микротик. Роутер нормальный.
Когда я запускаю москитто на ноутбуке, то Мега нормально подключается к москито. Причем все версии. А вот на малинке проблема.
Получается, что все отличие в способе подключения (малинка по кабелю, а ноут вай фай). Сейчас буду копать
P.S. Подключил ноут в роутеру кабелем - все равно соединение Мегой держится стабильно. Значит дело в настройках дистрибутива.
Вот вывод Распери:

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

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DOCKER-USER  all  --  0.0.0.0/0            0.0.0.0/0           
DOCKER-ISOLATION  all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain DOCKER (1 references)
target     prot opt source               destination         

Chain DOCKER-ISOLATION (1 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           

Chain DOCKER-USER (1 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0 

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

Re: Mega 2561 и MQTT

Сообщение empenoso » 27 янв 2018, 21:06

У меня на openhabian вроде норм:

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

[21:57:52] openhabian@openHABianPi:~$  uname -a
Linux openHABianPi 4.9.59-v7+ #1047 SMP Sun Oct 29 12:19:23 GMT 2017 armv7l GNU/Linux
[22:02:45] openhabian@openHABianPi:~$ dpkg -l |grep mosquitto
ii  libmosquitto1:armhf             1.4.10-3                     armhf        MQTT version 3.1/3.1.1 client library
ii  mosquitto                       1.4.10-3                     armhf        MQTT version 3.1/3.1.1 compatible message broker
ii  mosquitto-clients               1.4.10-3                     armhf        Mosquitto command line MQTT clients
[22:02:55] openhabian@openHABianPi:~$  sudo /usr/sbin/mosquitto -v
1517072586: mosquitto version 1.4.10 (build date Mon, 29 May 2017 13:43:29 +0100) starting
1517072586: Using default config.
1517072586: Opening ipv4 listen socket on port 1883.
1517072586: Error: Address already in use
[22:03:06] openhabian@openHABianPi:~$
[22:03:25] openhabian@openHABianPi:~$ mosquitto_sub -v -h 192.168.88.70 -p 1883 -t '#'
tele/Living_room/LWT Online
tele/ElectroDragon2/LWT Online
tele/ElectroDragon3/LWT Online
tele/ElectroDragon1/LWT Online
tele/sonoff/LWT Offline
tele/Table_lamp/LWT Online
tele/Camera12v/LWT Online
megad/60/10 {"port":10,"m":0,"value":"ON","cnt":98}
megad/60/10 {"port":10,"m":0,"value":"ON","cnt":99}
tele/ElectroDragon3/STATE {"Time":"2018-01-27T22:05:30","Uptime":35,"Vcc":3.219,"POWER1":"OFF","POWER2":"OFF","Wifi":{"AP":1,"SSId":"fontnet","RSSI":100,"APMac":"6C:3B:6B:14:85:2E"}}
tele/ElectroDragon3/SENSOR {"Time":"2018-01-27T22:05:30","Switch1":"ON","Switch2":"OFF"}
megad/60/10 {"port":10,"m":0,"value":"ON","cnt":100}

^Z
[1]+  Остановлен    mosquitto_sub -v -h 192.168.88.70 -p 1883 -t '#'
[22:06:11] openhabian@openHABianPi:~$ sudo iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
[22:07:00] openhabian@openHABianPi:~$


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

Re: Mega 2561 и MQTT

Сообщение Andrey_B » 27 янв 2018, 22:51

stilet69, если честно, меня смущает наличие правил "DOCKER" в ваших сетевых настройках.
Не уверен, но возможно "the truth is out there".

Роутер Mikrotic "нормальный". Я использую их коммутатор. Давеча вот пришло обновление SwOS, которое парализовало работу DHCP в моей сети. Исправлена ошибка в прошивке была только спустя пару месяцев. В общем в современных реалиях ничего не удивляет.

Ответить