Какой escape-символ в AT-командах?

Я использую модем BG96 для подключения к AWS iot через MQTT.

Я пытаюсь установить MQTT Last Will and Testament с помощью следующей AT-команды:

+QMTCFG:"will",(0-5),(0,1),(0-2),(0,1),"willtopic","willmessage"

Что отлично работает. Но теперь я пытаюсь добавить строку в формате JSON в"willmessage", поэтому мне нужно добавить ""(двойные кавычки) там, что означает, что мне нужно избежать их в моей команде. Но я понятия не имею, смогу ли я их избежать или что такое escape-символ.

Что я пробовал: \" (обратная косая черта) и "" (двойные двойные кавычки)

Я просмотрел все спецификации BG96 и нигде не нашел упоминания об этом.

3 ответа

Побег от"внутри строки рассматривается в главе 5.4.2.2 Строковые константы в стандарте V.250 , которую ДОЛЖЕН ПРОЧИТАТЬ каждый, кто пишет код, обрабатывающий AT-команды (прочитайте хотя бы всю главу 5):

Строковые константы должны состоять из последовательности ... за исключением символов """ ... Строковые константы должны быть ограничены в начале и конце символом двойной кавычки (""" ... ... символ двойной кавычки, используемый в качестве начального и конечного разделителя строк, должен быть представлен внутри строковой константы как "\22".

Итак, механизм побега\22нет\x22. Это должно быть универсальным случаем для всех модемов, а не чем-то, что зависит от реализации.

Я не нашел ссылки на документацию MQTT и BG96, и вы не связали ни одну из ваших «всех таблиц данных BG96», поэтому я просто привожу пример синтаксиса для воображаемой команды для отправки полезной нагрузки JSON{"key": "value"}:

      AT+SOMECOMMAND=...,"{\22key\22: \22value\22}"

Некоторые специальные символы имеют разные значения в наборе символов ASCII и наборе символов GSM.

то есть

  • В наборе символов ASCII:\= 0x5С.
  • В наборе символов GSM:Ö= 0x5С.

Помимо этого, некоторые специальные символы необходимо вводить особым образом, например, в виде 2-байтового представления. Я предлагаю вам проверить стандарт/версию AT-команд, реализованных на вашем оборудовании (например, GSM 07.07, GSM 07.05, определенный производителем набор...).

т.е. я использую модем GPS+GPRS от Ai-Thinker под названием A9G. В этом случае, чтобы использовать команду AT+MQTTPUB с данными, отформатированными в стиле JSON, мне нужно добавить\x5c\x32\x32. Таким образом, модуль будет интерпретировать это как\22и сервер как\".

иг

      "{\x5c\x32\x32Key\x5c\x32\x32:\x5c\x32\x32Value\x5c\x32\x32}"

в облаке будет:

      {"Key":"Value"}

У меня была такая же проблема при использовании команд MQTT на SIMCOM SIM800c, и я заметил, что обычная обратная косая черта (\) выходит из кавычек (как в c) при прямой связи с модулем GSM через преобразователь USB в TTL. Чтобы реализовать это в программном обеспечении, я распечатал следующую строку на UART, подключенном к модему GSM:

AT+SMPUB=\"testTopicPost\",0,1,\"{\x5c\x22Key\x5c\x22 : \x5c\x22Value\x5c\x22}\"

В основном это отправляет необработанные символы \ и "на GSM-блок. Надеюсь, это решение сработает и для вас.

Другие вопросы по тегам