Страница 11 из 97

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...
больше никаких записей нет

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

Добавлено: Вс дек 10, 2017 1:11 am
in4m
Хелп, уважаемые форумчане, модуль дико долбит в лог и пожирает свободное место за 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

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

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

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

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

Если такой функционал нужен проекту, можно добавить из моего репозитория.
Если нет, то значит этот функционал нужен только мне.

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

Добавлено: Ср янв 03, 2018 10:00 pm
nick7zmail
Тут по любому есть те, кто релюшками по 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...или что там сделать надо....

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

Добавлено: Ср янв 03, 2018 10:47 pm
ivannag
Вроде когда-то с похожим голову ломал, сути не понял, но гугление вывело на такой результат:
СпойлерПоказать

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

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);
 
обратите внимание как "у" конвертируется

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

Добавлено: Ср янв 03, 2018 10:52 pm
nick7zmail
Честно - не вижу. Ткните...я вижу, только как y в Serial print выводится в чистом виде без конвертации.

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

Добавлено: Ср янв 03, 2018 11:27 pm
ivannag

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

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

после обнуления переменной у с ней производятся странные манипуляции...
payload[0] - в моем случае - то что прилетело по mqtt
без всего этого была таж история что и у вас... посылал одно значение а в скетч прилетало совсем другое, соответственно ничего не работало.
не скажу что понимаю смысл всего этого... повторюсь, что только учусь. На решение набрел после нескольких часов гугления... но мне реально помогло, возможно поможет и вам

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

Добавлено: Ср янв 03, 2018 11:31 pm
nick7zmail
Ааа...это вы назвали конвертацией)) я думал это вычисления какие-то, не относящиеся к вопросу.
Да, у меня тоже payload[0] - то что прилетает в mqtt. Но если отправляю 1 - payload[0] это 49...
а действия действительно странные. Сперва создаём переменную, потом её (0) умнржаем на 10 - получаем 0, и складываем этот 0 с пэйлодом, и зачем-то вычитаем текстовый ноль...херня какая то)) над будет попробовать =D

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

Добавлено: Ср янв 03, 2018 11:35 pm
ivannag
вот именно что херня))))) я не програмист, но именно так эту операцию и назвал)) но у меня заработало! в то время, как операции преобразования данных (из справочника по ардуино) приводили к ошибочным результатам

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

Добавлено: Ср янв 03, 2018 11:46 pm
nick7zmail
Ну ахренеть блин!!! Заработало...как так то...
Достаточно было кстати

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

payload[0]=payload[0]-'0';//вычесть из полученного значения в байтах (49 при 1, 48 при 0), байтовый 0 (48)...ну и типа в остатке 1 или 0...но это такая бредятина блин... 
Бессмысленное умножение нуля на 10 тут явно лишнее)) В любом случае спасибо! В очередной раз убеждаюсь в "капризности" Arduino IDE.