Modem-stretch: различия между версиями

Материал из Wiren Board
(не показано 127 промежуточных версий 9 участников)
Строка 1: Строка 1:
{{DISPLAYTITLE: Настройка 2G/3G/NB-IOT модемов в контроллере Wiren Board, а также 4G-модемов на Debian Stretch }}
<languages/>
== Общая информация ==
<translate>
{{note|info|Эта статья описывает настройку 2G/3G/NB-IOT модемов в контроллерах Wiren Board 5...7, а также 4G(LTE)-модема в релизе [[wb-2207]] и старее. Для настройки 4G(LTE)-модема в релизе [[wb-2304]] и новее, используйте эту [[Modem-bullseye|инструкцию]].}}
<!--T:1-->
В контроллеры Wiren Board могут быть установлены 2G/3G/4G(LTE)/NB-IOT модемы — зависит от комплектации.  
В Wiren Board установлен GSM/GPRS-модуль, с помощью которого можно:
* отправлять/принимать SMS
* подключаться к интернету по GPRS
Полный список возможностей смотрите в  описании модуля:
* 3G модем в Wiren Board 5 и Wiren Board 6: [[Special:MyLanguage/SIM5300E|SIM5300E]];
* 2G модем в Wiren Board 4, 5 и 6 : SIM800 или [[Special:MyLanguage/M660A|M660A]];
* Wiren Board Smart Home 3.5, Wiren Board 4: [[Special:MyLanguage/SIM900R|SIM900R]].


