Страница 12 из 27

Re: Mega 2561 и MQTT

Добавлено: 22 дек 2018, 19:16
Ruslan
miks69 писал(а):
22 дек 2018, 18:57
Извиняюсь, ответ приходит в виде: {"port": 32,"value": "temp:0.00/hum:00.00"}
Можно ли попросить сделать в нормальном JSON формате: {"port": "32","temp": "0.00", "hum":"00.00"} чтобы удобнее было разбирать?
Прошу прощения, что вклиниваюсь в "отвлеченную" для меня тему, но, как говорится, "не могу молчать".
Чисто технически Андрей может сделать все что угодно и выдавать ответ в любом формате. НО!
Вы представляете себе у какого количества народа все уже настроено и прекрасно "вытаскивается" из текущего формата ответа?
И как они все "обрадуются", когда после очередного обновления прошивки вдруг "вероломно, без объявления войны" система управления отоплением, например, не получит данных...

Это я не в упрек, а просто для единообразного понимания ситуации всеми заинтересованными сторонами.

Re: Mega 2561 и MQTT

Добавлено: 22 дек 2018, 19:25
miks69
Ruslan писал(а):
22 дек 2018, 19:16
Это я не в упрек, а просто для единообразного понимания ситуации всеми заинтересованными сторонами.
Согласен с вами, однако есть определенные стандарты, или, если хотите, best practice, при реализации поддержки какого-либо протокола.
Протокол MQTT изначально предназначен для интеграции различных систем, которые, как вы можете догадаться, должны придерживаться одинаковых форматов при обмене данными. Поэтому извините, но ваш аргумент "у нас уже все настроено и работает" в данном случае не принимается.
Тот же MajorDoMo, например, автоматически разбирает строку JSON формата на "sub-topic:value", чем в занчительной степени упрощает дальнейшее использование полученных значений.

Re: Mega 2561 и MQTT

Добавлено: 22 дек 2018, 19:38
miks69
miks69 писал(а):
22 дек 2018, 18:57
Извиняюсь, ответ приходит в виде: {"port": 32,"value": "temp:0.00/hum:00.00"}
Можно ли попросить сделать в нормальном JSON формате: {"port": "32","temp": "0.00", "hum":"00.00"} чтобы удобнее было разбирать?
Уточнение по предлагаемому формату: {"port": 32,"temp": 0.00,"hum": 00.00} - числовые значения без кавычек.

Re: Mega 2561 и MQTT

Добавлено: 22 дек 2018, 19:41
miks69
Кстати, можно здесь же добавить инфо о настройке порта, например: {"port": 32,"type": "DSen","Sen": "DHT22","temp": 0.00,"hum": 00.00}

Re: Mega 2561 и MQTT

Добавлено: 22 дек 2018, 19:46
martiniman
Прошу добавить "click":0 или :3 при удержании кнопки в MQTT сообщение, при настройке порта "С", по аналогии с "m" (m всегда приходит)
Если click не приходит в сообщении, то возникает ошибка, тк json парсер его ждет

Re: Mega 2561 и MQTT

Добавлено: 22 дек 2018, 19:50
miks69
Кстати, почему то для I2C-сенсора формат данных, выдаваемых мегой другой: {"port": 30,"value": {"temp": 0.00, "hum": 00.00}}, что почти соответствует предложенному мной выше.
По крайней мере такой формат уже нормально разбирается. Можно ли попросить автора сделать унифицированный формат выдаваемых данных?

Re: Mega 2561 и MQTT

Добавлено: 22 дек 2018, 19:55
miks69
Вот так это выглядит в MD:
Capture.PNG
Capture.PNG (7.29 КБ) 2993 просмотра

Re: Mega 2561 и MQTT

Добавлено: 22 дек 2018, 19:58
martiniman
Вот стандартная разбиралка http://jsonpath.com/

Re: Mega 2561 и MQTT

Добавлено: 23 дек 2018, 12:14
martiniman
А вот соглашение по именованию топиков: https://homieiot.github.io/
С помощью него возможно делать автообнаружение и автонастройку MQTT устройств.
openHAB 2.4+ и HomeAssistant уже поддерживают.
Нет там никакого JSON, все просто и понятно, у всего свой топик.

