Соответственно одной коммерческой задаче мне придется использовать 3G-модем вместе с Raspberry. В качестве 3G-дейвайса был выбран комплект МТС Коннект 4 (дело было в г.Обнинск, выбирать особо не пришлось). Цель — поднять соединение с авто подключением и реконнектом при дропе.
Исходная точка:
1. Raspberry Pi (версия не важна).
2. Raspbian Debian Wheezy Version: January 2014 Release date: 2014-01-07.
3. Плата питается от блока питания 5V 1A. Не пытайтесь запустить RPi от USB (USB отдает всего 500 мА максимум). При питании от USB RPi будет постоянно перезагружаться из-за нехватки питания.
4. Подключение к интернету.
Начинаем.
Данил Борчевкин,
lab409.ru
ПЕРВЫМ ДЕЛОМ
Первым делом я подцепил модем к моноблоку с Windows на борту, поставил Коннект-менеджер с модема и подключился к интернету, дабы удостовериться, что соединение есть и все любые последующие проблемы будут только из-за того, что у меня кривые руки. Коннект есть, трафик считается, гугл открывается, можно работать уже на Raspberry.
ДЕЛАЕМ МОДЕМ МОДЕМОМ
Как ни странно, но после подключения модема к USB он определяется как диск. Для переключения его в режим модема необходимо установить usb-modeswitch. Заодно подтянем и все необходимое, а после совершим reboot:
sudo apt-get update sudo apt-get install usb-modeswitch minicom ppp sudo reboot
После перезагрузки проверяем, что теперь у нас из себя представляет модем и доступны ли его порты:
$ lsusb Bus 001 Device 005: ID 12d1:1506 Huawei Technologies Co., Ltd. E398 LTE/UMTS/GSM Modem/Networkcard
$ ls /dev/ttyUSB* /dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2
Вот и отлично. Можно начинать работать. под ttyUSB2 у меня клавиатура. Для начала, подключимся к модему через терминал minicom и узнаем его модель посредством AT-команды ati0. Делается это просто — набираем команду и нажимаем Enter:
$ sudo minicom -D /dev/ttyUSB0 < ati0 Manufacturer: Model: E171 Revision: 21.157.00.01.143 IMEI: ************* [естественно, что там цифры, но свой IMEI я не покажу] +GCAP: +CGSM, +DS, +ES
Для выхода из minicom следует нажать Ctrl + A затем Q и подтвердить выход. Теперь мы точно удостоверились в модели модема на случай, если придется прыгать с бубном.
Кстати, мы приблизились к первой проблеме — если мы сейчас выключим и включим Raspberry, то при вводе команды lsusb мы увидим следующее:
$ sudo shutdown -h now [передергиваем питание и ждем пока загрузится RPi] $ lsusb Bus 001 Device 005: ID 12d1:155b Huawei Technologies Co., Ltd.
Наш модем снова стал накопителем, сменился ID устройства (с 12d1:1506 на 12d1:155b, где 12d1 — ID вендора) и снова превратился в cdrom. И так будет всегда, если RPi будет включаться с уже вставленным модемом, т.е. до подачи питания. На данном этапе это лечится передергиванием модема (вынул-всунул) и в принципе, может и не критично. Конкретно в моей ситуации, такое поведение ОС меня не устраивает, поэтому буду добиваться однозначного определения модема при включении.
Для решения данной проблемы необходимо создать файл /etc/udev/rules.d/41-usb_modeswitch.rules:
$ sudo nano /etc/udev/rules.d/41-usb_modeswitch.rules
и пишем в него следующую строчку (если у вас другой модем, не забудьте вставить туда свои ID производителя и устройства):
ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="155b", RUN+="usb_modeswitch '%b/%k'"
Важно задать правило для udev именно для ID, по которому у нас определяется модем как накопитель, а не наоборот!!! Т.е. 12d1 155b — это накопитель, 12d1 1506 — это модем. В файл rules вписываем ID накопителя
Выключаем RPi:
$ sudo shutdown -h now
Для надежности и достоверности теста можно передернуть питание. Включаем RPi и сразу смотрим на вывод
lsusb
. Если определился как модем — то все отлично, если нет — то вам в список полезных ссылок=))
ПОДКЛЮЧЕНИЕ К 3G
Есть два пути — ручная настройка или использование сторонних разработок. Для простоты выберем второй вариант.
Создадим папку, скачаем в нее Sakis3G, разархивируем и дадим права на выполнение данной утилиты
$ mkdir ~/3g $ cd 3g/ $ wget http://sourceforge.net/projects/vim-n4n0/files/sakis3g.tar.gz $ tar -xzvf sakis3g.tar.gz $ sudo chmod +x sakis3g
Далее, запустим Sakis3G в интерактивном режиме для установления соединения:
$ sudo ./sakis3g --interactive
sakis3g имеет графическое меню. В принципе, оно должно быть понятно. Для установления соединения будем выбирать следующие пункты
Connect with 3G / USB device / Mobile Connect / Interface #0 /
В следуюющем окне под названием «Please select APN» просят выбрать из двух вариантов:
1. (internet.mts.ru) — это настройки, я так понимаю, зашитые в модем
2. Custom APN…
Можно не заморачиваться и выбрать первый пункт. Параметры будут указаны автоматически.
При выборе второго пункта, придется в последующем вводить параметры APN:
1. APN: internet.mts.ru
2. APN_USER: mts
3. APN_PASS: mts
и только после этого будет осуществляться попытка соединения.
Указанные мною параметры APN — для Калининградской области. Для другого региона узнайте их у своего оператора, как это и советует программа.
После подключения появится сообщение о том, что ваш модем подключен к сети. Жмем ОК и попадаем в главное меню. Можно выйти, получить информацию о соединении или отключиться от сети.
Если просмотреть все пункты в во всех меню sakis3g, то нигде нельзя будет найти опции — авто реконнект при потере соединения. К сожалению нужна еще одна утилита.
РЕКОННЕКТ ПРИ ДРОПЕ
Скачаем утилиту umtskeeper, разархивируем в каталог ~/3g:
$ mkdir ~/3g $ cd ~/3g $ wget http://zool33.uni-graz.at/petz/umtskeeper/src/umtskeeper.tar.gz $ tar -xzvf umtskeeper.tar.gz $ chmod +x umtskeeper
ВАЖНО! umts_keeper уже идет вместе с sakis3g. Поэтому можно качать только umts_keeper и не делать предыдущий шаг.
Для автоматического подключения и реконнекта при дропе необходимо запустить umtskeeper с соответствующими параметрами (в моем случае с МТС и ID модема 12d1:1506):
# ./umtskeeper --sakisoperators "USBINTERFACE='0' OTHER='USBMODEM' USBMODEM='12d1:1506' APN='CUSTOM_APN' CUSTOM_APN='internet.mts.ru' SIM_PIN='0000' APN_USER='mts' APN_PASS='mts'" --sakisswitches "--sudo --console" --devicename 'Huawei' --log --silent --nat 'no'
После этого ждем, пока не загорится диод на модеме, сообщающий, что все хорошо и интернет есть. Завершить работу umtskeeper можно нажатием Ctrl+C.
Действие данной утилиты с данными параметрами происходит безмолвно, поэтому смотрим лог:
$ tail /var/log/umtskeeper.log -f
АВТОЗАГРУЗКА
Для авто подключения при запуске RPi воспользуемся одним из вариантов, а именно — редактированием /etc/rc.local:
$ sudo nano /etc/rc.local
куда внесем запуск umtskeeper (не забудьте указать путь, специфичный вашей Raspberry). Не забываем в конце поставить & для запуска в фоне:
/home/pi/3g/umtskeeper --sakisoperators "USBINTERFACE='0' OTHER='USBMODEM' USBMODEM='12d1:1506' APN='CUSTOM_APN' CUSTOM_APN='internet.mts.ru' SIM_PIN='0000' APN_USER='mts' APN_PASS='mts'" --sakisswitches "--sudo --console" --devicename 'Huawei' --log --silent --nat 'no' &
Перезагружаемся и проверяем.
РЕЗЮМЕ И КРИТИКА
Критика, как всегда одна — высокоуровневые утилиты, настройка не через файлы конфигов, что понижает прозрачность и надежность. Я думаю, это тема для отдельной статьи.
ПОЛЕЗНЫЕ ССЫЛКИ
Маленький британский шпион – закладка на Raspberry Pi
GPRS usb modem, Huawei E171
Huawei E1550 3G modem
Run a script on start up
22 комментария на «“Raspberry Pi. Установка и настройка комплекта MTC Коннект 4 (модем Huawei E171) на Raspbian”»
Я на RPi сделал сделал камеру. Если взять у оператора прямой IP, то можно соорудить неплохую веб-камеру. Моя статья
Следующая моя статья, она уже подготовлена — посвящена именно удаленному доступу к RPi, но не через получение белго IP от провайдера, а через VPS и поднятия туннеля
Дружище, а не подскажешь ли одну вещь? Значит, имеем Малину с подключенным 3G модемом. По команде ifconfig видим IP адрес, например 20.10.111.216, и пытаемся управлять GPIO через webiopi. И ничего не получается. По локалке через WiFi все работает.
не работал c webiopi, поэтому ничего подсказать не могу
Спасибо, что ответил, уважаемый danil_borchevkin. С твоего позволения еще один вопрос… Все что касается моего первого вопроса, только без webiopi. Т.е. все попытки подключиться извне к Малине проходят неудачно. Но, повторюсь, локалка по WiFi работает без вопросов. Большое спасибо за внимание.
Правильно ли я понимаю, что вам нужно удаленно управлять RPi через 3G модем — т.е. у вас где то установлена RPi, и вы удаленно пытаетесь подключиться по IP-адресу через веб-интерфейс, SSH и т.д?
Если мои предположения верны — то это не сработает — сотовые операторы выдают т.н. «серый» IP — свой локальный, и для выхода в интернет у них общий гейт — т.о. вы пытаетесь подключиться на гейт, а не на RPi. Решение в таком случае:https://www.noip.com/remote-access ), чтобы имея динамический IP, иметь статический IP с форвардингом до динамического.
1. Купить «белый» IP — статический IP — такая услуга есть у каждого оператора.
2. Если нужно SSH — то поднимать ReverseSSH
3. Воспользоваться DNS (например,
4. Может быть есть еще варианты, но самые популярные — выше.
Огромное спасибо. Будем думать…
Взялся настраивать свой модем:
$ lsusb
Bus 001 Device 004: ID 12d1:1001 Huawei Technologies Co., Ltd. E169/E620/E800 HSDPA Modem
При настройке через Sakis3G получил ошибку:
Port /dev/ttyUSB0 is currently occupied by 2687 gammu-smsd.
Остановил gammu-smsd, успешно сделал ручную настройку для Мегафона internet / gdata / gdata
Предполагается оставить возможность периодически просматривать приходящие СМС. Одновременно ни как это работать не будет? В принципи инет на устройстве постоянно не нужен, пока планируется только время синхронизировать (RTC есть, потом потом настрою).
не знаю, не пробовал. Гугление быстрого результата тоже не дало
Для синхронизации времени можно использоватьGPS-модуль , статей на эту тематику (синхронизация времени) огромное количество
Способов много, но мой вопрос был как сохранить возможность выхода в инет через модем и работу с СМС.
Скорее всего готового решения для Raspberry нет — если нужно одновременно обрабатывать и AT-команды, и поддеривать активным интернет; по крайней мере, я не встречал. Конкретная была ситуация — поддерживать подключение + узнавать качество связи через АТ-команды — решение так и не было найдено
Теперь понятно для чего в B+ количество USB-портов увеличили 🙂
Возможно ли как-то узнать на каком именно порту (/dev/ttyUSBXXX) подключен модем?
Как выяснилось, при наличии нескольких USB устройств, например модем и GPS применик, при перезагрузке порты раздаются случайным образом.
Сейчас стоит задача автоматического (на языке Си) определения порта USB-GPS. Пытался читать порты чтобы обнаружить внутри NMEA, так при попытке чтения из одного из модемных портов получаю повисание устройства по ssh.
Для решения этого необходимо настроить правила для udev — есть статья как раз на эту темуhttp://robocraft.ru/blog/arduino/2985.html . Присвоив уникальное имя для точки монтирования, не будет необходимости в алгоритмах для определения что конкретно висит на /dev/ttyUSBXXX, а обращаться непосредственно к модему или GPS по конкретным точкам, например /dev/3gmodem и /dev/gps
Как должна выглядеть строка для переименования порта? В указанной Вами статье для Debian приведен пример:
отличающийся от Вашего по формату (для Raspbian, что не удивительно)
Я пробовал:
Но по-прежнему:
Для понимания сначала нужен вывод udevtest для вашего устройства. udevtest показывает, какие правила применяются для данного устройства, а также отладочную информацию udev
Я дал статью для примера — для того, чтобы узнать актуальную информацию на сегодняшний день и для конкретно вашей комбинации софта и оборудования, нужно воспользоваться:
Если есть проблемы с назначением имени, можно создавать на точку монтирования символические ссылки — делается это заменой в правиле NAME=«mydevice» na SYMLINK+=«mydevice»
Что касается работы с udev и написания правил, вам лучше обратиться к первоисточникам:
Спасибо, уже разобрался. Привел там нужную строчку.
Уважаемый ivanserov. Являясь давним Вашим поклонником осмелюсь задать вопрос: не могли бы Вы расписать (разжевать) строку реконнекта. ./umtskeeper —sakisoperators «USBINTERFACE=’0′ OTHER=’USBMODEM’ USBMODEM=’12d1:1506′ APN=’CUSTOM_APN’ CUSTOM_APN=’internet.mts.ru’ SIM_PIN=’0000′ APN_USER=’mts’ APN_PASS=’mts’» —sakisswitches "—sudo —console" —deicename ‘Huawei’ —log —silent —nat ‘no’
Где-то в глубине души я понимаю что это выполняется sakis3g, но, мне кажется, где-то я чего-то не прописываю. С USBMODEM=’12d1:1506 я разобрался. Большое спасибо.
В частности меня интересует как вписать туда пункт из меню «Pleace select APN» (internet.mts.ru), чтобы подключаться по-Вашему по настройкам зашитым в модем. Вручную у меня все работает.
Всем, кто обратил внимание на мои трудности, большое спасибо. Сам разобрался.
не работает авто загрузка
написал в етс