Проверка баланса Huawei E1550 МТС.

Проблемы с установкой, настройкой и работой системных и сетевых программ.

Модераторы: GRooVE, alexco

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Проверка баланса Huawei E1550 МТС.

Непрочитанное сообщение BlitzKrieg » 2010-11-26 22:59:01

Есть модем. Как получить баланс?
Это читал https://wiki.archlinux.org/index.php/Hu ... 0_3G_modem
Пробовал.
Пробовал это http://beliashou.com/blog/archives/5829
Отвечает просто ОК.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

rmn
старшина
Сообщения: 427
Зарегистрирован: 2008-10-03 18:52:02

Re: Проверка баланса Huawei E1550 МТС.

Непрочитанное сообщение rmn » 2010-11-27 15:24:15

Код: Выделить всё

gw2# cat pdu.inc 
<?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;
}

?>

Код: Выделить всё

gw2# cat config.inc 
<?php

$gsmDevice['Name'] = 'e1550';
$gsmDevice['Port'] = '/dev/cuaU0.2';

$lastError = '';

?>

Код: Выделить всё

gw2# cat ussd.inc 
<?php

require_once ('config.inc');
require_once ('pdu.inc');

function sendUSSD($Number)
{
    global $gsmDevice;
    global $lastError;

    $ussdResult = '';

    if ($gsmDevice['Port'] == '')
    {
        $lastError = "gsmDevice['Port'] не установлен.";
        return false;
    }

    $f = fopen($gsmDevice['Port'], "rw+");
    if (!$f)
    {
        $lastError = "Ошибка открытия файла '" . $gsmDevice['Port'] . "'";
        return false;
    }

    $query = "AT+CUSD=1,\"" . encodePDU($Number) . "\",15";
    
    fwrite($f, $query . "\n\n");
    $i = 0;
    while ($i<50)
    {
        $line = trim(fgets($f));
        if ($line != '')
        {
            if ($line == "ERROR")
            {
                $lastError = "AT+CUSD failed.";
                fclose($f);
                return false;
            }

            if (!strncmp($line, "+CUSD", 5))
            {
                $values = explode('"', $line);
                if ($values[1] != '')
                    $ussdResult = decodePDU($values[1]);

                break;
            }
            $i++;
        }
    }

    $lastError = '';
    fclose($f);
    return $ussdResult;
}

?>

Код: Выделить всё

gw2# cat send_ussd 
#!/usr/local/bin/php
<?php

require_once ('ussd.inc');

if ($argc != 2)
{
    echo "Interactive mode. Type 'exit' to quit.\n";
    while(true)
    {
        $line = trim(fgets(STDIN));
        if (strtolower($line) == 'exit')
            break;

        $ussdResult = sendUSSD($line);
        if ($ussdResult === false)
            echo $lastError . "\n";
        else
            echo $ussdResult . "\n";
    }
}
else
{
    $ussdResult = sendUSSD(trim($argv[1]));
    if ($ussdResult === false)
        echo $lastError . "\n";
    else
        echo $ussdResult . "\n";
}

?>

Код: Выделить всё

gw2# ./send_ussd \*101#
Na rakhunku 1.66 grn, dijsnyj do 02.10.2011. Taryf - MTC Pervyy. Podarunky PlayStation 3 ta XBOX360 tut *121#

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Проверка баланса Huawei E1550 МТС.

Непрочитанное сообщение BlitzKrieg » 2010-11-27 15:50:16

Не не, вы не поняли.
У меня на аткоманду AT+CUSD=1,encodePDU(*100#),15 выдается просто ОК.
То, что вы предложили я видел, да и не вкусно еще php ставить для этого :-)

rmn
старшина
Сообщения: 427
Зарегистрирован: 2008-10-03 18:52:02

Re: Проверка баланса Huawei E1550 МТС.

Непрочитанное сообщение rmn » 2010-11-27 16:10:22

работать надо с /dev/cuaU0.2, а не /dev/cuaU0.0

BlitzKrieg
ст. прапорщик
Сообщения: 538
Зарегистрирован: 2008-03-13 12:02:59

Re: Проверка баланса Huawei E1550 МТС.

Непрочитанное сообщение BlitzKrieg » 2010-11-27 16:12:01

Дада, спасибо. Только что это попробовал.