Выполнение команды USSD на модеме GSM (возможно, неправильная кодировка)

Я пытаюсь выполнить команду USSD с помощью модема GSM.

AT+CUSD=1,"*200#",15

и результат, который я получаю, не читается

"+CUSD: 0,"Æ·ÜNÓu9XŽt ¤å1:,? - u0Œt ši7è,Óëizy®ƒ5ÓnÔL "Ai7½,w‡éé·;Ì. ÒAòòœvÓËs ÖL" ",15"

когда я пытаюсь использовать тот же самый код ussd на мобильном телефоне, используя тот же сим, я получаю правильный результат, который

"Forfait: 909DA. Перезарядка: 0,0DA. Минимальное вознаграждение: 0 мин. Минимальное международное восстановление: 0 мин."

изменение набора символов AT+CSCS с GSM на IRA или PCCP, PCDN, 8859-1 не меняет ответ, это точно такой же ответ

и изменение AT+CSCS на hex дает мне ошибку:

AT+CSCS="HEX"
AT+CUSD=1,"*200#",15 

OK
+CUSD: 2,"Unexpected Data Value",15
+CUSD: 2,"Unexpected Data Value",15
ERROR

и изменив его на UCS2 и вызвав USSD, перезагрузите мой модем

AT+CSCS="UCS2"
AT+CUSD=1,"*200#",15 

2 ответа

AT+CUSD Команда указана в 27.007, а формат незапрошенного кода результата определяется как +CUSD: <m>[,<str>,<dcs>],

Из полученного ответа вы можете видеть, что <m> является 0 а также <dcs> является 15 в дополнение к бреду для <str> который, кстати, не просто отображается непосредственно на AT+CSCS кодировка символов; Существует целый раздел, посвященный объяснению его презентации, который вы должны изучить дальше.

Глядя на стандарт 23.038, упомянутый в 27.007, <dcs> значение 15 сопоставляется с языком, который не указан, но чтение текста выше также похоже на 7-битный алфавит GSM по умолчанию.

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

Для отладки этого я бы начал с установки AT+CSCS="HEX" и убедитесь, что полученные данные имеют смысл при декодировании, а затем работайте над тем, чтобы либо представить их в пригодном для использования формате, либо, возможно, декодировать их явно из шестнадцатеричного кода в программном обеспечении самостоятельно (но помните, что изменение AT+CSCS затем применяется ко всем строкам, включая <chset> параметр AT+CSCS когда вы хотите изменить кодировку на что-то другое позже...)

AT + CMGF = 0

AT + CSCS = НЕХ

AT+CUSD=1,"*123#", 15

получить результат и конвертировать usdd pdu в текст

python lib: https://pypi.org/project/PDUUSSDConverter/

прямой ответ. удачи

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