Страница 82 из 97
Re: [Модуль] MQTT (mqtt)
Добавлено: Пт авг 13, 2021 12:50 pm
prmres
LocalBrownie писал(а): Пт авг 13, 2021 11:44 am
нужны все пропущенные. Это логи сигналки на даче.
Или я слишком многого хочу?
похоже, ваше желание выходит за рамки протокола
не помню что бы mqtt накапливал историю топиков
логи удобно складывать в syslogserver где они накапливаются
и извлекаются для чтения\обработки по мере надобности
Re: [Модуль] MQTT (mqtt)
Добавлено: Пт авг 13, 2021 11:16 pm
LocalBrownie
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."
Последнее предложение - это как раз то что мне нужно.
Так что все вполне себе в рамках. Дело за реализацией.
Re: [Модуль] MQTT (mqtt)
Добавлено: Сб авг 14, 2021 10:03 pm
xor
LocalBrownie писал(а): Пт авг 13, 2021 11:44 am
Доброго времени суток!
Подскажите плиз кто-нидь! Возможно ли настроить брокер (mosquitto на Orange Pi Zero) так чтобы он держал у себя сообщения пока сабскрайбер не выйдет на связь? Связь через GPRS и частенько отваливается.
Я игрался с retain при публикации с ESP32 (либа pubsubclient.h), но подписчик (Алиса) почему-то получает только последнее сообщение, когда появляется связь.
А нужны все пропущенные. Это логи сигналки на даче.
Или я слишком многого хочу?
не по теме, но
если логи так важны, может, их в файл писать последовательно и этот файл читать/отсылать не средствами москита? типа почтой? а размер топика максимальный какой? если большой, можно лог в спец топик выводить, не?
Re: [Модуль] MQTT (mqtt)
Добавлено: Сб авг 14, 2021 10:32 pm
fandaymon
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 если нет авторизации
Re: [Модуль] MQTT (mqtt)
Добавлено: Сб авг 14, 2021 10:45 pm
andrey040670
Ситуация не стандартная, но интересно.
Re: [Модуль] MQTT (mqtt)
Добавлено: Вс авг 15, 2021 11:31 pm
LocalBrownie
fandaymon писал(а): Сб авг 14, 2021 10:32 pm
...
В 59 строчке /scripts/cycle_mqtt.php
Код: Выделить всё
if (!$mqtt_client->connect(true, NULL, $username, $password)) {
true как раз отвечает за clean session
И в 63 если нет авторизации
Спасибище!
Буду попробовать!
Re: [Модуль] MQTT (mqtt)
Добавлено: Вс авг 15, 2021 11:41 pm
LocalBrownie
xor писал(а): Сб авг 14, 2021 10:03 pm
...
не по теме, но
если логи так важны, может, их в файл писать последовательно и этот файл читать/отсылать не средствами москита? типа почтой? а размер топика максимальный какой? если большой, можно лог в спец топик выводить, не?
Да не, как-то слишком геморно получается. ...Почта, потом из почты в Алиску засунуть.
Вообще сначала планировал писать лог на SD карту на самой ESP32 с последующем просмотром через веб-морду, но потом оказалось что на гибридной ESP (ESP32+SIM800L) SD-модуль не работает, потому что порты SPI заняты модемом. В поисках решения вот наткнулся на MQTT. Играюсь.

Re: [Модуль] MQTT (mqtt)
Добавлено: Пн авг 16, 2021 4:22 pm
LocalBrownie
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 надо поковыряться.
Re: [Модуль] MQTT (mqtt)
Добавлено: Пн авг 16, 2021 6:23 pm
fandaymon
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)
Re: [Модуль] MQTT (mqtt)
Добавлено: Пн авг 16, 2021 8:17 pm
LocalBrownie
Это понятно, но подключение с авторизацией, так что в в 63 я ничего не менял.