длина сообщения в топиках MQTT
- Войдите на сайт для отправки комментариев
Втр, 24/08/2021 - 13:39
здравствуйте, дорогие форумчане! нужен ваш совет. и опять MQTT. столкнулся с проблемой, и связана она с длиной сообщения в топике. функции отправки и принятия я думаю стандартные и о них тут уже писали
void MQTT_FloatPub (const char* topic, float val, int x) { char st[10]; dtostrf(val,0, x, st), MQTT_PUB (topic, st); } ////////////////////////////////////////////////////////2///////////////////////////////////////////////////// void MQTT_PUB(const char* MQTT_topic, const char* MQTT_messege) { // пакет на публикацию SIM800.write(0x30); SIM800.write(strlen(MQTT_topic) + strlen(MQTT_messege) +2 );//+2 SIM800.write((byte)0x00); SIM800.write(strlen(MQTT_topic)); SIM800.write(MQTT_topic); // топик SIM800.write(MQTT_messege); } // сообщение ///////////////////////////////////////////////////////5////////////////////////////////////////////////////////// void MQTT_SUB (const char* MQTT_topic) { SIM800.write(0x82); SIM800.write(strlen(MQTT_topic)+5); //+5 SIM800.write((byte)0x00); SIM800.write(0x01); SIM800.write((byte)0x00); SIM800.write(strlen(MQTT_topic)); SIM800.write(MQTT_topic); SIM800.write((byte)0x00); }
если длина топика к примеру вот такая 84E4DF59/sub/temp24.94 то брокер обрабатывает и все работает без сбоев. но если первое слово увеличиваю хотя бы до 9 символов к примеру B84E4DF59/sub/temp24.94.то брокер разрывает соединение собщением CLOSED. подскажите в чем может быть проблемма? или размер сообщения превышает какой то размер.
похоже, что вы некорректно считаете длину отправляемых данных, строки 8 и 16, соответственно брокер прерывает соединение с клиентом.
выведете в консоль все вычисляемые цифры, которые вы отправляете брокеру, сравните/рассчитайте как должно быть по стандарту MQTT
тут можете посмотреть примеры pub функций:
http://arduino.ru/forum/programmirovanie/snova-mqtt-1?page=1#comment-570275
я понинмаю все сообщение нужно в формат HEX перевести? как вообще правильно расчитать? извиняйте за навязчивость!
да, именно так, разобрать любое сообщение на составляющие, понять что и где должно быть, и тогда только вне зависимости от длины все будет нормально уходить.
все тут:
MQTT Specification
Update: и непонятно в каком режиме вы все шлете в модем, нет полного кода программы, может вы сказали отправить модему пакет X байт, а шлете Y, конечно у него крыша поедет.
в теме про MQTT все есть, прочитайте полностью.