[Модуль] MQTT (mqtt)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Аватара пользователя
prmres
Сообщения: 428
Зарегистрирован: Пт ноя 24, 2017 2:24 am
Откуда: оттуда
Благодарил (а): 113 раз
Поблагодарили: 123 раза

Re: [Модуль] MQTT (mqtt)

Сообщение prmres » Пт авг 13, 2021 12:50 pm

LocalBrownie писал(а):
Пт авг 13, 2021 11:44 am
нужны все пропущенные. Это логи сигналки на даче.
Или я слишком многого хочу? ;)
похоже, ваше желание выходит за рамки протокола
не помню что бы mqtt накапливал историю топиков

логи удобно складывать в syslogserver где они накапливаются
и извлекаются для чтения\обработки по мере надобности
Не только лишь все!
LocalBrownie
Сообщения: 66
Зарегистрирован: Пт июл 11, 2014 11:08 am
Благодарил (а): 16 раз
Поблагодарили: 9 раз

Re: [Модуль] MQTT (mqtt)

Сообщение LocalBrownie » Пт авг 13, 2021 11:16 pm

prmres писал(а):
Пт авг 13, 2021 12:50 pm
похоже, ваше желание выходит за рамки протокола
не помню что бы mqtt накапливал историю топиков
Тогда в чем идея "Message Queye"? Можно просто get запросами передавать инфу по HTTP. Кто проспал - сам виноват.
Syslog не подходит. Логи должны пройти через Алиску (модуль в помощь), проанализироваться и после этого сложиться в файл на домашнем серваке.

Сегодня где-то вычитал что подписчику надо подписываться на топик с ключем "Clean Session = False" и тогда автономный клиент при подключении получит все что он пропустил. Но вот где это можно указать в MQTT-модуле MJD?

О, нашел на mosquitto.org Цитата:
"mosquitto_sub -c,
--disable-clean-session
Disable 'clean session' / enable persistent client mode. When this argument is used, the broker will be instructed not to clean existing sessions for the same client id when the client connects, and sessions will never expire when the client disconnects. MQTT v5 clients can change their session expiry interval with the -x argument.

When a session is persisted on the broker, the subscriptions for the client will be maintained after it disconnects, along with subsequent QoS 1 and QoS 2 messages that arrive. When the client reconnects and does not clean the session, it will receive all of the queued messages."
Последнее предложение - это как раз то что мне нужно.
Так что все вполне себе в рамках. Дело за реализацией.
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: [Модуль] MQTT (mqtt)

Сообщение xor » Сб авг 14, 2021 10:03 pm

LocalBrownie писал(а):
Пт авг 13, 2021 11:44 am
Доброго времени суток!
Подскажите плиз кто-нидь! Возможно ли настроить брокер (mosquitto на Orange Pi Zero) так чтобы он держал у себя сообщения пока сабскрайбер не выйдет на связь? Связь через GPRS и частенько отваливается.
Я игрался с retain при публикации с ESP32 (либа pubsubclient.h), но подписчик (Алиса) почему-то получает только последнее сообщение, когда появляется связь.
А нужны все пропущенные. Это логи сигналки на даче.
Или я слишком многого хочу? ;)
не по теме, но
если логи так важны, может, их в файл писать последовательно и этот файл читать/отсылать не средствами москита? типа почтой? а размер топика максимальный какой? если большой, можно лог в спец топик выводить, не?
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: [Модуль] MQTT (mqtt)

Сообщение fandaymon » Сб авг 14, 2021 10:32 pm

LocalBrownie писал(а):
Пт авг 13, 2021 11:16 pm
prmres писал(а):
Пт авг 13, 2021 12:50 pm
похоже, ваше желание выходит за рамки протокола
не помню что бы mqtt накапливал историю топиков
Тогда в чем идея "Message Queye"? Можно просто get запросами передавать инфу по HTTP. Кто проспал - сам виноват.
Syslog не подходит. Логи должны пройти через Алиску (модуль в помощь), проанализироваться и после этого сложиться в файл на домашнем серваке.

Сегодня где-то вычитал что подписчику надо подписываться на топик с ключем "Clean Session = False" и тогда автономный клиент при подключении получит все что он пропустил. Но вот где это можно указать в MQTT-модуле MJD?

О, нашел на mosquitto.org Цитата:
"mosquitto_sub -c,
--disable-clean-session
Disable 'clean session' / enable persistent client mode. When this argument is used, the broker will be instructed not to clean existing sessions for the same client id when the client connects, and sessions will never expire when the client disconnects. MQTT v5 clients can change their session expiry interval with the -x argument.

When a session is persisted on the broker, the subscriptions for the client will be maintained after it disconnects, along with subsequent QoS 1 and QoS 2 messages that arrive. When the client reconnects and does not clean the session, it will receive all of the queued messages."
Последнее предложение - это как раз то что мне нужно.
Так что все вполне себе в рамках. Дело за реализацией.
В 59 строчке /scripts/cycle_mqtt.php

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

