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

Материал из Wiren Board
Строка 123: Строка 123:
|}
|}


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


Строка 137: Строка 137:
poff mts # можно заменить mts на megafon или beeline
poff mts # можно заменить mts на megafon или beeline
</syntaxhighlight>
</syntaxhighlight>
Если на контроллере установлен 3G-модем, то для увеличения пропускной способности соединения, демону ppd нужно указать другой порт: в файле /etc/ppp/peers/ваш_провайдер_сотовой_связи (в примере — МТС) замените устройство <code>/dev/ttyGSM</code> на <code>/dev/ttyACM0</code>
[[Файл:GSM-ACM.png|Файл:GSM-ACM.png]]
[[File:Etc-network-interfaces.png|300px|thumb|right|Файл ''/etc/network/interfaces'', автоматически запускающий подключение к МТС]]
[[File:Etc-network-interfaces.png|300px|thumb|right|Файл ''/etc/network/interfaces'', автоматически запускающий подключение к МТС]]
Чтобы подключение запускалось автоматически, откройте файл ''/etc/network/interfaces'' и раскомментируйте/отредактируйте следующие строки:
Чтобы подключение запускалось автоматически и перезапускалось при обрыве, откройте файл ''/etc/network/interfaces'' и раскомментируйте/отредактируйте следующие строки:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
auto ppp0
auto ppp0
iface ppp0 inet ppp
iface ppp0 inet ppp
   provider mts # можно заменить mts на megafon или beeline
   provider mts # можно заменить mts на megafon или beeline
  #рестартуем модем, если он завис
  pre-up wb-gsm restart_if_broken 
  #Затем ждем, пока он загрузится и найдет сеть.
  pre-up sleep 10
</syntaxhighlight>
</syntaxhighlight>
Но если вы хотите, чтобы подключение само восстанавливалось при обрыве, смотрите полную инструкцию ниже.
==== Инструкция настройки постоянного GPRS-подключения ==== <!--T:25-->
<!--T:26-->
* Подсоедините антенну к разъему GSM
* СИМ-карту в слот micro SIM 1
* Включите модем командой 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-порта модема:
[[Файл:GSM-ACM.png|Файл:GSM-ACM.png]]
<!--T:31-->
После создания конфигурационного файла запустите подключение, выполнив
<syntaxhighlight lang="bash">
pon название_подключения
</syntaxhighlight>
или отредактировав файл ''/etc/network/interfaces'', как описано выше.
<!--T:32-->
Чтобы подключение само перезапускалось при обрыве, и делало это неограниченное число раз, добавьте в настройки подключения (файл настроек выбранного оператора в директории /etc/ppp/peers) строки:
<syntaxhighlight lang="bash">
persist
maxfail 0
</syntaxhighlight>
если их там нет. В последних версиях контроллеров эти параметры сконфигурированы по умолчанию.
<!--T:33-->
Наиболее полные возможности по контролю за установлением подключения к интернету дает использование настройки интерфейса ppp0 в файле ''/etc/network/interfaces''.
Самой востребованной опцией является возможность выполнения команд перед установлением и после включения/отключения интерфейса ppp0.
<!--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-->
Мы же приведем здесь в качестве примера параметры, которые '''мы рекомендуем''' использовать при настройке ppp-соединения с мобильными интернет-провайдерами.
<syntaxhighlight lang="bash">


<!--T:36-->
Выполните команду <code>ifup ppp0</code> — через 10-15 секунд интерфейс ppp0 будет доступен.
auto ppp0
После перезагрузки интерфейс будет автоматически включаться и восстанавливать соединение после обрыва сотовой связи
iface ppp0 inet ppp
provider mts
#рестартуем модем, если он завис
pre-up wb-gsm restart_if_broken 
#Затем ждем, пока он загрузится и найдет сеть.
pre-up sleep 10
</syntaxhighlight>


<!--T:37-->
<!--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]).
Для 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:38-->


