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

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

Модератор: immortal

ученик
Сообщения: 230
Зарегистрирован: Чт фев 12, 2015 2:34 pm
Благодарил (а): 36 раз
Поблагодарили: 6 раз

Re: Предложения по доработке модуля MQTT

Сообщение ученик » Чт сен 14, 2017 6:53 am

Вот что записано в
/var/www/debmes/log_2017-09-13-cycle_mqtt.php.txt
  • 14:15:06 Topics to watch: /var/now/# (Total: 1)
    14:15:06 Path: /var/now/#
    14:15:06 Subscribing to: /var/now/#
    17:19:28 Topics to watch: /var/now/# (Total: 1)
    17:19:28 Path: /var/now/#
    17:19:28 Subscribing to: /var/now/#
    Trying to reconnect...
больше никаких записей нет
server i5, OS-Ubuntu Server 16., 1-wire
php 7, AMS,broadlink rm2,rm3 mini.
in4m
Сообщения: 15
Зарегистрирован: Сб июл 26, 2014 12:01 am
Благодарил (а): 0
Поблагодарили: 2 раза

Re: Предложения по доработке модуля MQTT

Сообщение in4m » Вс дек 10, 2017 1:11 am

Хелп, уважаемые форумчане, модуль дико долбит в лог и пожирает свободное место за 1 минуту набегает по 80 мб.

Такое чувство, что в модуле что-то с таймаутом на подключение, иначе зачем он закрывает уже установленное соединение?
вкратце: решил сегодня настроить сопряжение с MQTT, установил брокер mosquttto на ubuntu 16.04 , настроил модуль mqtt.
Вроде бы все здорово, но в логах mosquitto с космической скоростью долбят сообщения.
Вывод с mosquitto, запущенного в консоле на 3 секунды:
1512857150: New client connected from 172.16.0.20 as MajorDoMo (c0, k10).
1512857150: New connection from 172.16.0.20 on port 1883.
1512857150: New connection from 172.16.0.20 on port 1883.
1512857150: Client MajorDoMo already connected, closing old connection.
1512857150: Client MajorDoMo disconnected.
1512857150: New client connected from 172.16.0.20 as MajorDoMo (c0, k10).
1512857150: Client MajorDoMo already connected, closing old connection.
1512857150: Client MajorDoMo disconnected.
1512857150: New client connected from 172.16.0.20 as MajorDoMo (c0, k10).
1512857150: New connection from 172.16.0.20 on port 1883.
1512857150: Client MajorDoMo already connected, closing old connection.
1512857150: Client MajorDoMo disconnected.
1512857150: New client connected from 172.16.0.20 as MajorDoMo (c0, k10).
C1512857150: Client MajorDoMo already connected, closing old connection.
1512857150: Client MajorDoMo disconnected.
1512857150: New client connected from 172.16.0.20 as MajorDoMo (c0, k10).
1512857150: mosquitto version 1.4.14 terminating

тут похоже описывают туже самую проблему: https://majordomo.smartliving.ru/forum/ ... =30#p65277
DX168B
Сообщения: 11
Зарегистрирован: Вт янв 02, 2018 7:10 pm
Благодарил (а): 0
Поблагодарили: 3 раза

Re: Предложения по доработке модуля MQTT

Сообщение DX168B » Вт янв 02, 2018 7:50 pm

Вчера решил заняться своим сервером. В принципе, нареканий никаких небыло, за исключением модуля MQTT.
Дело в том, что мои устройства используют два разных пути для обмена данными. Один для чтения, другой для записи.
И в модуле эти пути можно задать, что очень даже хорошо. Однако, если по какому-нибудь пути для записи опубликовать
данные, то этот топик появляется в общем списке. Это конечно не создает проблем с работоспособностью системы,
однако список топиков начинает жирнеть. Имея 20 таких устройств, получим список из 40 топиков. А если устройство использует несколько таких топиков, список растолстеет до бесконечности.
Собственно, я взялся поправить код модуля, чтобы устранить эту "фичу".

Добавил галочку, которая определяет, что делать в путем write, если кто-то там опубликовал данные.
Если снята, то все как обычно - захламляем список.
Если поставлена, то игнорируем это сообщение и список не трогаем.
Все остальное как обычно.

Код на гитхабе: DX168B/majordomo-mqtt
Создан запрос на слияние разработчику модуля.

Если такой функционал нужен проекту, можно добавить из моего репозитория.
Если нет, то значит этот функционал нужен только мне.
Вложения
majordomo-mqtt.png
majordomo-mqtt.png (39.47 КБ) 5184 просмотра
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Предложения по доработке модуля MQTT

Сообщение nick7zmail » Ср янв 03, 2018 10:00 pm

Тут по любому есть те, кто релюшками по mqtt рулят))
Подскажите пожалуйста...весь вечер убил, голову ломаю...
короче есть простенькая функция в ардуине:

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