if (!$mqtt_client->connect(true, NULL, $username, $password)) {
true как раз отвечает за clean session

И в 63 если нет авторизации
За это сообщение автора fandaymon поблагодарили (всего 2):
andrey040670 (Сб авг 14, 2021 10:42 pm) • LocalBrownie (Вс авг 15, 2021 11:23 pm)
Рейтинг: 2.33%
Аватара пользователя
andrey040670
Сообщения: 458
Зарегистрирован: Пн июл 31, 2017 10:00 pm
Благодарил (а): 161 раз
Поблагодарили: 85 раз

Re: [Модуль] MQTT (mqtt)

Сообщение andrey040670 » Сб авг 14, 2021 10:45 pm

Ситуация не стандартная, но интересно.
MJD alfa: Khadas VIM1 Ubuntu 18.04.2 LTS bionic Linux 4.9.40 #2 SMP PREEMPT Tue Oct 30 15:47:54 CST 2018 aarch64 GNU/Linux
MJD alfa: Rpi 3B Debian 11 (bullseye) Linux raspberrypi 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr 3 17:24:16 BST 2023 aarch64 GNU/Linux
LocalBrownie
Сообщения: 66
Зарегистрирован: Пт июл 11, 2014 11:08 am
Благодарил (а): 16 раз
Поблагодарили: 9 раз

Re: [Модуль] MQTT (mqtt)

Сообщение LocalBrownie » Вс авг 15, 2021 11:31 pm

fandaymon писал(а):
Сб авг 14, 2021 10:32 pm
...
В 59 строчке /scripts/cycle_mqtt.php

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

if (!$mqtt_client->connect(true, NULL, $username, $password)) {
true как раз отвечает за clean session

И в 63 если нет авторизации
Спасибище!
Буду попробовать!
LocalBrownie
Сообщения: 66
Зарегистрирован: Пт июл 11, 2014 11:08 am
Благодарил (а): 16 раз
Поблагодарили: 9 раз

Re: [Модуль] MQTT (mqtt)

Сообщение LocalBrownie » Вс авг 15, 2021 11:41 pm

xor писал(а):
Сб авг 14, 2021 10:03 pm
...
не по теме, но
если логи так важны, может, их в файл писать последовательно и этот файл читать/отсылать не средствами москита? типа почтой? а размер топика максимальный какой? если большой, можно лог в спец топик выводить, не?
Да не, как-то слишком геморно получается. ...Почта, потом из почты в Алиску засунуть.
Вообще сначала планировал писать лог на SD карту на самой ESP32 с последующем просмотром через веб-морду, но потом оказалось что на гибридной ESP (ESP32+SIM800L) SD-модуль не работает, потому что порты SPI заняты модемом. В поисках решения вот наткнулся на MQTT. Играюсь. :)
LocalBrownie
Сообщения: 66
Зарегистрирован: Пт июл 11, 2014 11:08 am
Благодарил (а): 16 раз
Поблагодарили: 9 раз

Re: [Модуль] MQTT (mqtt)

Сообщение LocalBrownie » Пн авг 16, 2021 4:22 pm

fandaymon писал(а):
Сб авг 14, 2021 10:32 pm
...
В 59 строчке /scripts/cycle_mqtt.php

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

if (!$mqtt_client->connect(true, NULL, $username, $password)) {
true как раз отвечает за clean session

И в 63 если нет авторизации
Изменил 59-ю на

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

if (!$mqtt_client->connect(false, NULL, $username, $password)) {
Рестартанул Алису, но ничего не изменилось. Наверное еще в настройках mosquitto надо поковыряться.
fandaymon
Сообщения: 1553
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 39 раз
Поблагодарили: 574 раза

Re: [Модуль] MQTT (mqtt)

Сообщение fandaymon » Пн авг 16, 2021 6:23 pm

LocalBrownie писал(а):
Пн авг 16, 2021 4:22 pm
fandaymon писал(а):
Сб авг 14, 2021 10:32 pm
...
В 59 строчке /scripts/cycle_mqtt.php

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

if (!$mqtt_client->connect(true, NULL, $username, $password)) {
true как раз отвечает за clean session

И в 63 если нет авторизации
Изменил 59-ю на

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

if (!$mqtt_client->connect(false, NULL, $username, $password)) {
Рестартанул Алису, но ничего не изменилось. Наверное еще в настройках mosquitto надо поковыряться.
Если подключение идёт без авторизации, то ещё надо в 63 строке поменять на
!$mqtt_client->connect(true)
LocalBrownie
Сообщения: 66
Зарегистрирован: Пт июл 11, 2014 11:08 am
Благодарил (а): 16 раз
Поблагодарили: 9 раз

Re: [Модуль] MQTT (mqtt)

Сообщение LocalBrownie » Пн авг 16, 2021 8:17 pm

Это понятно, но подключение с авторизацией, так что в в 63 я ничего не менял.
Ответить