Здравствуйте. Подскажите как расшифровать USSD ?
Оборудование Микротик SXT LTE kit.
Делаю запрос
/interface lte at-chat lte1 input="AT+CUSD=1,\"*102#\",15"
ответ
May/23/2019 16:03:15 lte,async lte1: sent at+cusd=1, *102#,15
May/23/2019 16:03:15 lte,async lte1: rcvd OK
May/23/2019 16:03:15 lte,async,event +CUSD: 0,"002d0031002e0030003000200440002e", 17
Выяснил особенность если стоит только 4G USSD не работают. Оператор Ростелеком(теле2). Должна стоять еще галка 3g.
И когда делаешь запрос , модем переключается на 3g, и выполняет USSD.
USSD запрос баланса
-
- Сообщения: 7
- Зарегистрирован: 02 июн 2019, 14:01
Если расшифровать на самом микротике проблема. То переслать бы это закодированное сообщение на мой телефон. Пусть телефон расшифрует.
-
- Сообщения: 7
- Зарегистрирован: 02 июн 2019, 14:01
Вот автор выложил скрипт по расшифровке СМС
viewtopic.php?p=60260#p60260
Может сможет в него добавить проверку USSD
viewtopic.php?p=60260#p60260
Может сможет в него добавить проверку USSD
-
- Сообщения: 7
- Зарегистрирован: 02 июн 2019, 14:01
Сделал программку для расшифровки https://yadi.sk/d/cJ0fn0O2sTy9Dg
Последний раз редактировалось Zlodeyz 04 июн 2019, 14:27, всего редактировалось 1 раз.
-
- Сообщения: 5
- Зарегистрирован: 28 фев 2018, 10:43
Попробуйте вот это.
USSD-команда указывается в начале скрипта.
Декодирует UTF-8 кириллицу в транслит.
Пример обработки строки с балансом и уведомлением по e-mail можете посмотреть в моем обработчике "sms_patrol" (см. ссылку выше).
Для тех, кто никогда не работал со скриптами: Сохраните это в виде скрипта (например: "ussd_110") и выполняйте через в терминале или через scheduler командой: /system script run ussd_110
USSD-команда указывается в начале скрипта.
Декодирует UTF-8 кириллицу в транслит.
Пример обработки строки с балансом и уведомлением по e-mail можете посмотреть в моем обработчике "sms_patrol" (см. ссылку выше).
Для тех, кто никогда не работал со скриптами: Сохраните это в виде скрипта (например: "ussd_110") и выполняйте через в терминале или через scheduler командой: /system script run ussd_110
Код: Выделить всё
#For R11e-LTE:
#:local ussd "*110#";
#for Huawei must be in PDU-format. Converter: http://smstools3.kekekasvi.com/topic.php?id=288
#:local ussd "AA580C3602";
#---- system variables ---
:local smsArray ({});
/interface lte at-chat lte1 input="AT+CMGF=0";
:put "Sending USSD command \"$ussd\" and waiting to response...\n";
:local content [/interface lte at-chat lte1 input="AT+CUSD=1,\"$ussd\",15" as-value wait=yes];
:set content ($content->"output");
#:put $content;
:if ([:typeof [:find $content "+CUSD: "]] = "num") do={
:local symbols {"-";" ";" ";"!";"\"";"#";"\$";"%";"&";"'";"(";")";"*";"+";",";"-";".";"/";"0";"1";"2";"3";"4";"5";"6";"7";"8";"9";":";";";"<";"=";">";"?";"@";"A";"B";"C";"D";"E";"F";"G";"H";"I";"J";"K";"L";"M";"N";"O";"P";"Q";"R";"S";"T";"U";"V";"W";"X";"Y";"Z";"[";"\\";"]";"^";"_";"`";"a";"b";"c";"d";"e";"f";"g";"h";"i";"j";"k";"l";"m";"n";"o";"p";"q";"r";"s";"t";"u";"v";"w";"x";"y";"z";"{";"|";"}";"~"};
:local symbolsUTF [:toarray "2013,000A,0020,0021,0022,0023,0024,0025,0026,0027,0028,0029,002A,002B,002C,002D,002E,002F,0030,0031,0032,0033,0034,0035,0036,0037,0038,0039,003A,003B,003C,003D,003E,003F,0040,0041,0042,0043,0044,0045,0046,0047,0048,0049,004A,004B,004C,004D,004E,004F,0050,0051,0052,0053,0054,0055,0056,0057,0058,0059,005A,005B,005C,005D,005E,005F,0060,0061,0062,0063,0064,0065,0066,0067,0068,0069,006A,006B,006C,006D,006E,006F,0070,0071,0072,0073,0074,0075,0076,0077,0078,0079,007A,007B,007C,007D,007E"];
:local symbolsRus [:toarray "A,B,V,G,D,E,Yo,Zh,Z,I,Y,K,L,M,N,O,P,R,S,T,U,F,Kh,C,Ch,Sh,Sch,',I,',E,Yu,Ya,a,b,v,g,d,e,yo,zh,z,i,y,k,l,m,n,o,p,r,s,t,u,f,kh,c,ch,sh,sch,',i,',e,yu,ya,_,!,_,_,_,%,&,',(,),*,+,_,-,.,/,0,1,2,3,4,5,6,7,8,9"];
:local symbolsRusUTF [:toarray "0410,0411,0412,0413,0414,0415,0401,0416,0417,0418,0419,041A,041B,041C,041D,041E,041F,0420,0421,0422,0423,0424,0425,0426,0427,0428,0429,042A,042B,042C,042D,042E,042F,0430,0431,0432,0433,0434,0435,0451,0436,0437,0438,0439,043A,043B,043C,043D,043E,043F,0440,0441,0442,0443,0444,0445,0446,0447,0448,0449,044A,044B,044C,044D,044E,044F"];
:local strtoupperTo [:toarray "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"];
:local strtoupperFrom [:toarray "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"];
:local hexstr "0123456789ABCDEF";
:local ascii " !\"#\$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
:local contentLen [ :len $content ] ;
:local lineEnd 1;
:local lineStart 0;
:local line "";
:do {
:set lineStart [:find $content "+CUSD:" ($lineEnd-1)] ;
:if ([:typeof $lineStart] = "num") do={
:set lineEnd [:find $content "+CUSD:" $lineStart] ;
:if ([:typeof $lineEnd] = "nil") do={
:set lineEnd [:find $content "\n" $lineStart] ;
:if ([:typeof $lineEnd] = "nil") do={
:set lineEnd ($contentLen+1);
}
}
:set line [:pick $content $lineStart $lineEnd];
:local i;
#:put ("Line:'" . $line . "'\n");
:if ( ( [:typeof [:find $line "+CUSD"]] != "nil" ) and ([:typeof [:find $line ",\""]] != "nil") and ([:typeof [:find $line "\","]] != "nil") and (([:find $line ",\""]) < ([:find $line "\","])) ) do={
:local sms [:pick $line ([:find $line ",\""]+2) [:find $line "\","]];
:local smsNum [:pick $line ([:find $line "\","]+2) ([:len $line]-1)];
#:put ("sms-raw $smsNum:'$sms'\n");
#strtoupper:
:for i from=0 to=([:len $sms]-1) do={
:local char "";
:if ($i < ([:len $sms]-1)) do={
:set char [:pick $sms $i ($i+1)];
} else={
:set char [:pick $sms $i];
}
:local ind [:find $strtoupperFrom $char];
:if ([:typeof $ind]="num") do={
:if ($i < ([:len $sms]-1)) do={
:set sms ( [:pick $sms 0 $i] . [:pick $strtoupperTo $ind] . [:pick $sms ($i+1) ([:len $sms])]);
} else={
:set sms ( [:pick $sms 0 $i] . [:pick $strtoupperTo $ind]);
}
}
}
:local decodedSMS "";
:for i from=0 to=([:len $sms]-1) step=4 do={
:local char [:pick $sms $i ($i+4)];
:local ind [:find $symbolsRusUTF $char];
:if ([:typeof $ind]="num") do={
:set decodedSMS ($decodedSMS.[:pick $symbolsRus $ind]);
} else={
:set ind [:find $symbolsUTF $char];
:if ([:typeof $ind]="num") do={
:set decodedSMS ($decodedSMS.[:pick $symbols $ind]);
} else={
:if ($char!="\r") do={
:set decodedSMS ($decodedSMS."[".$char."]");
}
}
}
}
:set sms $decodedSMS;
#:put ("SET ".($smsNum)." ".$sms);
:set ($smsArray->($smsNum)) $sms;
}
} else={
:set lineEnd $contentLen;
}
}
} else={
:put "USSD $ussd answer not recieved.";
};
:foreach k,v in=$smsArray do={
:put "USSD \"$ussd\" answer #$k: $v\n";
:log warning "USSD \"$ussd\" answer #$k: $v\n";
}
-
- Сообщения: 7
- Зарегистрирован: 02 июн 2019, 14:01
СПАСИБО !!!!! РАБОТАЕТ !!!!!
Еще подскажи как установить режим 3g перед выполнение скрипта
и после отключить 3g
Сам отвечу
/interface lte at-chat lte1 input="AT*BAND=??,78,147,160,524487,0,2,0"
1 = 0001 - 3G
5 = 0101 - 4G
11= 1011 - 3G+4G
15= 1111 - GSM+3G+4G
Пример - работает только 4G
/interface lte at-chat lte1 input="AT*BAND=5,78,147,160,524487,0,2,0"
Еще подскажи как установить режим 3g перед выполнение скрипта
и после отключить 3g
Сам отвечу
/interface lte at-chat lte1 input="AT*BAND=??,78,147,160,524487,0,2,0"
1 = 0001 - 3G
5 = 0101 - 4G
11= 1011 - 3G+4G
15= 1111 - GSM+3G+4G
Пример - работает только 4G
/interface lte at-chat lte1 input="AT*BAND=5,78,147,160,524487,0,2,0"
-
- Сообщения: 5
- Зарегистрирован: 28 фев 2018, 10:43
Вот еще один пример перевода модема в режим 3G перед отправкой USSD. Этот скрипт для R11-e LTE (для Huawei надо исправить на отправку PDU-кодировке ):
Код: Выделить всё
:local ussd "*111*0887#";
:local lteMode [/interface lte get [find name="lte1"] network-mode];
:if ([:typeof [:find $lteMode "3g"]] = "nil") do={
:log info "Switching to 3G-mode before send USSD...";
/interface lte set [find name="lte1"] network-mode="3g";
:log info "Waiting 60 seconds...";
:delay 60;
}
:log info "Sending USSD request $ussd";
/interface lte at-chat lte1 input="AT+CUSD=1,\"$ussd\",15";
:if ([:typeof [:find $lteMode "3g"]] = "nil") do={
:log info "Waiting 120 seconds for SMS...";
:delay 120;
}
:if ([:typeof [:find $lteMode "3g"]] = "nil") do={
:log info "Returning to 4G-mode.";
/interface lte set [find name="lte1"] network-mode=$lteMode;
}
-
- Сообщения: 1601
- Зарегистрирован: 15 сен 2017, 09:03
Простите за вопрос, у меня модем Микротик R11-e LTE.
Команда в терминал /interfacе lte at-chat lte1 input="AT+CUSD=1,\"*102#\",15"
выдаёт просто output: OK и никакого баланса
Почему так ?
Команда в терминал /interfacе lte at-chat lte1 input="AT+CUSD=1,\"*102#\",15"
выдаёт просто output: OK и никакого баланса
Почему так ?
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
-
- Сообщения: 1601
- Зарегистрирован: 15 сен 2017, 09:03
Ребята, ну подскажите, пожалуйста, какого же ... у меня не работает то ? Как будто просто команду "AT" посылаешь ...
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
-
- Сообщения: 1
- Зарегистрирован: 22 авг 2019, 10:13