SVPerchenko
SVPerchenko
714 просмотров0 комментариев

Подключение USB 3G модема к Repka Pi и настройка доступа в Интернет в Repka OS

Эта статья посвящена вопросу подключения 3G модема к одноплатнику и настройки доступа в Интернет. Задачи, которые побудили меня этим заняться следующие. Необходимо создать автономное необслуживаемое клиентское устройство, которое будет в течение длительного времени опрашивать некий сторонний сервер и архивировать с него данные. Также это решение можно использовать для создания удаленного датчика с фотокамерой на борту (возможно, с батарейным питанием).

Тут уже рассматривались варианты подключения и настройки OEM GSM модулей. Но вот несколько моментов, которые заставляют посмотреть в сторону использование USB модемов:

  1. Стандартное решение, работоспособное “из коробки”. Вставил модем в разъем и все работает (если получится :)
  2. Настройка доступа в Интернет средствами ОС. Т. е. с точки зрения программ, коммуникация ничем не будет отличаться от Ethernet/Wi-Fi подключения
  3. В сетях, которые поддерживают высокоскоростную передачу модем может полностью “раскрыться” и обеспечить значительно большую пропускную способность по сравнению с GPRS модулями
  4. На данный момент “неликвид” под брэндами сотовых операторов доступен по очень привлекательной цене (на озоне в пределах 550 - 700р)

Следует также упомянуть про существенный недостаток такого решения, если оно используется для автономных необслуживаемых устройств. USB модемы при длительной непрерывной работе склонны к зависаниям, при которых помогает только аппаратная перезагрузка с отключением питания. Так что в вышеописанном случае полезно иметь программно-управляемый ключ на линии питания модема (кстати, GSM модулей это тоже касается).

Выбор модема

На Озоне я приобрел модем ZTE MF626, брэндированый под МТС. Продавец уверяет что модем "разлочен" и может работать с симкой любого оператора

Пришел мне вот такой аппарат, с полноценной инструкцией по эксплуатации

Первичная настройка модема и проверка работоспособности

В качестве мобильного оператора я выбрал Билайн (заодно проверим возможность работы модема с "чужими" SIM-картами). Дальше я буду описывать "правильную" последовательность действий, приводящую к успеху, без описания всех подводных камней, с которыми мне пришлось столкнуться.

Итак, при покупке SIM-карты с меня взяли 400р, из которых 300 легло на счет. Сразу после покупки не нужно сразу вставлять симку в модем. Нужно вставить ее в телефон, дождаться активации, выбрать подходящий тариф с Интернетом (через мобильное приложение билайна) и проверить доступность Интернета на телефоне после настройки.

Поскольку моей первой задачей является создание беспроводного датчика, то объемы трафика будут требоваться минимальные. Для этого оптимально выбирать тариф с покупкой определенного количества трафика с неограниченным временем по его использованию. У билайна есть для этого подходящий тариф "Простой" в котором можно выбирать сколько нужно минут/гигабайт/СМС. Пакет 5 гигабайт с неограниченным временем использования стоит сейчас 260р. Для датчика, который будет год работать на таком объеме, - очень хорошая цена.

Далее можно проверить работоспособность модема с настроенной SIM-картой. Для этого нужно воспользоваться программой подключения оператора или Web интерфейсом модема (для более новых моделей). Программа подключения Билайна выглядит следующим образом:

Ссылка на программу и драйвера модема MF626: жмак.

Для интересующихся - ссылки на АТ команды модемов ZTE: doc1, doc2.

Настройка профиля модема

Практически все модемы являются композитными USB устройствами, поэтому для корректной работы в режиме именно модема их нужно настраивать соответствующим образом. Процесс настройки будет описан для ОС Ubuntu "в общем", без привязки к Repka OS и в расчете на то, что не все пакеты могут быть установлены и настроены "из коробки".

