• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Решено Проблема передачи json-строки по MQTT

maxsatel

New member
Использую esp8266+micropython (v.1.9.4)+брокер mosquitto на удаленном сервере. Отсылая (по mqtt) в mosquitto json-строку вида :
{"descr": "Светодиод",
"style1": "padding-top:10px;",
"topic": "IoTmanager/espb/led1",
"widget": "toggle",
"id": 0,
"descrStyle": "font-size:20px;"},
на брокер приходит не полная строка, а следующее:
{"descr": "Светодиод",
"style1": "padding-top:10px;",
"topic": "IoTmanager/espb/led1",
"widget": "toggle",
"id": 0,
"descrStyle": "font-siz (на этом месте строка обрывается и обрывается соединение с брокером).
Что делаю не так?
 
Последнее редактирование:

Сергей_Ф

Moderator
Команда форума
maxsatel, как минимум, не соблюдаете Правила форума:
4.5. Создание дублей сообщений и тем запрещено. Если вы по ошибке создали тему или сообщение не в том разделе, где планировали (или осознали ошибочность выбора), не создавайте аналогичные темы или сообщения в другом разделе. Обратитесь к модератору - он перенесет вашу тему или сообщение, в правильный раздел.
4.13. Запрещается подъем темы. А именно, публикация сообщений, имеющих целью лишь подъем темы в списке и при этом не несущих смысловой нагрузки, например: "неужели никто не знает?" или "ап!".
4.14. Запрещены неинформативные названия тем, например: "Памагите!", "У меня проблема!", "Крик души!" и т. п. Также запрещено в теме сообщения писать личные пожелания, например: "Настройка ESP8266. Срочно!!!". Если участники форума знают ответ на Ваш вопрос, то они ответят независимо от того "срочно" вам это надо или нет.
 

Сергей_Ф

Moderator
Команда форума
@CodeNameHawk ну по спецификации там 65536 символов может быть. Так что даже в utf должно хватать.
Вопрос скорее, как ТС формирует и отсылает эту строку. Но я в micropython не силен.
 

Сергей_Ф

Moderator
Команда форума
maxsatel, убедитесь что вы отправляете именно такую строку, как ожидаете. Вполне возможно что это она обрезается ещё в esp.
Ну и общие рекомендации по mqtt подразумевают максимальную краткость в написании данных. Это все же не amqp.
 

maxsatel

New member
Спасибо за ответы.
Формирую и отсылаю json-сроку следующим образом:

Код:
import  ujson, ubinascii
from umqtt.simple import MQTTClient


dict = {}
dict["id"] = 0
dict["widget"] = "toggle"
dict["topic"] = "IoTmanager/espb/led1"
dict["descr"] = b"Светодиод"
dict["style1"] = "padding-top:10px;"
dict["descrStyle"] = "font-size:20px;"

jsob = ujson.dumps(dict)

client = MQTTClient(client_id=str(id),
server='www.domen.ru',
port=1883,
user='user1',
password='pass1')
client.connect()

client.publish(b'/IoTmanager/' + ubinascii.hexlify(machine.unique_id()) + '/config',  jsob, qos=1)
По поводу максимальной длины строки не могу сказать, но в скетчах написанных на других языках, все работает (IoTmanager — мобильный MQTT-клиент с необычной концепцией) . Еще такой нюанс, если передаю словарь, а не json, все данные доходят полностью.
 

Сергей_Ф

Moderator
Команда форума
maxsatel, в любом случае, попробуйте сделать отладочный вывод в uart получившейся строки jsob.
И посмотрите нет ли ограничений в библиотеке ujson
 

maxsatel

New member
Проблема решена.
Оказывается причина была в написании кириллицей значения - "Светодиод". После исправления на "Svetodiod", да и вообще на любое значение (в том числе любой длины) латинскими буквами, вся строка пересылается полностью. Думаю причина кроется в модуле mqtt.simple, не дружит он с кириллицей.
Большое спасибо всем за участие.
 
Сверху Снизу