Выполнение команды 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/
прямой ответ. удачи