Первым делом необходимо подключить модем к репке и сразу же командой lsusb "поймать" момент, когда ОС обнаружит новое устройство. Выглядеть это должно так (идентификатор устройства 19d2:2000): Если через 2-3 секунды модем переподключится и определится как 19d2:0016 или 19d2:0031, никаких дальнейших действий по конфигурированию делать не нужно и можно переходить к следующему разделу. Если же модем остался подключен как определился изначально, значит в системе не установлен или не настроен пакет usb-modeswitch

Тогда первым делом проверяем, что этот пакет установлен командой usb_modeswitch. Если команда не найдена, устанавливаем пакет:

# aptitude install usb-modeswitch

После установки вытаскиваем модем, перезагружаем репку, снова вставляем модем и проверяем переключится ли он в режим 19d2:0016 или 19d2:0031. Если переключился, идем в следующий раздел. Если же после установки переключения не произошло, или usb-modeswitch был изначально установлен но не переключал модем, нам нужно будет самостоятельно прописать правила переключения нашего для usb-modeswitch.

Распаковываем правила для всех устройств:

~# mkdir /tmp/modeswitch
~# cd /tmp/modeswitch
/tmp/modeswitch# tar -xzwf /usr/share/usb_modeswitch/configPack.tar.gz

В выводе распаковщика находим файл с именем равным идентификатору, под которым определился модем и смотрим его содержимое: Тут убеждаемся, что целевые PIDы присутствуют в списке TargetProductList и нас будет интересовать строка сообщения.

Редактируем конфигурацию usb-modeswitch:

# nano /etc/usb_modeswitch.conf

Добавляем в конец файла секцию для переключения нашего модема:

Теперь нам нужно прописать правило для udev, чтобы запускался usb_modeswitch каждый раз, когда ОС находит устройство с идентификатором 19d2:2000. Создаем файл правила:

# touch /etc/udev/rules.d/41-zte-mf626.rules

и добавляем с него следующее правило (записывать одной строкой, без переноса):

ACTION=="add", SUBSYSTEM=="usb" ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="2000", RUN+="/usr/sbin/usb_modeswitch -c /etc/usb_modeswitch.conf"

Перезагружать репку не нужно, достаточно вытащить и вставить модем. Теперь он должен определяться следующим образом:

Теперь можно переходить, собственно, к настройке дозвона провайдеру

Настройка дозвона провайдеру

Устанавливаем необходимые пакеты:

# aptitude install wvdial ppp -y

Теперь нам необходимо определить программные интерфейсы, под которыми ОС регистрирует наш модем (их может быть несколько). У меня получилось так: Видим, что для модема появилось 3 интерфейса вида ttyUSB. При настройке дозвона через wvdial необходимо попробовать использовать все 3 варианта. Опытным путем установлено, что коммуницировать с модемом AT командами можно через 2 из них. Но соединение устанавливается только через определенный интерфейс. При использовании неверного интерфейса модем просто "зависает". Теперь, собственно, создаем скрипт дозвона для wvdial:

# touch /etc/wvdial.conf
# nano /etc/wvdial.conf

и заполняем его следующим содержимым:

[Dialer MF626]
Modem = /dev/ttyUSB2
Modem Type = USB Modem
Init1 = AT+ZUSIM=?
Init2 = AT+CLCK="SC",2
Init3 = AT+ZOPRT?
Init4 = AT+ZOPRT=5
Init5 = AT+ZSTART
Init6 = AT+CGDCONT=1,"IP","internet.beeline.ru",,0,0
Init7 = AT V1 E1 +FCLASS=0
Init8 = AT &F &D2 &C1 S0=0
Init9 = ATS7=60S30=0
Phone = *99#
Username = beeline
Password = beeline
New PPPD = yes
Stupid Mode = 1
Baud = 460800
ISDN = 0
Auto DNS = on
Check Def Route = on

Теперь можем устанавливать соединение и проверять активные сетевые интерфейсы:

# wvdial MF626
# ifconfig

