Sunday, April 28, 2013

Читаем SMS из модема Huawei E153u-1

Итак, есть указанный модем. Необходимо под LMDE x64 каким-то образом читать SMS.
Все возможные версии MobilePartner, найденные на просторах интернетиков, зафейлились либо на этапе установки, либо на этапе запуска.
Больше в их сторону не смотрим.
Нам понадобится gammu + wammu (последний для GUI). Но об этом чуть ниже.

Прежде всего, обнаружилась проблема. Модем не хотел определяться после того, как был вынут из USB-порта. Поиски привели к решению проблемы:

1. Проверяем атрибуты USB, на котором висит модем:
lsusb

в моём случае вывод был следующий:
Bus 004 Device 018: ID 12d1:1446 Huawei Technologies Co., Ltd.

2. Редактируем udev rules:
sudo nano /lib/udev/rules.d/40-usb_modeswitch.rules

Ищем устройство с idVendor 12d1 (из предыдущего вывода) и idProduct 1446 (опять же из предыдущего вывода). Такового нет, поэтому добавляем его ручками по аналогии с имеющимися записями для прочих хуавеев:

# Huawei E153u-1
ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1446", RUN+="usb_modeswitch '%b/%k'"
3. Достаём модем, втыкаем назад. Через некоторое время появляется запрос PIN'а. Не верим своим глазам, проверяем:
dmesg | grep tty
И действительно, устройство было опознано:
[ 3222.977099] usb 4-1.2.4: GSM modem (1-port) converter now attached to ttyUSB0
[ 3222.980352] usb 4-1.2.4: GSM modem (1-port) converter now attached to ttyUSB1
[ 3222.980438] usb 4-1.2.4: GSM modem (1-port) converter now attached to ttyUSB2

Итак, проблему решили.

Здесь важно сделать ещё один пункт, иначе возможны проблемы.
На апплете network-manager'а правой кнопкой и снимаем галку напротив Enable Mobile Broadband. Интернетики уверяют, что в противном случае возможны дедлоки и wammu не сможет ничего прочесть.

Всё готово. Теперь осталось настроить gammu + wammu для выполнения непосредственно поставленной цели.

Перво-наперво запускаем
gammu-config
и выбираем порт /dev/ttyUSB0 (первый из тех, что нам выдал dmesg).
Connection оставляем как есть - at19200.
Всё остальное, в принципе, тоже оставляем как есть, сохраняем конфиг (сохраняется в ~/.gammurc).

Можем попробовать прочитать SMS-ки в памяти телефона из консоли:
gammu getallsms
Получаем список SMS, ликуем.

Дальше открываем wammu и видим чудненький GUI.
Делаем по порядку:
- Phone -> Connect, ожидаем соединения с устройством
- Retrieve -> Messages.
Получили список SMS в гуях. Чётко, красиво, аккуратно.

Всё. Задача решена.

Из возможных проблем - wammu не всегда работает корректно. Например у меня иногда виснет в процессе сбора SMS. Тогда:
sudo killall wamu
и запускаем по новой :)

Ещё одна интересная особенность. После прописывания устройства в udev rules файлик, модем стал определяться под другим ID:
Bus 004 Device 020: ID 12d1:14ac Huawei Technologies Co., Ltd.
Т.е. Vendor ID остался прежним (12d1), а Product ID сменился (14ac вместо 1446). Но, как ни странно, теперь всё работает как часы, несмотря на то, что в udev rules устройство с Product ID 14ac не прописано.
Магия, мать её за ногу...