Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

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

Тема в разделе "MicroPython", создана пользователем maxsatel, 8 янв 2019.

  1. maxsatel

    maxsatel Новичок

    Сообщения:
    4
    Симпатии:
    2
    Использую 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 (на этом месте строка обрывается и обрывается соединение с брокером).
    Что делаю не так?
     
    Последнее редактирование: 8 янв 2019
  2. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    1.678
    Симпатии:
    172
    maxsatel, как минимум, не соблюдаете Правила форума:
     
  3. maxsatel

    maxsatel Новичок

    Сообщения:
    4
    Симпатии:
    2
    Отредактировал.
     
    Сергей_Ф нравится это.
  4. CodeNameHawk

    CodeNameHawk Гуру

    Сообщения:
    1.053
    Симпатии:
    115
    Вопросом на вопрос.
    А какой максимальной длины может быть сообщение?
     
  5. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    1.678
    Симпатии:
    172
    @CodeNameHawk ну по спецификации там 65536 символов может быть. Так что даже в utf должно хватать.
    Вопрос скорее, как ТС формирует и отсылает эту строку. Но я в micropython не силен.
     
  6. Сергей_Ф

    Сергей_Ф Moderator Команда форума

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

    maxsatel Новичок

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

    Код (Text):
    1. import  ujson, ubinascii
    2. from umqtt.simple import MQTTClient
    3.  
    4.  
    5. dict = {}
    6. dict["id"] = 0
    7. dict["widget"] = "toggle"
    8. dict["topic"] = "IoTmanager/espb/led1"
    9. dict["descr"] = b"Светодиод"
    10. dict["style1"] = "padding-top:10px;"
    11. dict["descrStyle"] = "font-size:20px;"
    12.  
    13. jsob = ujson.dumps(dict)
    14.  
    15. client = MQTTClient(client_id=str(id),
    16. server='www.domen.ru',
    17. port=1883,
    18. user='user1',
    19. password='pass1')
    20. client.connect()
    21.  
    22. client.publish(b'/IoTmanager/' + ubinascii.hexlify(machine.unique_id()) + '/config',  jsob, qos=1)
    23.  
    По поводу максимальной длины строки не могу сказать, но в скетчах написанных на других языках, все работает (IoTmanager — мобильный MQTT-клиент с необычной концепцией) . Еще такой нюанс, если передаю словарь, а не json, все данные доходят полностью.
     
  8. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    1.678
    Симпатии:
    172
    maxsatel, в любом случае, попробуйте сделать отладочный вывод в uart получившейся строки jsob.
    И посмотрите нет ли ограничений в библиотеке ujson
     
  9. Юрий Ботов

    Юрий Ботов Moderator Команда форума

    Сообщения:
    967
    Симпатии:
    162
    Я бы на вашем месте тупо закомментировал бы строку
    и посмотрел бы - проходит без нее или нет. ИМХО.
     
  10. maxsatel

    maxsatel Новичок

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

Поделиться этой страницей