void rel_sw(byte num, byte stat) {...} 
которая рулит релюшками. Вполне себе нормально рулит...переключает нужное реле в нужное положение...ща пытаюсь прикрутить MQTT к ней...пытаюсь отправить статус

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

void rel_sw(byte num, byte stat) {
    char rel_name[30];
    sprintf(rel_name, "%s%d", "/AMSmega/stats/REL", num+1); //формируем топик
    mclient.publish(rel_name, stat); //засылаем сообщение
}
 
MQTT естественно подключен, инициализирован, функционирует.
Топик создаётся, но пустой (!). То есть статус туда не прилетает...Пытаюсь вывести в сериал порт - вижу там "49".
При обратной связи (попытке управления) та же фигня...но (!!) если пытаюсь указать при отправке топика значение byte - то отрабатывает отлично. Но это мало кто из клиентов так умеет. МД уж и по давно не умеет такого.
Я догадываюсь, что собака зарыта где-то в преобразовании byte...но во что???...в mqtt сообщение и так в byte отправляется...и у меня мозг ломается-как так...отправляю 1 в сообщении mqtt, а ловлю 49 в byte...хотя сообщение вроде тоже в byte...короче с преобразованиями вообще мозг сломал...не пойму где накосячил...кто может помочь? Как и во что преобразовывать надо, чтобы byte число 1 являлось int числу 1 например...или char...или что там сделать надо....
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
ivannag
Сообщения: 146
Зарегистрирован: Вт апр 12, 2016 12:19 am
Благодарил (а): 18 раз
Поблагодарили: 27 раз

Re: Предложения по доработке модуля MQTT

Сообщение ivannag » Ср янв 03, 2018 10:47 pm

Вроде когда-то с похожим голову ломал, сути не понял, но гугление вывело на такой результат:
СпойлерПоказать

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

void callback(char* topic, byte* payload, unsigned int length) //читаем топики
{
  delay(10);
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("]  ");
  String strTopic = String(topic);
  String strPayload = String((char*)payload);
  

   Serial.println();
  int y=0;
  y= y*10+payload[0]-'0';
  Serial.print("y=");
  Serial.println(y);
 
обратите внимание как "у" конвертируется
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Предложения по доработке модуля MQTT

Сообщение nick7zmail » Ср янв 03, 2018 10:52 pm

Честно - не вижу. Ткните...я вижу, только как y в Serial print выводится в чистом виде без конвертации.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
ivannag
Сообщения: 146
Зарегистрирован: Вт апр 12, 2016 12:19 am
Благодарил (а): 18 раз
Поблагодарили: 27 раз

Re: Предложения по доработке модуля MQTT

Сообщение ivannag » Ср янв 03, 2018 11:27 pm

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

int y=0; 
  y= y*10+payload[0]-'0'; 

после обнуления переменной у с ней производятся странные манипуляции...
payload[0] - в моем случае - то что прилетело по mqtt
без всего этого была таж история что и у вас... посылал одно значение а в скетч прилетало совсем другое, соответственно ничего не работало.
не скажу что понимаю смысл всего этого... повторюсь, что только учусь. На решение набрел после нескольких часов гугления... но мне реально помогло, возможно поможет и вам
За это сообщение автора ivannag поблагодарил:
nick7zmail (Ср янв 03, 2018 11:47 pm)
Рейтинг: 1.16%
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Предложения по доработке модуля MQTT

Сообщение nick7zmail » Ср янв 03, 2018 11:31 pm

Ааа...это вы назвали конвертацией)) я думал это вычисления какие-то, не относящиеся к вопросу.
Да, у меня тоже payload[0] - то что прилетает в mqtt. Но если отправляю 1 - payload[0] это 49...
а действия действительно странные. Сперва создаём переменную, потом её (0) умнржаем на 10 - получаем 0, и складываем этот 0 с пэйлодом, и зачем-то вычитаем текстовый ноль...херня какая то)) над будет попробовать =D
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
ivannag
Сообщения: 146
Зарегистрирован: Вт апр 12, 2016 12:19 am
Благодарил (а): 18 раз
Поблагодарили: 27 раз

Re: Предложения по доработке модуля MQTT

Сообщение ivannag » Ср янв 03, 2018 11:35 pm

вот именно что херня))))) я не програмист, но именно так эту операцию и назвал)) но у меня заработало! в то время, как операции преобразования данных (из справочника по ардуино) приводили к ошибочным результатам
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Предложения по доработке модуля MQTT

Сообщение nick7zmail » Ср янв 03, 2018 11:46 pm

Ну ахренеть блин!!! Заработало...как так то...
Достаточно было кстати

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

payload[0]=payload[0]-'0';//вычесть из полученного значения в байтах (49 при 1, 48 при 0), байтовый 0 (48)...ну и типа в остатке 1 или 0...но это такая бредятина блин... 
Бессмысленное умножение нуля на 10 тут явно лишнее)) В любом случае спасибо! В очередной раз убеждаюсь в "капризности" Arduino IDE.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Ответить