Проверяем баланс модема ZTE из Linux

Как уже упоминалось, в тарифе «Билайна» «Интернет-Дома» можно проверять баланс с помощью USSD запросов.

К сожалению, пока что не удалось расшифровать ту белиберду, что приходит после штатного запроса *102#, поэтому будем пользоваться «английской» версией (#102#) — ибо на безрыбье много чего соловей, а остаток денег порой критичнее остатка мегабайт на счете.

Что нужно для работы скрипта

  • Опубликованный ранее скрипт startmodem.sh для вывода симки в сеть и подключения устройств /dev/ttyUSB0,1,2
  • Пакет minicom (sudo apt-get install minicom), настроенный на работу с /dev/ttyUSB2 со скоростью 19200.
  • Утилита  killall (можно поискать, где она командой sudo apt-cache search killall) — это важно !
  • Командный интерпретатор sh (/bin/sh)

Качаем скрипт balance.sh отсюда или копипастим.

#!/bin/sh
(
echo 'send "ATZ"'>/tmp/ussdscp
echo 'send ""' >>/tmp/ussdscp
echo 'send "AT+CUSD=1,#102#,15"'>>/tmp/ussdscp
echo 'expect {'>>/tmp/ussdscp
echo '"\"," ! killall -9 minicom'>>//tmp/ussdscp
echo ' }'>>/tmp/ussdscp
echo '! killall -9 minicom'>>/tmp/ussdscp

minicom -S /tmp/ussdscp -C /tmp/lastcheck >/dev/null 2>&1
) >/dev/null 2>&1
grep '".*"' /tmp/lastcheck |sed -e "s/\(.*\"\)\(.*\)\(\".*\)/\\2/">/tmp/lastcheck
reset
cat /tmp/lastcheck
unlink /tmp/lastcheck
unlink /tmp/ussdscp

После этого сохраняем его куда-нибудь, например в /usr/bin — куда указывает наш PATH и делаем файл исполняемым: chmod +x /usr/bin/balance.sh

Выводим модем в сеть командой startmodem.sh

Выполняем скрипт командой balance.sh

Через некоторое время консоль очистится и на нее будет выведена информация о балансе.

Недостатки скрипта — к сожалению, приходится использовать команду reset для переинициализации консоли — ибо minicom, который убивает сам себя из скрипта безнадежно портит текущую сессию.

Для желающих — отcылаю в google поискать утилиты gammu и wammu (GUI для gammu). Wammu, например может показать новые СМС. Вроде как, с помощью gammu можно и USSD запросы слать, но у меня все это работало как-то не очень стабильно.

Хинт. Для настройки wammu нужно использовать /dev/ttyUSB2, тогда модем определяется корректно.

P.S. Если скрипт завис (ошибка модема, не прибыло то, что ожидалось и т.п.) грохнуть его можно командой killall -9 minicom

1 Responses to Проверяем баланс модема ZTE из Linux

  1. dmitrysp:

    Ответ приходит в т.н. формате PDU. У меня задача состояла в обратном: отправлять русские SMS-ки через билайновский MF622. В итоге родилась маленькая программулина на TCL с использованием библиотеки libsms (она как раз и состоит из 2-х функций преобразования из/в PDU-формат). Ежели интересно — могу поделится.

Оставьте комментарий