Re: Mega 2561 и MQTT

Добавлено: 25 дек 2018, 10:30
Genix
+1 за использование homie соглашения

Re: Mega 2561 и MQTT

Добавлено: 26 окт 2019, 22:07
Madjestik58
Как управлять MegaD-2W через MQTT . Топик не формируется по событиям. JSON управления тоже не поддерживается? Или где-то надо что-то настроить?

Re: Mega 2561 и MQTT

Добавлено: 27 окт 2019, 21:21
Andrey_B
Как описано здесь контроллер подписывается на топик megad/14/cmd, где "14" - последний байт IP-адреса или идентификатор MegadID.
Команда сценариев стандартная. Синтаксис для MegaD-2W описан в разделе "Особенности работы выхода в режиме DS2413".
Например, "33B:1" включит канал "B" модуля, подключенного к порту P33.
MegaD-2W - это своего рода расширитель. Сообщения по событиям на портах (выходах) расширителя в текущий момент не публикуются, как это делается для "родных" портов контроллера.

Re: Mega 2561 и MQTT

Добавлено: 28 окт 2019, 01:57
Madjestik58
Спасибо. Разобрался, изначально слал в формате JSON отдельно 33А и статус - ничего не работало. Теперь понял. Так же проверил формат "30B:0&addr=4a3638000000" тоже в топиках работает.

Re: Mega 2561 и MQTT

Добавлено: 04 дек 2019, 09:31
Genix
Кто нибудь сталкивался с ситуацией, когда мега перестает выполнять команды из <megaid>/cmd топика, хоть в <megaid>/<port> апдейты шлет стабильно? Лечится перезагрузкой megad. Статус MQTT в настройках - connected.
Команды текстовые, вида 23:1 и тд, не JSON

fw: 4.39b5

Re: Mega 2561 и MQTT

Добавлено: 04 дек 2019, 09:57
rvv
Было такое, я писал в другой ветке.
Андрей поправил в fw: 4.39b6

Re: Mega 2561 и MQTT

Добавлено: 11 дек 2019, 16:15
leonidl
Коллеги, подскажите пожалуйста, как работать с MegaD в режиме СМС шлюза при подключении к серверу по MQTT? Как получать СМС на сервере и как их отправлять на MegaD через MQTT? Какие топики использовать? Спасибо.

Re: Mega 2561 и MQTT

Добавлено: 18 дек 2019, 14:36
mmike16
Всем добрый день. Настроил взаимодействие megad и home assistant. В целом все работает, но есть проблема со стабильностью работы megad по протоколу MQTT.

Megad fw 4.39b7
Mosquitto version 1.6.8


Попробую описать аномалии которые заметил у себя в течении дня.

1. Воспроизводится стабильно
Если через MQTT на megad отправить несколько команд без задержки, например
topic: megad/14/cmd
get:14
get:30
get:31

, то в логе Mosquitto получаю

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

2019-12-18T08:55:35: Connection Refused: unknown reason
2019-12-18T08:55:35: Socket error on client megad-14, disconnecting.
как workaround стал отправлять команды по одной с задержкой в 10 секунд, отваливать прекратило.

2. Воспроизводится случайно, за день несколько раз. Иногда при подключении к MQTT megad не подписывается на топик megad/14/cmd

Выглядит в логе Mosquitto это вот так

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

1576655290: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
1576655290: New connection from 10.8.0.5 on port 1883.
1576655290: Client megad-14 already connected, closing old connection.
1576655290: New client connected from 10.8.0.5 as megad-14 (p1, c1, k30).
1576655290: No will message specified.
1576655290: Sending CONNACK to megad-14 (0, 0)
1576655299: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
1576655310: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
"Правильное" подключение выглядит вот так:

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