<!--T:39-->
<!--T:39-->
'''Важно!''' По умолчанию интерфейс ppp0 при инициализации '''не добавляет нового маршрута по умолчанию''' через ppp, в случае, если такой маршрут существует и настроен, скажем, через eth0. Если это требуется, то изменение таблицы маршрутизации можно выполнять через скрипты в директориях ip-down.d, ip-up.d. В простейшем случае, можно назначать шлюзам по умолчанию разные метрики, чтобы в случае падения одного начинал бы использоваться второй. Однако ситуация, когда интерфейс функционирует нормально, но трафик не проходит на уровне провайдера, делает такой механизм неработоспособным. Смотрите следующий раздел о том, как использовать ppp-соединение в качестве резервного.
'''Важно!''' По умолчанию интерфейс ppp0 при инициализации '''не добавляет нового маршрута по умолчанию''' через ppp, в случае, если такой маршрут существует и настроен, например, через eth0. Если это требуется, то изменение таблицы маршрутизации можно выполнять через скрипты в директориях ip-down.d, ip-up.d. Подробнее о такой настройке можно прочитать в [[Wirenboard 6: сетевые настройки контроллера на удаленном объекте#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 интерфейса все созданные маршруты, связанные с ним, будут автоматически удалены.
 
==== Использование GPRS в качестве резервного канала ==== <!--T:43-->
 
<!--T:44-->
Самый простой способ, обеспечить отказоустойчивость, это задать два маршрута по умолчанию с разными метриками, например:
для интерфейса eth0 указать метрику 10:
    auto eth0
    iface eth0 inet dhcp
    pre-up wb-set-mac
    hostname WirenBoard
    metric 10
 
<!--T:45-->
а для интерфейса — метрику 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
 
<!--T:46-->
В этом случае, если подключение через eth0 пропадет (обрыв кабеля, отключение коммутатора и т.п.), то маршрутом по умолчанию становится маршрут через интерфейс ppp0.


<!--T:47-->
<!--T:47-->
Строка 268: Строка 178:
# http://lstein.github.io/Net-ISP-Balance/
# 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
# https://serverfault.com/questions/360131/ubuntu-failover-from-ethernet-to-adsl-modem-to-usb-3g-dongle?rq=1
===RTC=== <!--T:60-->


===Мультиплексирование=== <!--T:61-->
===Мультиплексирование=== <!--T:61-->

Версия 13:28, 17 августа 2020

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

Страница находится в процессе редактирования!

В контроллеры Wiren Board могут быть установлены 2G/3G/4G/NB-IOT модемы (в зависимости от комплектации). С помощью модемов можно:

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

Общее для всех модемов

Модемы подключены к процессору по:

  • uart - все;
  • usb + uart - 3G/4G/NB-IOT.

Подробнее о подключении модемов и низкоуровневом взаимодействии с ними можно почитать в разделе о работе с модемом по uart.

Управление питанием и переключением активных sim-карт (если их две) производится с помощью gpio. Включение/отключение модема рекомендуется производить с помощью утилиты wb-gsm.

Получение информации о модеме

В контроллерах, приобретённых после 2018 года, некоторая информация о модеме заносится в память. Получить её можно с помощью чтения файлов в директории /proc/device-tree/wirenboard/gsm/

Например, чтобы узнать модель модема, нужно запустить команду

cat /proc/device-tree/wirenboard/gsm/model

Включение и начало работы

  1. Вставить sim-карту.
  2. Подключить антенну.
  3. Перезапустить модем, выполнив команды wb-gsm off; wb-gsm on

После каждой смены sim-карты необходимо перезапускать модем (см. п.3)!

Утилита wb-gsm

Для упрощения работы с модемами была написана утилита wb-gsm (исходный код доступен на нашем github). Утилита позволяет:

  • Управлять питанием модемов (команды on, off, restart_if_broken);
  • Настраивать baudrate связи по uart (команды init_baud, set_speed);
  • Забирать imei (команда imei).

Все возможные команды wb-gsm можно посмотреть здесь.

Пример использования утилиты wb-gsm для получения imei модема: DEBUG=true wb-gsm imei DEBUG=true перед командой выводит дополнительную отладочную информацию.

Утилита wb-gsm входит в состав пакета wb-utils и присутствует в стандартном образе ПО контроллера.

Низкоуровневая работа по uart

Любое взаимодействие с модемом так или иначе сводится к отправке AT-команд через последовательный порт модема. Все модемы подключаются к порту /dev/ttyGSM. 3G модемы, помимо этого, подключаются к портам /dev/ttyACMX (порты создаются usb-драйвером cdc_acm).

Подключение в linux

  • uart: Порт /dev/ttyGSM является ссылкой на /dev/ttymxcX (uart процессора) и делается с помощью правил udev. Конечный порт может быть разным для разных версий контроллера (подробнее можно посмотреть на нашем github).
  • usb: Порты /dev/ttyACMX (в случае 3G-модема) появляются автоматически после подачи питания на модем. Обычно, порты 3G-модема - это /dev/ttyACM0-6, однако точно определить, к каким портам модем подключен по USB можно, выполнив команды: wb-gsm off; wb-gsm on; dmesg | tail.

Примерный вывод команды:

[ 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

Соответственно, в данном случае 3G модем подключен к портам /dev/ttyACM0 - /dev/ttyACM6.

Отправка AT-команд

Для всех модемов рабочими настройками связи являются: 115200-8-N-1, no hardware flow control (аппаратный контроль потока должен быть обязательно выключен). Некоторые модели модемов (например, sim5300e, sim7000e) могут сами определять baudrate, установленный в данный момент. Для этого нужно послать в последовательный порт несколько символов (например, "AAAAAAAAAAT").

Подробнее про взаимодействие с последовательным портом в linux можно прочитать на соответствующей странице wiki. Для работы в интерактивном режиме рекомендуем использовать утилиту minicom:

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

Настройки Minicom

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

Работа с sms и ussd

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

Краткая инструкция по работе gammu; полную документацию смотрите на сайте проекта gammu:

Настройка

Настройка gammu вручную (gammu-config)

Все контроллеры WB6, начиная с 2018 года, поставляются с уже настроенной утилитой gammu. Если gammu не настроена, то можно выбрать один из 2-х способов настройки:

  • Обновить пакет wb-configs. Для этого, нужно выполнить команду
    apt update; apt install wb-configs
    
  • Настроить gammu вручную.
    1. Запустить команду
      gammu-config
      
    2. В параметре Port укажите /dev/ttyXXX - файл модема, соответствующий вашей модели контроллера.
    3. В параметре Connection укажите at115200

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

$ 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# неизвестно неизвестно

Интернет через ppp

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

wb-gsm restart_if_broken

Быстрая настройка автоматического выхода в интернет для МТС/Билайн/Мегафон

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

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

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

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

Если на контроллере установлен 3G-модем, то для увеличения пропускной способности соединения, демону ppd нужно указать другой порт: в файле /etc/ppp/peers/ваш_провайдер_сотовой_связи (в примере — МТС) замените устройство /dev/ttyGSM на /dev/ttyACM0 Файл:GSM-ACM.png

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

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

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

Выполните команду ifup ppp0 — через 10-15 секунд интерфейс ppp0 будет доступен. После перезагрузки интерфейс будет автоматически включаться и восстанавливать соединение после обрыва сотовой связи

Для 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).

Маршрутизация и резервирование основного канала подключения

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

Для более сложных случаев, когда физическое соединение на интерфейсе 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

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

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


GPRS на модемах 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