С помощью модемов можно:
* [[#Работа с sms и ussd | отправлять и принимать SMS]],
* подключаться к интернету по [[#Интернет через PPP|протоколу PPP]] для 2G- и 3G-модемов, а также настраивать 4G-модем как [[#Интернет с 4G-модемом (LTE)|сетевую карту]] с выходом в интернет.


Модемы подключаются к процессору по uart и usb, исключение — модемы 2G.
== Начало работы == <!--T:2-->
Подробнее о подключении модемов и низкоуровневом взаимодействии с ними можно почитать в разделе [[#Низкоуровневая работа по uart|Низкоуровневая работа по uart]].


Управление питанием и переключением активных sim-карт (если их две) производится с помощью gpio, процесс описан в разделе [[#Переключение активной sim-карты | Переключение активной sim-карты]].  
<!--T:3-->
Подключите антенну и вставьте SIM-карту перед запуском контроллера. Если вы включили контроллер без SIM-карты, после её установки перезапустите модем с помощью утилиты '''wb-gsm''' (смотрите ниже).


Включение и отключение модема рекомендуем делать с помощью утилиты [[#Утилита wb-gsm|wb-gsm]].
== Модем в Linux == <!--T:4-->


== Получение информации о модеме ==
<!--T:5-->
Внутри контроллера модем подключён к процессору одним из двух способов:
* по порту UART (устройство ''/dev/ttyGSM'' (ранее: ''/dev/ttyAPP0'')) - все модемы, включая 3G;
* по порту USB (устройства ''/dev/ttyACM0''-''/dev/ttyACM6'') - только 3G.
Работать с модемом на низком уровне можно, посылая команды на порт ''/dev/ttyGSM'' или ''/dev/ttyACM0'' соответственно.
Для 3G-связи порт UART не подходит в силу ограничения пропускной способности UАRT-канала, следует использовать ACM-порт /dev/ttyACM0.


В контроллерах, начиная с 2019 года, некоторая информация о модеме заносится в память. Получить её можно с помощью чтения файлов в директории <code>/proc/device-tree/wirenboard/gsm/</code>.
<!--T:6-->
Также к процессору подключены управляющие пины модема PWRKEY и RESET, с помощью которых можно выключить или перезагрузить модем. Обычно работать с ними напрямую не требуется - перезагрузка производится утилитой '''wb-gsm''' (смотрите ниже), но также реализован прямой доступ к этим контактам через GPIO (подробнее читайте [[Special:MyLanguage/GPIO|GPIO]], ищите в таблице соответствующие названия).


В контроллерах версии 6.7 модем устанавливается модулем расширения.
{{Wbincludes:Configuration WBC}}


Например, чтобы узнать модель модема, нужно выполнить команду
=== Включение модуля === <!--T:7-->
<syntaxhighlight lang="bash">
cat /proc/device-tree/wirenboard/gsm/model
</syntaxhighlight>
 
Подробнее о файлах внутри директории можно узнать из таблицы:
{| class="wikitable"
!Файл||Описание
|-
||/proc/device-tree/wirenboard/gsm/model||модель модема
|-
||/proc/device-tree/wirenboard/gsm/type||поддерживаемые сети
|-
||/proc/device-tree/wirenboard/gsm/status||статус модема в системе
|}
 
== Включение и начало работы ==
Чтобы начать работу с модемом, нужно:
#[[SIM_card_installation | Вставьте sim-карту]].
#Подключите антенну.
#Перезапустите модем, выполнив команду
#:<syntaxhighlight lang="bash">
wb-gsm restart_if_broken
</syntaxhighlight>
 
После каждой смены sim-карты необходимо перезапускать модем.
 
== Утилита wb-gsm ==
 
Для упрощения работы с модемами была написана утилита <code>wb-gsm</code>, которая входит в пакет [https://github.com/wirenboard/wb-utils wb-utils].
 
Утилита <code>wb-gsm</code> входит в состав пакета <code>wb-utils</code>, который предустановлен на все контроллеры Wiren Board.
 
С помощью <code>wb-gsm</code> вы сможете:
* управлять питанием модемов, команды <code>on, off, restart_if_broken</code>;
* настраивать baudrate связи по uart, команды <code>init_baud, set_speed</code>;
* получать imei, команда <code>imei</code>.
 
Все команды wb-gsm можно посмотреть в репозитории на Github по ссылке в начале раздела.


Пример использования утилиты <code>wb-gsm</code> для получения imei модема, флаг <code>DEBUG=true</code> — выводить отладочную информацию:
<!--T:8-->
По умолчанию, модем автоматически включается при загрузке контроллера. Потом его можно выключать и перезагружать утилитой '''wb-gsm''' (утилита включена в стандартный образ в пакет '''wb-utils''').
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
DEBUG=true wb-gsm imei
$ wb-gsm on #  включение устройства
$ wb-gsm off #  выключение устройства
$ wb-gsm reset #  перезагрузка включенного устройства
$ wb-gsm restart_if_broken #  включение или перезагрузка, если модем не отвечает
</syntaxhighlight>
</syntaxhighlight>


== Переключение активной sim-карты ==


По умолчанию активна Sim1 —  в каждый момент времени '''только одна sim-карта может быть активной'''.
=== Модемы SIM7000E 2G/NB-IoT === <!--T:9-->


Переключить модем на другую sim-карту можно с помощью gpio процессора. Узнать его номер можно двумя способами:  
<!--T:10-->
*выполнить команду <syntaxhighlight lang="bash">echo $WB_GPIO_GSM_SIMSELECT</syntaxhighlight>
Модем SIM7000E 2G/NB-IoT по умолчанию настроен на автоматический выбор GSM- и LTE-сетей. Однако в сети или с SIM-картой без поддержки NB-IoT модем не регистрируется в сети GSM (GPRS).
*найти ''SIM Slot Select gpio'' в [[Wiren_Board_6.1:Список_GPIO#Ножки для внутреннего использования|таблице gpio]] контроллера.
Для того, чтобы модем смог зарегистрироватся в сети GSM, необходимо принудительно перевести его в режим GSM only.


По умолчанию, этот gpio уже экспортирован в sysfs, поэтому, для переключения активной sim-карты с 1 на 2, нужно выполнить команду (в примере, номер gpio для переключения sim-карт - 88): <syntaxhighlight lang="bash">echo 1 > /sys/class/gpio/gpio88/value</syntaxhighlight> Соответственно, для переключения обратно на sim1, нужно записать 0.
<!--T:11-->
Подробнее о работе с gpio можно узнать из статьи [[Работа_с_GPIO#Интерфейс sysfs в Linux|Работа_с_GPIO]].
В терминальном режиме работы с модемом, например, в программе minicom (смотрите ниже раздел [[Special:MyLanguage/#низкоуровневая-работа с модулем через at-команды|#Низкоуровневая работа с модулем через AT-команды]]), необходимо ввести команду выбора режима:
<pre>
AT+CNMP=13
</pre>


Для того чтобы новая sim-карта стала активной, нужно '''выполнить следующие AT-команды''' (см. [[#Отправка AT-команд|раздел о работе с AT-командами]]):
<!--T:12-->
<syntaxhighlight lang="bash">
Возможные варианты значений (команда <code>AT+CNMP=?</code>):
AT+CFUN=0
2-Automatic,13-GSM Only,38-LTE Only,51-GSM And LTE Only
AT+CFUN=1
</syntaxhighlight>


== Низкоуровневая работа по uart ==
<!--T:13-->
Режим запоминается и активен и после отключения питания, установить режим нужно один раз.


Любое взаимодействие с модемом так или иначе сводится к отправке AT-команд через последовательный порт модема. Все модемы подключаются к порту <code>/dev/ttyGSM</code>. 3G модемы, помимо этого, подключаются к портам ''/dev/ttyACM'''X''''' (порты создаются usb-драйвером <code>cdc_acm</code>).
<!--T:14-->
 
Чтобы вернуться в режим IoT, выполните команду:
=== Подключение в linux ===
<pre>
 
AT+CNMP=51
*uart: Порт <code>/dev/ttyGSM</code> является ссылкой на ''/dev/ttymxc'''X''''' (uart процессора) и создается с помощью правил udev. Конечный порт может быть разным для разных версий контроллера (подробнее можно посмотреть на [https://github.com/wirenboard/wb-configs/tree/master/configs/usr/share/wb-configs/udev нашем github]).
</pre>
 
*usb: Порты ''/dev/ttyUSB'''X''''' или ''/dev/ttyACM'''X''''' (в случае 3G-модема) появляются автоматически после подачи питания на модем. Обычно, порты 3G-модема — это <code>/dev/ttyACM0-6</code>, однако '''точно''' определить, к каким портам модем подключен по USB можно, выполнив команды: <syntaxhighlight lang="bash">wb-gsm restart_if_broken; dmesg | tail</syntaxhighlight>.
 
Примерный вывод команды:
<syntaxhighlight lang="bash">
[ 6102.978383] usb 2-1.2: New USB device found, idVendor=1e0e, idProduct=0020
[ 6102.985653] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 6102.993108] usb 2-1.2: Product: SIMCOM_PRODUCT
[ 6102.997728] usb 2-1.2: Manufacturer: SIMCOM_VENDOR
[ 6103.002644] usb 2-1.2: SerialNumber: 004999010640000
[ 6103.082093] cdc_acm 2-1.2:1.0: ttyACM0: USB ACM device
[ 6103.098228] cdc_acm 2-1.2:1.2: ttyACM1: USB ACM device
[ 6103.116769] cdc_acm 2-1.2:1.4: ttyACM2: USB ACM device
[ 6103.132688] cdc_acm 2-1.2:1.6: ttyACM3: USB ACM device
[ 6103.145157] cdc_acm 2-1.2:1.8: ttyACM4: USB ACM device
[ 6103.163705] cdc_acm 2-1.2:1.10: ttyACM5: USB ACM device
[ 6103.182338] cdc_acm 2-1.2:1.12: ttyACM6: USB ACM device
</syntaxhighlight>
Соответственно, в данном случае 3G модем подключен к портам <code>/dev/ttyACM0 - /dev/ttyACM6</code>.
 
=== Отправка AT-команд ===
[[Image: Minicom-AT-4G.png |500px|thumb|right| Отправка AT-комманд для модема в терминале программы [[minicom]]]]


{{Wbincludes:GSM Modem Default Connection Parameters}}


Для работы в интерактивном режиме рекомендуем использовать утилиту [[minicom]]:
===Отправка и получение SMS и USSD=== <!--T:15-->
{{Wbincludes:GSM Modem AT Prepare}}
Модем готов к передаче AT-команд.


Чтобы закрыть minicom, нажмите на клавиатуре клавиши <kbd>Ctrl</kbd>+<kbd>A</kbd>, затем клавишу <kbd>X</kbd> и подтвердите выход клавишей <kbd>Enter</kbd>.
<!--T:16-->
[[File:Gammu-config.png|300px|thumb|right|''gammu-config'']]
Работать с SMS проще всего при помощи программы [http://wammu.eu/gammu/ ''Gammu''] (это форк утилиты '''gnokii''', которую перестали развивать).


== Работа с sms и ussd ==
<!--T:17-->
 
(ниже дана краткая инструкция, полную документацию смотрите на [http://wammu.eu/gammu/ сайте проекта])
Работать с sms и ussd проще всего при помощи программы [http://wammu.eu/gammu/ ''Gammu''] (это форк утилиты <code>gnokii</code>, которую перестали развивать).
 
Полную документацию смотрите на сайте проекта, ниже дана краткая инструкция.
 
=== Настройка ===
 
Все контроллеры WB6, начиная с 2018 года, поставляются с уже настроенной утилитой gammu. Если gammu не настроена, то можно выбрать один из 2-х способов настройки:
*Обновить пакет <code>wb-configs</code>. Для этого, нужно выполнить команды <syntaxhighlight lang="bash">apt update && apt install wb-configs</syntaxhighlight>
 
[[File:Gammu-config.png|300px|thumb|right|Настройка gammu вручную (''gammu-config'')]]
*Настроить gammu вручную:
#Выполнить команду <syntaxhighlight lang="bash">gammu-config</syntaxhighlight>
#В параметре <code>Port</code> укажите <code>/dev/ttyXXX</code> — файл модема, соответствующий вашей модели контроллера.  
#В параметре <code>Connection</code> укажите <code>at115200</code>
 
=== Примеры команд gammu ===
Перед использованием утилиты убедитесь, что соединение с интернетом по протоколу ppp завершено (см. раздел [[#Интернет через PPP | Интернет через PPP]])


<!--T:18-->
#Создайте файл конфигурации, запустив ''gammu-config''
##В параметре ''Port'' укажите ''/dev/ttyXXX'' - файл модема, соответствующий вашей модели контроллера.
##В параметре ''Connection'' укажите ''at115200''
#Примеры команд:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
$ gammu networkinfo # посмотреть сеть и базовую станцию, к которой вы подключены
$ gammu networkinfo # посмотреть сеть и базовую станцию, к которой вы подключены
Строка 149: Строка 88:
</syntaxhighlight>
</syntaxhighlight>


=== SMS и USSD на русском ===
====SMS и USSD на русском==== <!--T:19-->


SMS и USSD на русском в ''gammu'' пока работают не всегда хорошо, поэтому могут пригодиться команды для переключения языка USSD и перекодирования входящих и исходящих SMS в транслит:
<!--T:20-->
SMS и USSD на русском пока работают в ''gammu'' не всегда хорошо, поэтому могут пригодиться команды для переключения языка USSD и перекодирования входящих и исходящих SMS в транслит:
{| class="wikitable"
{| class="wikitable"
!rowspan="2"|Оператор||colspan="2"|USSD||colspan="2"|SMS
!rowspan="2"|Оператор||colspan="2"|USSD||colspan="2"|SMS
Строка 166: Строка 106:
|}
|}


Для надежной отправки SMS на русском надо проверить локаль и установить LC_ALL=ru_RU.utf8
===Выход в интернет=== <!--T:21-->


=== SMS-уведомления ===
<!--T:22-->
Перед выходом в интернет необходимо, чтобы модем был включен. Для этого вручную или в файле настройке сетевых интерфейсов (см. далее) выполните команду <pre>wb-gsm restart_if_broken</pre>


Отправка sms-уведомлений об изменении состояния какого-либо устройства реализована в ПО Wiren Board с помощью сервиса уведомлений. Также можно отправлять SMS из движка правил wb-rules, вызывая соответствующую функцию. Подробнее в статье «[[Notification_module#Настройка модуля уведомлений| Модуль уведомлений]]».


== Интернет через PPP ==
==== Быстрая настройка автоматического выхода в интернет ==== <!--T:23-->
{{YouTube
| link= https://youtu.be/ZbJUwoifbzE
| text= Настройка интернета через PPP с помощью 2G-модема
}}
=== Быстрый выход в интернет ===
Настройки быстрого подключения сбрасываются после перезагрузки контроллера. Если вам нужен постоянный доступ к интернету — настройте автоматический запуск подключения.


В стандартное ПО контроллера входят настройки подключения для операторов МТС, Мегафон и Билайн по протоколу ppp. Если вы пользуетесь одним из них, то для быстрого подключения к интернету нужно перезапустить модем и подключится с использованием одной из настроек:
<!--T:24-->
#Перезапустите модем:
В стандартное ПО Wiren Board входят настройки подключения для операторов МТС, Мегафон и Билайн по протоколу ppp. Если вы пользуетесь одним из них, для запуска подключения выполните команду
#:<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
wb-gsm restart_if_broken
pon mts # можно заменить mts на megafon или beeline
</syntaxhighlight>
</syntaxhighlight>
#Установите соединение, например, для оператора МТС:
Чтобы отключить подключение, выполните
#:<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
pon mts
poff mts # можно заменить mts на megafon или beeline
</syntaxhighlight>
</syntaxhighlight>
#:<code>mts</code> можно заменить на <code>megafon</code> или <code>beeline</code> — зависит от вашего оператора связи.
[[File:Etc-network-interfaces.png|300px|thumb|right|Файл ''/etc/network/interfaces'', автоматически запускающий подключение к МТС]]
# Если соединение больше не нужно — вы можете его завершить командой:
Чтобы подключение запускалось автоматически, откройте файл ''/etc/network/interfaces'' и раскомментируйте/отредактируйте следующие строки:
#:<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
poff mts
auto ppp0
iface ppp0 inet ppp
  provider mts # можно заменить mts на megafon или beeline
</syntaxhighlight>
</syntaxhighlight>
Но если вы хотите, чтобы подключение само восстанавливалось при обрыве, смотрите полную инструкцию ниже.


Если на контроллере установлен модуль 3G- или 4G-модем, то для увеличения пропускной способности соединения, демону pppd нужно указать другой порт. Для этого в файле <code>/etc/ppp/peers/<ваш_провайдер_связи></code> замените устройство <code>/dev/ttyGSM</code> на (в зависимости от модема) <code>/dev/ttyUSB0</code> или <code>/dev/ttyACM0</code>.
==== Пошаговая инструкция настройки постоянного GPRS-подключения ==== <!--T:25-->


Например, изменим порт для провайдера МТС:
<!--T:26-->
# Откройте файл <code>/etc/ppp/peers/mts</code>
* Подсоедините антенну к разъему GSM
#:<syntaxhighlight lang="bash">
* СИМ-карту в слот micro SIM 1
nano /etc/ppp/peers/mts
* Включите модем командой wb-gsm restart_if_broken
* Если ваш контроллер укомплектован 3G-модемом, в файле /etc/ppp/peers/ваш_провайдер_сотовой_связи (в примере — МТС) замените устройство <code>/dev/ttyGSM</code> на <code>/dev/ttyACM0</code>
* В файле <code>/etc/networks/interfaces</code> закомментируйте раздел, связанный с <code>ppp0</code> и добавьте следующие строки:
<pre>
auto ppp0
iface ppp0 inet ppp
provider mts
#рестартуем модем, если он завис
pre-up wb-gsm restart_if_broken 
#Затем ждем, пока он загрузится и найдет сеть.
pre-up sleep 10
</pre>
* Выполните команду <code>ifup ppp0</code> — через 15 секунд интерфейс ppp0 будет доступен.
*После перезагрузки интерфейс будет автоматически включаться и восстанавливать соединение после обрыва сотовой связи.
 
 
==== Полная инструкция ==== <!--T:27-->
 
<!--T:28-->
Выход в интернет через GPRS происходит по протоколу PPP с использованием сервиса [https://linux.die.net/man/8/pppd pppd].
Для его работы нужно создать конфигурационный файл, соответствующий настройкам вашего оператора. Конфигурационные файлы для операторов "большой тройки" уже есть в [https://github.com/contactless/wirenboard/tree/master/configs/configs/etc/ppp стандартном образе]. Файлы хранятся в директориях /etc/ppp/peers и /etc/chatscripts. Для других операторов или специальных APN создайте свои конфигурационные файлы на основе стандартных. Для этого при помощи утилиты '''pppconfig''' (устанавливается командой '''apt-get install pppconfig''') создайте конфигурационный файл подключения с параметрами для вашего оператора (например, [http://www.corp.mts.ru/help/corp_settings/gprs_edge/win_xp/ МТС]). Также можете ориентироваться на [https://help.ubuntu.com/community/DialupModemHowto/SetUpDialer#Alternative_Way_2_.28using_pppconfig_.26_pon.2Fpoff.29 инструкцию]. Обратите внимание на настройки ''115200 nocrtsct'', которые должны присутствовать в конфигурационных файлах.
 
<!--T:29-->
Если подключение к интернету осуществляется в сети 3G, то в конфигурационном файле для вашего оператора следует заменить UART-порт (/dev/ttyGSM (или /dev/ttyAPP0 в старых моделях контроллеров)) на CDC-ACM-порт (/dev/ttyACM0). Это необходимо, чтобы скорость обмена данными не ограничивалась пропускной способностью UART-порта модема:
 
<!--T:30-->
[[Файл:GSM-ACM.png|Файл:GSM-ACM.png]]
 
<!--T:31-->
После создания конфигурационного файла запустите подключение, выполнив
<syntaxhighlight lang="bash">
pon название_подключения
</syntaxhighlight>
</syntaxhighlight>
# Закомментируйте старый порт и добавьте новый:
или отредактировав файл ''/etc/network/interfaces'', как описано выше.
#:<syntaxhighlight lang="bash">
 
#/dev/ttyGSM
<!--T:32-->
/dev/ttyUSB0
Чтобы подключение само перезапускалось при обрыве, и делало это неограниченное число раз, добавьте в настройки подключения (файл настроек выбранного оператора в директории /etc/ppp/peers) строки:
<syntaxhighlight lang="bash">
persist
maxfail 0
</syntaxhighlight>
</syntaxhighlight>
#:порт можно использовать /dev/ttyUSB[0..2] в зависимости от количества и настроек сервисов работающих с модемом.
если их там нет. В последних версиях контроллеров эти параметры сконфигурированы по умолчанию.
# {{Wbincludes:Save nano}}
 
<!--T:33-->
Наиболее полные возможности по контролю за установлением подключения к интернету дает использование настройки интерфейса ppp0 в файле ''/etc/network/interfaces''.
Самой востребованной опцией является возможность выполнения команд перед установлением и после включения/отключения интерфейса ppp0.


Порты <code>/dev/ttyUSB0</code>,<code>/dev/ttyUSB1</code>,<code>/dev/ttyUSB2</code> появляются автоматически после включения модема командой <code>wb-gsm on</code>.
<!--T:34-->
В файле /etc/network/interfaces для настройки ppp можно использовать стандартные iface-опции pre-up, up, post-up, down, pre-down, post-down. Они задают команды, которые будут выполняться на различных фазах инициализации/деинициализации интерфейса. Подробно особенности их функционирования описаны в [http://manpages.ubuntu.com/manpages/trusty/man5/interfaces.5.html man interfaces] в разделе IFACE OPTIONS.


=== Автоматический запуск подключения ===
<!--T:35-->
[[Image:Etc-network-interfaces.png|300px|thumb|right|Файл ''/etc/network/interfaces'', автоматически запускающий подключение к МТС]]
Мы же приведем здесь в качестве примера параметры, которые '''мы рекомендуем''' использовать при настройке ppp-соединения с мобильными интернет-провайдерами.
<syntaxhighlight lang="bash">


Чтобы подключение запускалось автоматически:
<!--T:36-->
#Откройте файл <code>/etc/network/interfaces</code> для редактирования:
#:<syntaxhighlight lang="bash">
nano /etc/network/interfaces
</syntaxhighlight>
#Раскомментируйте или отредактируйте следующие строки:
#:<syntaxhighlight lang="bash">
auto ppp0
auto ppp0
iface ppp0 inet ppp
iface ppp0 inet ppp
  provider mts # можно заменить mts на megafon или beeline
provider mts
  #перезапускаем модем, если он завис
#рестартуем модем, если он завис
  pre-up wb-gsm restart_if_broken   
pre-up wb-gsm restart_if_broken   
  #Ждем, пока он загрузится и найдет сеть.
#Затем ждем, пока он загрузится и найдет сеть.
  pre-up sleep 10
pre-up sleep 10
</syntaxhighlight>
</syntaxhighlight>
# Сохраните изменения и закройте файл.
# Теперь запустите интерфейс <code>ppp0</code> командой:
#:<syntaxhighlight lang="bash">
ifup ppp0
</syntaxhighlight>
#:через 10­-15 секунд интерфейс <code>ppp0</code> будет доступен.
# Настройка завершена, теперь при перезагрузке контроллера подключение к интернету восстановится автоматически.


Параметры протокола пакетной передачи данных и номера для соединения для каждого провайдера хранятся в директории <code>/etc/chatscripts</code>. В большинстве случаев ничего менять в этих файлах не придется.


Для ppp-интерфейсов существуют директории, исполняемые файлы из которых также запускаются на разных фазах установления соединения. Но, если, например, для ethernet-интерфейсов эти скрипты должны находиться в директориях <code>/etc/network/if-down.d</code>, <code>if-post-down.d</code>, <code>if-pre-up.d</code>, <code>if-up.d</code>, то соответствующие директории для ppp-интерфейсов находятся в <code>/etc/ppp/ip-down.d</code>, <code>ip-up.d</code> и т.п. Подробнее об их назначении и функционировании можно узнать в документе [http://citforum.ru/operating_systems/linux/HOWTO/PPP-HOWTO.shtml PPP HOWTO].
<!--T:37-->
Для ppp-интерфейсов существуют директории, исполняемые файлы из которых также запускаются на разных фазах установления соединения. Но, если для, например, ethernet-интерфейсов эти скрипты должны находиться в директориях /etc/network/if-down.d, if-post-down.d, if-pre-up.d, if-up.d, то соответствующие директории для ppp-интерфейсов находятся в /etc/ppp/ip-down.d, ip-up.d и т.п (подробнее об их назначении и функционировании можно узнать в документе [http://citforum.ru/operating_systems/linux/HOWTO/PPP-HOWTO.shtml PPP HOWTO]).
 
 
====Настройки DNS и маршрутизации==== <!--T:38-->
 
<!--T:39-->
'''Важно!''' По умолчанию интерфейс ppp0 при инициализации '''не добавляет нового маршрута по умолчанию''' через ppp, в случае, если такой маршрут существует и настроен, скажем, через eth0. Если это требуется, то изменение таблицы маршрутизации можно выполнять через скрипты в директориях ip-down.d, ip-up.d. В простейшем случае, можно назначать шлюзам по умолчанию разные метрики, чтобы в случае падения одного начинал бы использоваться второй. Однако ситуация, когда интерфейс функционирует нормально, но трафик не проходит на уровне провайдера, делает такой механизм неработоспособным. Смотрите следующий раздел о том, как использовать ppp-соединение в качестве резервного.
 
<!--T:40-->
Адреса DNS-серверов заменяются на те, которые были получены от провайдера мобильной связи. При использовании DHCP на ethernet-интерфейсах и интерфейсе ppp0 файл /etc/resolv.conf меняется при установлении соединения через каждый из этих  интерфейсов в соответствии с адресами DNS-серверов, полученными от провайдера.
 
<!--T:41-->
В качестве дополнительной меры повышения надежности при наличии двух соединений можно предложить использование DNS-серверов, не зависящих от провайдера, например GoogleDNS (8.8.8.8, 8.8.4.4) и OpenDNS (208.67.222.222, 208.67.220.220). Очень часто эти сервера используются для определения работоспособности сетевого канала по определенному интерфейсу (ping -c5 -I eth0 8.8.8.8 или ping -c5 -I ppp0 8.8.4.4).
 
<!--T:42-->
Обратите внимание, что при деинициализации ppp0 интерфейса все созданные маршруты, связанные с ним, будут автоматически удалены.


=== Резервирование канала связи ===


Особенности резервирования выхода в интернет описаны в статье [[Wirenboard6:InstallingOnTheRemoteSite#PPP — основной и резервный выход в интернет|Сетевые настройки контроллера]].
==== Использование GPRS в качестве резервного канала ==== <!--T:43-->


== Интернет с 4G-модемом (LTE) ==
<!--T:44-->
{{YouTube
Самый простой способ, обеспечить отказоустойчивость, это задать два маршрута по умолчанию с разными метриками, например:
| link= https://youtu.be/vWNwxB7Lino
для интерфейса eth0 указать метрику 10:
| text= Настройка модема [[WBC-4G]] на контроллере Wiren Board 6.7.2
    auto eth0
}}
    iface eth0 inet dhcp
    pre-up wb-set-mac
    hostname WirenBoard
    metric 10


[[Image: Minicom-AT-4G.png |500px|thumb|right| Отправка AT-комманд для модема в терминале программы [[minicom]]]]
<!--T:45-->
[[Image: Minicom-AT-4G-Exit.png |500px|thumb|right| Выход из программы [[minicom]]]]
а для интерфейса — метрику 100:
=== Настройка модема как сетевой карты ===
    auto ppp0
В отличие от 2G- и 3G-модулей, [[WBC-4G]] поддерживает выход в интернет через виртуальную сетевую карту по протоколу RNDIS.
    iface ppp0 inet ppp
    ## select provider: megafon, mts or beeline below
    provider mts
    metric 100
    pre-up wb-gsm restart_if_broken
    pre-up sleep 10


'''Настройка с помощью minicom''':
<!--T:46-->
# Убедитесь, что модем правильно сконфигурирован. Подробнее смотрите на странице модуля [[WBC-4G#Конфигурирование | WBC-4G]].
В этом случае, если подключение через eth0 пропадет (обрыв кабеля, отключение коммутатора и т.п.), то маршрутом по умолчанию становится маршрут через интерфейс ppp0.
{{Wbincludes:GSM Modem AT Prepare}}
# Отправьте из терминала minicom AT-команды для модема:
#* Настроить автоматическое подключение: <code>AT+DIALMODE=0</code>.
#* Установить APN: <code>AT+CGDCONT=1,"IP","xxx"</code>, где xxx — точка подключения (APN). Имя точки подключения зависит от оператора, например, у МТС она выглядит так: <code>internet.mts.ru</code>.
#* Проверить получение IP адреса: <code>AT+CGCONTRDP</code>.
# Закройте minicom, для этого нажмите на клавиатуре клавиши <kbd>Ctrl</kbd>+<kbd>A</kbd>, затем клавишу <kbd>X</kbd> и подтвердите выход клавишей <kbd>Enter</kbd>.


После этого интернет будет доступен через интерфейс <code>usb0</code>, который можно настроить как обычную сетевую карту.
<!--T:47-->
Для более сложных случаев, когда физическое соединение на интерфейсе eth0 не пропадает, рекомендуется применять скрипты, которые на основе доступности какого-либо сетевого уздла в интернете через один из интерфейсов переключают маршрут по умолчанию. В интернете предлагается множество решений решений такого рода задачи, можно выбрать одно из них.  


'''Настройка с помощью chat''':
<!--T:48-->
# Убедитесь, что модем правильно сконфигурирован. Подробнее смотрите на странице модуля [[WBC-4G#Конфигурирование | WBC-4G]].
Если контроллер обычно подключён к Интернету через Ethernet или Wi-Fi, а GPRS должен использоваться только при неполадках основного канала, такой режим работы называется ''failover''. Обычно он работает так:
# Подключитесь к контроллеру по [[SSH]].
# Организуется работа через основной канал.
# Перезапустите модем командой:
# Постоянно проверяется наличие доступа в Интернет через основной канал.
#: <syntaxhighlight lang="bash">
# В случае неполадок запускается запасное соединение, меняются настройки ''default gateway''.
wb-gsm restart_if_broken
# Основное соединение постоянно проверяется, и если доступ в Интернет через него восстанавливается, система возвращается к работе через него, изменяя ''default gateway''.
</syntaxhighlight>
# Замените в строке ниже APN_INTERNET на точку подключения вашего провайдера, вставьте изменённую строку консоль контроллера и нажмите на клавиатуре <kbd>Enter</kbd>:
#: <syntaxhighlight lang="bash">
PORT=/dev/ttyGSM; /usr/sbin/chat -s TIMEOUT 20 ABORT "ERROR" ECHO ON "" "AAAAAAAAAAAAAT" OK "AT+CMGF=1" OK "AT+DIALMODE=0" OK "AT+CGDCONT=1,\"IP\",\"APN_INTERNET\"" OK  "AT+CGCONTRDP" "OK"  > $PORT < $PORT
</syntaxhighlight>


Этот способ можно использовать при написании скриптов.
<!--T:49-->
В качестве примера укажем две инструкции по организации такого режима работы:
# http://lstein.github.io/Net-ISP-Balance/
# https://serverfault.com/questions/360131/ubuntu-failover-from-ethernet-to-adsl-modem-to-usb-3g-dongle?rq=1


=== Настройка виртуальной сетевой карты ===
==== Включение ====
После того как мы настроили модем, нужно настроить виртуальную сетевую карту:
# Откройте файл <code>/etc/network/interfaces</code>:
#:<syntaxhighlight lang="bash">
nano /etc/network/interfaces
</syntaxhighlight>
# Добавьте в него строки:
#:<syntaxhighlight lang="bash">
auto usb0
allow-hotplug usb0
iface usb0 inet dhcp
  pre-up sleep 8
  pre-up wb-gsm restart_if_broken 
  pre-up sleep 10
</syntaxhighlight>
#: автоматически запустить модем, интерфейс и получать IP-адрес. Задержки ''pre-up sleep'' перед и после включения модема нужны для надёжного старта.
# Сохраните и закройте файл <code>interfaces</code>. {{Wbincludes:Save nano}}
# Запустите интерфейс командой:
#:<syntaxhighlight lang="bash">
ifup usb0
</syntaxhighlight>


Настройка завершена, теперь модем по DHCP назначит контроллеру IP-адрес в подсети <code>192.168.0.1</code>, а после перезагрузки контроллера соединение с интернетом восстановится автоматически.
</translate>
<span id="низкоуровневая-работа с модулем через at-команды"></span>
<translate>
=== Низкоуровневая работа с модулем через AT-команды === <!--T:50-->


При необходимости можно сменить подсеть модема, чтобы он выдавал контроллеру адрес не из подсети <code>192.168.0.ххх</code>, а, например, <code>192.168.100.ххх</code>. Для этого нужно выполнить AT-команду:
<!--T:51-->
<syntaxhighlight lang="bash">
Ознакомьтесь с инструкцией - [[Special:MyLanguage/Работа с последовательным портом из Linux|Работа с последовательным портом из Linux]].
AT+USBNETIP=0,100,111
Обратите внимание на настройки: 115200, 8N2, '''no hardware flow control'''.
</syntaxhighlight>
Команда имеет следующий синтаксис:
<syntaxhighlight lang="bash">
AT+USBNETIP=<mode>,<tpos>,<dhcps>,<dhcpe>
</syntaxhighlight>


{| border="1" class="wikitable" style="text-align:left"
<!--T:52-->
|-
Для интерактивного режима:
|<mode> ||
* запускаем '''minicom''' с ключём, создающим профиль работы с портом (скорость передачи данных, чётность, и т.д.):
0 – частный IP-адрес (по умолчанию, 192.168.0.xxx и т. д.) </br>
<pre>
1 – Публичный IP (ip из сети). Вступает в силу после перезагрузки модема.
$ minicom -s /dev/ttyGSM
|-
</pre>
|<tpos> || Третья позиция IP-адреса
[[Special:MyLanguage/Файл:Minicom_settings.png|Настройки Minicom]]
|-
|<dhcps> || Начальное значение DHCP
|-
|<dhcpe> || Конечное значение DHCP
|}


'''Предупреждение!''' Данная функция может не работать на модемах со старыми прошивками. Узнать, что модем поддерживает эту функцию можно командой
<!--T:53-->
<syntaxhighlight lang="bash">
* Зайти в настройки (нажать ''Ctrl+A'', затем ''O''), выбрать пункт ''Serial port setup'', там установить порт ''/dev/ttyGSM'', скорость и чётность - ''115200, 8N1'', ''Hardware flow control - No'', ''Software flow control - No''
AT+USBNETIP?
* Сохранить настройки: ''Save setup as _dev_ttyGSM''
</syntaxhighlight>
* Далее запускать как '''minicom /dev/ttyGSM''' (все параметры будут сразу браться из профиля с названием ''/dev/ttyGSM'', который мы ранее создали)
Функция поддерживается, если получен ответ
* Первой вашей командой должна стать ''AAAAAAAAAT'' - с её помощью модуль распознает скорость, с которой мы к нему обращаемся (смотрите [[Special:MyLanguage/SIM900R|SIM900R]])
<syntaxhighlight lang="bash">
* Второй командой выполните просто ''AT''. Вам должен прийти ответ '''OK'''
+USBNETIP: mode


OK
</syntaxhighlight>


==== Отключение ====
==== Примеры команд ==== <!--T:54-->
# Остановите интерфейс командой:
#:<syntaxhighlight lang="bash">
ifdown usb0
</syntaxhighlight>
# Откройте файл <code>/etc/network/interfaces</code>:
#:<syntaxhighlight lang="bash">
nano /etc/network/interfaces
</syntaxhighlight>
# Закомментируйте или удалите строки:
#:<syntaxhighlight lang="bash">
#auto usb0
#allow-hotplug usb0
#iface usb0 inet dhcp
#  pre-up sleep 8
#  pre-up wb-gsm restart_if_broken 
#  pre-up sleep 10
</syntaxhighlight>
# Сохраните и закройте файл <code>interfaces</code>. {{Wbincludes:Save nano}}


==Мультиплексирование==
<!--T:55-->
(некоторые команды могут различаться в разных модулях, смотрите подробнее в документации на модуль)


Модем поддерживает режим мультиплексирования — создания виртуальных портов, через которые можно одновременно работать с модемом.
<!--T:56-->
Например, через один порт можно открыть сессию PPP для GPRS, а через другой — получать и отправлять SMS, проверять баланс и т.д.
* Синхронизовать скорость порта (не совсем команда)
Подробнее смотрите [[Special:MyLanguage/CMUX|CMUX]]. Этот режим не поддерживается для 2G-модемов.
<pre>
AAAAAAAAAAAAAT
</pre>
*  Список всех сетей
<pre>
AT+COPS=?
</pre>
*  Уровень сигнала (см. [http://m2msupport.net/m2msupport/atcsq-signal-quality/ здесь])
<pre>
AT+CSQ
</pre>
* Звонок на номер +79154816102
<pre>
ATD+79154816102;
</pre>
* Установка baud rate порта в фиксированное значение 115200
<pre>
AT+IPR=115200
</pre>


==Документация на модемы==
<!--T:57-->
* Запрос времени со встроенных в модуль часов реального времени (RTC)
<pre>
AT+CCLK?
AT+CCLK="14/03/19,01:20:29+00"
</pre>


{| class="wikitable"
<!--T:58-->
!Модель||Режимы сети||краткое описание||hardware design||AT-команды
* Получить IMEI-код модуля (xxxxxx - уникальный номер)
|-
<pre>
|SIM800||2G||[http://www.mt-system.ru/sites/default/files/documents/sim800_spec_20140423.pdf pdf]||[http://www.mt-system.ru/sites/default/files/documents/sim800_hardware_design_v1.10.pdf pdf]||[http://www.mt-system.ru/sites/default/files/documents/sim800_series_at_command_manual_v1.12.pdf pdf]
AT+GSN
|-
86820400xxxxxxY
|SIM5300E||2G/3G||[http://www.mt-system.ru/sites/default/files/documents/sim5300e_spec_v1611_rus_0.pdf pdf]||[http://www.mt-system.ru/sites/default/files/documents/sim5300e_hardware_design_v1.09.pdf pdf]||[http://www.mt-system.ru/sites/default/files/documents/sim5300e_at_command_manual_v1.01.pdf pdf]
|-
|SIM7000E||2G/NB-IOT||[http://www.mt-system.ru/sites/default/files/documents/sim7000e_spec_v1706_rus.pdf pdf]||[http://www.mt-system.ru/sites/default/files/documents/sim7000_hardware_design_v1.07.pdf pdf]||[http://www.mt-system.ru/sites/default/files/documents/sim7000_series_at_command_manual_v1.06.pdf pdf]
|-
|7600E||2G/3G/4G
|colspan="3"| [[WBC-4G#Документация|WBC-4G]]
|}


== GPRS на модемах SIM7000E 2G/NB-IoT ==
<!--T:59-->
OK
</pre>


Модем SIM7000E 2G/NB-IoT по умолчанию настроен на автоматический выбор GSM- и LTE-сетей. Однако, в сети или с SIM-картой без поддержки NB-IoT модем не регистрируется в сети GSM (GPRS).
Для того, чтобы модем смог зарегистрироваться в сети GSM, необходимо принудительно перевести его в режим GSM only.


В терминальном режиме работы с модемом, например, в программе minicom (смотрите раздел [[GSM/GPRS#Отправка AT-команд|Отправка AT-команд]]), введите команду выбора режима:
===RTC=== <!--T:60-->
<syntaxhighlight lang="bash">
AT+CNMP=13
</syntaxhighlight>


Возможные варианты значений (команда <code>AT+CNMP=?</code>):
*<code>2</code> — Automatic,
*<code>13</code> — GSM Only,
*<code>38</code> — LTE Only,
*<code>51</code> — GSM And LTE Only.


Установить режим нужно один раз — он запоминается и активен даже после отключения питания.
===Мультиплексирование=== <!--T:61-->


Чтобы вернуться в режим IoT, выполните команду: 
<!--T:62-->
<syntaxhighlight lang="bash">
Модем поддерживает режим мультиплексирования - создание виртуальных портов, через которые можно одновременно работать с модемом.
AT+CNMP=51
Например, через один порт можно открыть сессию PPP для GPRS, а через другой получать и отправлять SMS, проверять баланс и т.д.
</syntaxhighlight>
Подробнее смотрите [[Special:MyLanguage/CMUX|CMUX]]. Этот режим не поддерживается для 2G-модемов.
</translate>

Версия 19:55, 26 марта 2020

Другие языки:

В Wiren Board установлен GSM/GPRS-модуль, с помощью которого можно:

  • отправлять/принимать SMS
  • подключаться к интернету по GPRS

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

  • 3G модем в Wiren Board 5 и Wiren Board 6: SIM5300E;
  • 2G модем в Wiren Board 4, 5 и 6 : SIM800 или M660A;
  • Wiren Board Smart Home 3.5, Wiren Board 4: SIM900R.


Начало работы

Подключите антенну и вставьте SIM-карту перед запуском контроллера. Если вы включили контроллер без SIM-карты, после её установки перезапустите модем с помощью утилиты wb-gsm (смотрите ниже).

Модем в Linux

Внутри контроллера модем подключён к процессору одним из двух способов:

  • по порту UART (устройство /dev/ttyGSM (ранее: /dev/ttyAPP0)) - все модемы, включая 3G;
  • по порту USB (устройства /dev/ttyACM0-/dev/ttyACM6) - только 3G.

Работать с модемом на низком уровне можно, посылая команды на порт /dev/ttyGSM или /dev/ttyACM0 соответственно. Для 3G-связи порт UART не подходит в силу ограничения пропускной способности UАRT-канала, следует использовать ACM-порт /dev/ttyACM0.

Также к процессору подключены управляющие пины модема PWRKEY и RESET, с помощью которых можно выключить или перезагрузить модем. Обычно работать с ними напрямую не требуется - перезагрузка производится утилитой wb-gsm (смотрите ниже), но также реализован прямой доступ к этим контактам через GPIO (подробнее читайте GPIO, ищите в таблице соответствующие названия).


Включение модуля

По умолчанию, модем автоматически включается при загрузке контроллера. Потом его можно выключать и перезагружать утилитой wb-gsm (утилита включена в стандартный образ в пакет wb-utils).

$ wb-gsm on #  включение устройства
$ wb-gsm off #  выключение устройства
$ wb-gsm reset #  перезагрузка включенного устройства
$ wb-gsm restart_if_broken #  включение или перезагрузка, если модем не отвечает


Модемы SIM7000E 2G/NB-IoT

Модем SIM7000E 2G/NB-IoT по умолчанию настроен на автоматический выбор GSM- и LTE-сетей. Однако в сети или с SIM-картой без поддержки NB-IoT модем не регистрируется в сети GSM (GPRS). Для того, чтобы модем смог зарегистрироватся в сети GSM, необходимо принудительно перевести его в режим GSM only.

В терминальном режиме работы с модемом, например, в программе minicom (смотрите ниже раздел #Низкоуровневая работа с модулем через AT-команды), необходимо ввести команду выбора режима:

AT+CNMP=13

Возможные варианты значений (команда AT+CNMP=?): 2-Automatic,13-GSM Only,38-LTE Only,51-GSM And LTE Only

Режим запоминается и активен и после отключения питания, установить режим нужно один раз.

Чтобы вернуться в режим IoT, выполните команду:

AT+CNMP=51 


Отправка и получение SMS и USSD

gammu-config

Работать с SMS проще всего при помощи программы Gammu (это форк утилиты gnokii, которую перестали развивать).

(ниже дана краткая инструкция, полную документацию смотрите на сайте проекта)

  1. Создайте файл конфигурации, запустив gammu-config
    1. В параметре Port укажите /dev/ttyXXX - файл модема, соответствующий вашей модели контроллера.
    2. В параметре Connection укажите at115200
  2. Примеры команд:
$ gammu networkinfo # посмотреть сеть и базовую станцию, к которой вы подключены
$ gammu geteachsms # вывести все SMS
$ gammu getussd '#100#' # запросить баланс на МТС в транслите
$ gammu sendsms TEXT +79154816102 -unicode -text 'Привет' # отправить на номер сообщение с текстом

SMS и USSD на русском

SMS и USSD на русском пока работают в gammu не всегда хорошо, поэтому могут пригодиться команды для переключения языка USSD и перекодирования входящих и исходящих SMS в транслит:

Оператор USSD SMS
транслит русский транслит русский
МТС *100*6*2# *100*6*1# неизвестно неизвестно
Мегафон *105*0# *105*9# неизвестно неизвестно
Билайн *111*6*2# *111*6*1# неизвестно неизвестно
Теле2 *120# *120*1# неизвестно неизвестно

Выход в интернет

Перед выходом в интернет необходимо, чтобы модем был включен. Для этого вручную или в файле настройке сетевых интерфейсов (см. далее) выполните команду

wb-gsm restart_if_broken


Быстрая настройка автоматического выхода в интернет

В стандартное ПО Wiren Board входят настройки подключения для операторов МТС, Мегафон и Билайн по протоколу ppp. Если вы пользуетесь одним из них, для запуска подключения выполните команду

pon mts # можно заменить mts на megafon или beeline

Чтобы отключить подключение, выполните

poff mts # можно заменить mts на megafon или beeline
Файл /etc/network/interfaces, автоматически запускающий подключение к МТС

Чтобы подключение запускалось автоматически, откройте файл /etc/network/interfaces и раскомментируйте/отредактируйте следующие строки:

auto ppp0
iface ppp0 inet ppp
  provider mts # можно заменить mts на megafon или beeline

Но если вы хотите, чтобы подключение само восстанавливалось при обрыве, смотрите полную инструкцию ниже.


Пошаговая инструкция настройки постоянного GPRS-подключения

  • Подсоедините антенну к разъему GSM
  • СИМ-карту в слот micro SIM 1
  • Включите модем командой wb-gsm restart_if_broken
  • Если ваш контроллер укомплектован 3G-модемом, в файле /etc/ppp/peers/ваш_провайдер_сотовой_связи (в примере — МТС) замените устройство /dev/ttyGSM на /dev/ttyACM0
  • В файле /etc/networks/interfaces закомментируйте раздел, связанный с ppp0 и добавьте следующие строки:
auto ppp0
iface ppp0 inet ppp
provider mts
#рестартуем модем, если он завис
pre-up wb-gsm restart_if_broken  
#Затем ждем, пока он загрузится и найдет сеть.
pre-up sleep 10
  • Выполните команду ifup ppp0 — через 15 секунд интерфейс ppp0 будет доступен.
  • После перезагрузки интерфейс будет автоматически включаться и восстанавливать соединение после обрыва сотовой связи.


Полная инструкция

Выход в интернет через GPRS происходит по протоколу PPP с использованием сервиса pppd. Для его работы нужно создать конфигурационный файл, соответствующий настройкам вашего оператора. Конфигурационные файлы для операторов "большой тройки" уже есть в стандартном образе. Файлы хранятся в директориях /etc/ppp/peers и /etc/chatscripts. Для других операторов или специальных APN создайте свои конфигурационные файлы на основе стандартных. Для этого при помощи утилиты pppconfig (устанавливается командой apt-get install pppconfig) создайте конфигурационный файл подключения с параметрами для вашего оператора (например, МТС). Также можете ориентироваться на инструкцию. Обратите внимание на настройки 115200 nocrtsct, которые должны присутствовать в конфигурационных файлах.

Если подключение к интернету осуществляется в сети 3G, то в конфигурационном файле для вашего оператора следует заменить UART-порт (/dev/ttyGSM (или /dev/ttyAPP0 в старых моделях контроллеров)) на CDC-ACM-порт (/dev/ttyACM0). Это необходимо, чтобы скорость обмена данными не ограничивалась пропускной способностью UART-порта модема:

Файл:GSM-ACM.png


После создания конфигурационного файла запустите подключение, выполнив

pon название_подключения

или отредактировав файл /etc/network/interfaces, как описано выше.

Чтобы подключение само перезапускалось при обрыве, и делало это неограниченное число раз, добавьте в настройки подключения (файл настроек выбранного оператора в директории /etc/ppp/peers) строки:

persist
maxfail 0

если их там нет. В последних версиях контроллеров эти параметры сконфигурированы по умолчанию.

Наиболее полные возможности по контролю за установлением подключения к интернету дает использование настройки интерфейса ppp0 в файле /etc/network/interfaces. Самой востребованной опцией является возможность выполнения команд перед установлением и после включения/отключения интерфейса ppp0.

В файле /etc/network/interfaces для настройки ppp можно использовать стандартные iface-опции pre-up, up, post-up, down, pre-down, post-down. Они задают команды, которые будут выполняться на различных фазах инициализации/деинициализации интерфейса. Подробно особенности их функционирования описаны в man interfaces в разделе IFACE OPTIONS.

Мы же приведем здесь в качестве примера параметры, которые мы рекомендуем использовать при настройке ppp-соединения с мобильными интернет-провайдерами.

auto ppp0
iface ppp0 inet ppp
provider mts
#рестартуем модем, если он завис
pre-up wb-gsm restart_if_broken  
#Затем ждем, пока он загрузится и найдет сеть.
pre-up sleep 10


Для ppp-интерфейсов существуют директории, исполняемые файлы из которых также запускаются на разных фазах установления соединения. Но, если для, например, ethernet-интерфейсов эти скрипты должны находиться в директориях /etc/network/if-down.d, if-post-down.d, if-pre-up.d, if-up.d, то соответствующие директории для ppp-интерфейсов находятся в /etc/ppp/ip-down.d, ip-up.d и т.п (подробнее об их назначении и функционировании можно узнать в документе PPP HOWTO).


Настройки DNS и маршрутизации

Важно! По умолчанию интерфейс ppp0 при инициализации не добавляет нового маршрута по умолчанию через ppp, в случае, если такой маршрут существует и настроен, скажем, через eth0. Если это требуется, то изменение таблицы маршрутизации можно выполнять через скрипты в директориях ip-down.d, ip-up.d. В простейшем случае, можно назначать шлюзам по умолчанию разные метрики, чтобы в случае падения одного начинал бы использоваться второй. Однако ситуация, когда интерфейс функционирует нормально, но трафик не проходит на уровне провайдера, делает такой механизм неработоспособным. Смотрите следующий раздел о том, как использовать ppp-соединение в качестве резервного.

Адреса DNS-серверов заменяются на те, которые были получены от провайдера мобильной связи. При использовании DHCP на ethernet-интерфейсах и интерфейсе ppp0 файл /etc/resolv.conf меняется при установлении соединения через каждый из этих интерфейсов в соответствии с адресами DNS-серверов, полученными от провайдера.

В качестве дополнительной меры повышения надежности при наличии двух соединений можно предложить использование DNS-серверов, не зависящих от провайдера, например GoogleDNS (8.8.8.8, 8.8.4.4) и OpenDNS (208.67.222.222, 208.67.220.220). Очень часто эти сервера используются для определения работоспособности сетевого канала по определенному интерфейсу (ping -c5 -I eth0 8.8.8.8 или ping -c5 -I ppp0 8.8.4.4).

Обратите внимание, что при деинициализации ppp0 интерфейса все созданные маршруты, связанные с ним, будут автоматически удалены.


Использование GPRS в качестве резервного канала

Самый простой способ, обеспечить отказоустойчивость, это задать два маршрута по умолчанию с разными метриками, например: для интерфейса eth0 указать метрику 10:

   auto eth0
   iface eth0 inet dhcp
   pre-up wb-set-mac
   hostname WirenBoard
   metric 10 

а для интерфейса — метрику 100:

   auto ppp0
   iface ppp0 inet ppp
   ## select provider: megafon, mts or beeline below
   provider mts
   metric 100
   pre-up wb-gsm restart_if_broken
   pre-up sleep 10

В этом случае, если подключение через eth0 пропадет (обрыв кабеля, отключение коммутатора и т.п.), то маршрутом по умолчанию становится маршрут через интерфейс ppp0.

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

Если контроллер обычно подключён к Интернету через Ethernet или Wi-Fi, а GPRS должен использоваться только при неполадках основного канала, такой режим работы называется failover. Обычно он работает так:

  1. Организуется работа через основной канал.
  2. Постоянно проверяется наличие доступа в Интернет через основной канал.
  3. В случае неполадок запускается запасное соединение, меняются настройки default gateway.
  4. Основное соединение постоянно проверяется, и если доступ в Интернет через него восстанавливается, система возвращается к работе через него, изменяя default gateway.

В качестве примера укажем две инструкции по организации такого режима работы:

  1. http://lstein.github.io/Net-ISP-Balance/
  2. https://serverfault.com/questions/360131/ubuntu-failover-from-ethernet-to-adsl-modem-to-usb-3g-dongle?rq=1


Низкоуровневая работа с модулем через AT-команды

Ознакомьтесь с инструкцией - Работа с последовательным портом из Linux. Обратите внимание на настройки: 115200, 8N2, no hardware flow control.

Для интерактивного режима:

  • запускаем minicom с ключём, создающим профиль работы с портом (скорость передачи данных, чётность, и т.д.):
 $ minicom -s /dev/ttyGSM

Настройки Minicom

  • Зайти в настройки (нажать Ctrl+A, затем O), выбрать пункт Serial port setup, там установить порт /dev/ttyGSM, скорость и чётность - 115200, 8N1, Hardware flow control - No, Software flow control - No
  • Сохранить настройки: Save setup as _dev_ttyGSM
  • Далее запускать как minicom /dev/ttyGSM (все параметры будут сразу браться из профиля с названием /dev/ttyGSM, который мы ранее создали)
  • Первой вашей командой должна стать AAAAAAAAAT - с её помощью модуль распознает скорость, с которой мы к нему обращаемся (смотрите SIM900R)
  • Второй командой выполните просто AT. Вам должен прийти ответ OK


Примеры команд

(некоторые команды могут различаться в разных модулях, смотрите подробнее в документации на модуль)

  • Синхронизовать скорость порта (не совсем команда)
AAAAAAAAAAAAAT
  • Список всех сетей
AT+COPS=?
AT+CSQ
  • Звонок на номер +79154816102
ATD+79154816102;
  • Установка baud rate порта в фиксированное значение 115200
AT+IPR=115200
  • Запрос времени со встроенных в модуль часов реального времени (RTC)
AT+CCLK?
AT+CCLK="14/03/19,01:20:29+00"
  • Получить IMEI-код модуля (xxxxxx - уникальный номер)
AT+GSN
86820400xxxxxxY

OK


RTC

Мультиплексирование

Модем поддерживает режим мультиплексирования - создание виртуальных портов, через которые можно одновременно работать с модемом. Например, через один порт можно открыть сессию PPP для GPRS, а через другой получать и отправлять SMS, проверять баланс и т.д. Подробнее смотрите CMUX. Этот режим не поддерживается для 2G-модемов.