1576651710: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
1576651710: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
1576651710: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14/31', ... (47 bytes))
1576651710: Sending PUBLISH to auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/31', ... (47 bytes))
1576651710: Socket error on client megad-14, disconnecting.
1576651725: New connection from 10.8.0.5 on port 1883.
1576651725: New client connected from 10.8.0.5 as megad-14 (p1, c1, k30).
1576651725: No will message specified.
1576651725: Sending CONNACK to megad-14 (0, 0)
1576651726: Received SUBSCRIBE from megad-14
1576651726:     megad/14/cmd (QoS 0)
1576651726: Sending SUBACK to megad-14
3. Воспроизводится случайно, каждые несколько часов. MQTT пишет ошибку в лог и отключает megad. В логе выглядит вот так

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

2019-12-18T08:56:32: Received PUBCOMP from megad-14 (Mid: 12129, RC:0)
2019-12-18T08:56:32: Received CONNACK on connection megad-14.
2019-12-18T08:56:32: Connection Refused: unknown reason
2019-12-18T08:56:32: Socket error on client megad-14, disconnecting.
2019-12-18T08:56:47: New connection from 10.8.0.5 on port 1883.
2019-12-18T08:56:47: New client connected from 10.8.0.5 as megad-14 (p1, c1, k30).
2019-12-18T08:56:47: No will message specified.
2019-12-18T08:56:47: Sending CONNACK to megad-14 (0, 0)
2019-12-18T08:56:48: Received SUBSCRIBE from megad-14
2019-12-18T08:56:48:    megad/14/cmd (QoS 0)
2019-12-18T08:56:48: Sending SUBACK to megad-14
4. Отправляю несколько раз 10+ команду включить выключить выход и на 10+ повторе megad перестает отвечать. Потом через небольшое время megad переподключается к брокеру и какоето время снова работает. Вот выдержка из лога Mosquitto демонстрирующая эту проблему.

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

2019-12-18T09:26:53: Received PINGREQ from megad-14
2019-12-18T09:26:53: Sending PINGRESP to megad-14
2019-12-18T09:27:10: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:27:10: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:27:12: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14/14', ... (32 bytes))
2019-12-18T09:27:12: Sending PUBLISH to auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/14', ... (32 bytes))
2019-12-18T09:27:20: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:27:20: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:27:22: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14/30', ... (62 bytes))
2019-12-18T09:27:22: Sending PUBLISH to auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/30', ... (62 bytes))
2019-12-18T09:27:26: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (3 bytes))
2019-12-18T09:27:26: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (3 bytes))
2019-12-18T09:27:27: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14/7', ... (23 bytes))
2019-12-18T09:27:27: Sending PUBLISH to auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/7', ... (23 bytes))
2019-12-18T09:27:29: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (3 bytes))
2019-12-18T09:27:29: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (3 bytes))
2019-12-18T09:27:30: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:27:30: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:27:30: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14/7', ... (24 bytes))
2019-12-18T09:27:30: Sending PUBLISH to auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/7', ... (24 bytes))
2019-12-18T09:27:30: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (3 bytes))
2019-12-18T09:27:30: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (3 bytes))
2019-12-18T09:27:34: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (3 bytes))
2019-12-18T09:27:34: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (3 bytes))
2019-12-18T09:27:43: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (3 bytes))
2019-12-18T09:27:43: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (3 bytes))
2019-12-18T09:27:47: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (3 bytes))
2019-12-18T09:27:47: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (3 bytes))
2019-12-18T09:28:10: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:28:10: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:28:10: Received PUBREL from megad-14 (Mid: 8762)
2019-12-18T09:28:10: Sending PUBCOMP to megad-14 (m8762)
2019-12-18T09:28:20: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:28:20: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:28:20: Socket error on client megad-14, disconnecting.
2019-12-18T09:28:30: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:28:31: Received PINGREQ from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15
2019-12-18T09:28:31: Sending PINGRESP to auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15
2019-12-18T09:28:35: New connection from 10.8.0.5 on port 1883.
2019-12-18T09:28:35: New client connected from 10.8.0.5 as megad-14 (p1, c1, k30).
2019-12-18T09:28:35: No will message specified.
2019-12-18T09:28:35: Sending CONNACK to megad-14 (0, 0)
2019-12-18T09:28:35: Received SUBSCRIBE from megad-14
2019-12-18T09:28:35:    megad/14/cmd (QoS 0)
2019-12-18T09:28:35: Sending SUBACK to megad-14
2019-12-18T09:28:58: Received PINGREQ from megad-14
2019-12-18T09:28:58: Sending PINGRESP to megad-14
2019-12-18T09:29:10: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:29:10: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-18T09:29:10: Received PUBLISH from megad-14 (d0, q0, r0, m0, 'megad/14/14', ... (32 bytes))