Как видим, соединение установилось, получен локальный IP и IP шлюза, адреса DNS сервера, а также поднят сетевой интерфейс ppp0 Теперь мы можем попробовать пропинговать какой-то удаленный сервер и.... облом. А все потому что поднятый ppp интерфейс не используется в маршруте по у молчанию:

Настройка ppp соединения

Для того, чтобы сетевой трафик маршрутизировался через поднятое ppp соединение, нужно прописать для него соответствующие правила. Открываем в редакторе файл /etc/ppp/peers/wvdial и записываем в него следующее содержимое (часть правил там уже может присутствовать):

noauth
name wvdial
usepeerdns
defaultroute
replacedefaultroute

После этого локальная таблица маршрутизации должна выглядеть так, и соединением можно пользоваться:

Автоматическое установление соединения при обнаружении модема

Ну и на последок, хотелось бы избавиться от необходимости "ручного" дозвона. Нужно поднимать соединение сразу после обнаружения модема системой. Сделать это можно, опять же, с помощью udev. Для этого создаем правило:

# touch /etc/udev/rules.d/41-zte-mf626-call.rules

содержимое (каждое правило в 1 строку):

ACTION=="add", SUBSYSTEM=="usb" ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="0016", RUN+="/usr/local/bin/mf626-call.sh", GOTO="call_end"

ACTION=="add", SUBSYSTEM=="usb" ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="0031", RUN+="/usr/local/bin/mf626-call.sh", GOTO="call_end"

LABEL="call_end"

Теперь создаем 2 скрипта:

# touch /usr/local/bin/mf626-call.sh
# chmod +x /usr/local/bin/mf626-call.sh

# touch /usr/local/bin/mf626-call2.sh
# chmod +x /usr/local/bin/mf626-call2.sh

Содержимое mf626-call.sh:

#!/bin/bash
/usr/bin/echo /usr/local/bin/mf626-call2.sh | /usr/bin/at now

Содержимое mf626-call2.sh:

#!/bin/bash
/usr/bin/sleep 30
/usr/bin/wvdial mf626 >>/var/log/mf626.log 2>&1

Не забываем установить пакет at и активировать его сервис:

# aptitude install at
# systemctl enable --now atd

Перезагружаем и на этом все. Теперь при обнаружении модема соединение будет подниматься автоматически.

Другие модемы

Для продолжения тестирования приобрел еще пару модемов других моделей: ZTE MF667 (брэндированный под Билайн) и TCT Mobile 410D (под МТС).

Модем MF667 имеет Web-интерфейс и определяется при подключении как CD-ROM. Для того, чтобы перевести его в режим модема и открыть COM порты, необходимо открыть на нем страницу с адресом

http://192.168.0.1/goform/goform_process?goformId=MODE_SWITCH&switchCmd=FACTORY

После этого модем переключится в режим 19d2:0016 и с ним можно будет работать также как и с MF626.

Модем 140D Изначально стартует в режиме 1bbb:f000 его нужно переключить в режим 1bbb:00b7. После этого в системе регистрируются 5 последовательных интерфейсов: ttyUSB0 - ttyUSB4 Нужно подобрать среди них тот, через который устанавливается соединение. В конфигурации для wvdial для этого модема специфические для ZTE AT команды можно опустить:

[Dialer 410D]
Modem = /dev/ttyUSB3
Modem Type = USB Modem
Init1 = AT+CLCK="SC",2
Init2 = AT+CGDCONT=1,"IP","internet.beeline.ru",,0,0
Init3 = AT V1 E1 +FCLASS=0
Init4 = AT &F &D2 &C1 S0=0
Init5 = ATS7=60S30=0
Phone = *99#
Username = beeline
Password = beeline
New PPPD = yes
Stupid Mode = 1
Baud = 460800
ISDN = 0
Auto DNS = on
Check Def Route = on

Комментарии (0)

Для участия в обсуждении вы должны быть авторизованным пользователем

Навигация

ВойтиРегистрацияТемы