?

Log in

No account? Create an account

Mon, Nov. 9th, 2009, 08:50 am
Как узнать баланс 3G life:)

Собственно, вопрос я задавал в ru_linux. И получил вот тут правильный ответ:
<?php

function decodePDU($in) {
  $b = 0; $d = 0;
  $out = "";
  foreach (str_split($in, 2) as $ss) {
    $byte = hexdec($ss);
    $c = (($byte & ((1 << 7-$d)-1)) << $d) | $b;
    $b = $byte >> (7-$d);
    $out .= chr($c);
    $d++;
    if ($d == 7) {
      $out .= chr($b);
      $d = 0; $b = 0;
    }
  }
  return $out;
}

function encodePDU($in) {
  $out = "";
  for ($i = 0; $i < strlen($in); $i++) {
    $t = $i%8+1;
    if ($t == 8) 
      continue;
    $c = ord($in[$i])>>($i%8);
    $oc = $c;
    $b = ord($in[$i+1]) & ((1 << $t)-1);
    $c = ($b << (8-$t)) | $c;
    $out .= strtoupper(str_pad(dechex($c), 2, '0', STR_PAD_LEFT));
  }
  return $out;
}

$f = fopen ("/dev/ttyUSB2", "rw+");
fputs($f, "AT+CUSD=1,".encodePDU("*100#").",15\r\n");

while ($s = fgets($f)) {
  if (substr($s, 0, 5) == "+CUSD") {
    $s = decodePDU(substr(trim($s), 10, -3));
    echo $s."\n";
    if (strpos($s, "1 - Dalee") !== false) {
      fputs($f, "AT+CUSD=1,".encodePDU("1").",15\r\n");
    }
    else
      break;
  }
 }

fclose($f);

?>
И это работает, хотя и пришлось php доставить. Надо научиться ещё привязывать выполнение этого скрипта к включению USB модема и что бы он баланс во всплываюшем окошке показыал.

Mon, Nov. 9th, 2009 10:18 am (UTC)
dizel_by

Кстати, оно и на ZTE работает. Проверено на MF100 (вернее для него я изначально и писал, но потом забросил до того самого поста)

Mon, Nov. 9th, 2009 10:23 am (UTC)
linux007: Re: Reply to your entry...

:-) Я человек корыстный, поэтому меня в данном случае интересует конкретно моя моделька :-)

Спасибочки.

Mon, Nov. 9th, 2009 06:09 pm (UTC)
ugenk

дожились - что бы засунуть две ат-шных команды в модем, беляшов ставит php на сервер :)

Mon, Nov. 9th, 2009 07:59 pm (UTC)
linux007: Re: Reply to your entry...

Научи!!!!

P.S. И не на сервер, а на ноутбук.

Mon, Nov. 9th, 2009 08:15 pm (UTC)
ugenk: Re: Reply to your entry...

expect + cu :)
или, еще проще - обычный chat-скрипт..

Mon, Nov. 9th, 2009 08:20 pm (UTC)
ugenk: Re: Reply to your entry...

вот тебе на затравку пример скрипта на expect:
#!/usr/bin/expect -f
set timeout 60
set ip "[lindex $argv 0]"
set passwd "[lindex $argv 1]"

spawn /usr/bin/telnet $ip
expect ":"
send "root\n"
expect "assword:"
send "$passwd\n"
expect ">"
send "en\n"
expect "#"
send "config\n"
expect "#"
send "snmp-agent target-host trap address 1.2.3.4 securityname xxxx\n"
expect "#"
send "quit\n"
expect "#"
send "save\n"
expect ":"
send "\n"
expect "complet"
expect "#"
send "quit\n"
expect ":"
send "y\n"

Mon, Nov. 9th, 2009 10:30 pm (UTC)
linux007: Re: Reply to your entry...

Так-с... Хорошее начало. А вот эта вся ерунда с перекодированием в кодировки ?