Re: Mega 2561 и MQTT

Добавлено: 18 дек 2019, 15:34
mmike16
Возникло подозрение каким образом возникает проблема 4.

HA у меня 3 раза в минуту опрашивает состояние портов
14,30,31 (т.к. там висят датчики температуры/влажности/давления)

для этого каждую минуту:
на 10-й секунде шлю в megad/14/cmd запрос get:14
на 20-й секунде шлю в megad/14/cmd запрос get:30
на 30-й секунде шлю в megad/14/cmd запрос get:31

и из UI можно управлять состоянием порт 7, можно его включать или выключать
для этого в в megad/14/cmd отправляется запрос 7:0 или 7:1

Вероятно, если два запроса совпадают между собой то в какой то момент, происходит сбой в mqtt на mega и брокер не получает ответ на один их этих запросов.
После этого получается, что port 7 в состоянии 1, а сервер думает что он в состоянии 0

В UI доступна только команда по его включению. При попытке включить порт, отправляется команда 7:1 и megad ничего не отвечает на эту команду т.к. порт уже в состоянии 1

Отсюда вроде две более четкие проблемы:

1. Разобраться как себя ведет megad когда получает несколько сообщений от брокера практически одновременно (допускаю что нужно как то по другому настроить mosquitto, что бы все работало)
2. Нужно изменить поведение megad и сделать его идемпотентным. Если приходит команда изменить состояние порта в режиме out, а порт уже находится в этом состоянии, то нужно отправлять по MQTT сообщение с текущим состоянием выхода.

Вопрос можно ли как то через команду get по MQTT запросить состояние нескольких выходов?

Re: Mega 2561 и MQTT

Добавлено: 18 дек 2019, 15:51
mmike16
Еще похоже функция srv-loop не работает если сервер подключен по протоколу MQTT.
Включил эту галочку в конфигурации megad в MQTT состояние портов не отправляет, ждал минут 10.

Как по протоколу MQTT обнаружить факт перезагрузки megad? При включении устройство не отправляет никакого сообщения.

Re: Mega 2561 и MQTT

Добавлено: 19 дек 2019, 13:04
mmike16
Megad fw 4.39b7
Mosquitto version 1.6.8

Сегодня вылезла еще новая проблема, в какой то момент megad просто перестала отвечать по mqtt и больше не пыталась повторно подключиться. Ждал больше часа.

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

2019-12-19T10:54:53: Received PINGREQ from megad-14
2019-12-19T10:54:53: Sending PINGRESP to megad-14
2019-12-19T10:55:10: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-19T10:55:10: Sending PUBLISH to mqtt_explorer (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-19T10:55:10: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-19T10:55:20: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-19T10:55:20: Sending PUBLISH to mqtt_explorer (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-19T10:55:20: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-19T10:55:30: Received PUBLISH from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-19T10:55:30: Sending PUBLISH to mqtt_explorer (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-19T10:55:30: Sending PUBLISH to megad-14 (d0, q0, r0, m0, 'megad/14/cmd', ... (6 bytes))
2019-12-19T10:55:31: Received PINGREQ from auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15
2019-12-19T10:55:31: Sending PINGRESP to auto-43A35F1D-EEB4-4CDD-F97B-A0F5ED93AA15
2019-12-19T10:55:35: Received PINGREQ from mqtt_explorer
2019-12-19T10:55:35: Sending PINGRESP to mqtt_explorer
2019-12-19T10:55:38: Client megad-14 has exceeded timeout, disconnecting.
Зашел по HTTP в конфигурацию порта, нажал кнопку save. megad перезагрузилась и подключилась к брокеру