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

Материал из Wiren Board
Строка 2: Строка 2:
<translate>
<translate>
<!--T:1-->
<!--T:1-->
Страница находится в процессе редактирования!
В контроллеры Wiren Board могут быть установлены 2G/3G/4G/NB-IOT модемы (в зависимости от комплектации). С помощью модемов можно:
В контроллеры Wiren Board могут быть установлены 2G/3G/4G/NB-IOT модемы (в зависимости от комплектации). С помощью модемов можно:
* отправлять/принимать SMS
* отправлять/принимать SMS
* подключаться к интернету по GPRS
* подключаться к интернету по GPRS


= Общее для всех модемов = <!--T:2-->
= Общее для всех модемов =<!--T:2-->
 
<!--T:3-->
Модемы подключены к процессору по:
Модемы подключены к процессору по:
*uart - все;
*uart - все;
Строка 14: Строка 14:
Подробнее о подключении модемов и низкоуровневом взаимодействии с ними можно почитать в разделе [[#Низкоуровневая работа по uart|о работе с модемом по uart]].
Подробнее о подключении модемов и низкоуровневом взаимодействии с ними можно почитать в разделе [[#Низкоуровневая работа по uart|о работе с модемом по uart]].


<!--T:4-->
Управление питанием и переключением активных sim-карт (если их две) производится с помощью gpio. Включение/отключение модема рекомендуется производить с помощью утилиты [[#Утилита wb-gsm|wb-gsm]].
Управление питанием и переключением активных sim-карт (если их две) производится с помощью gpio. Включение/отключение модема рекомендуется производить с помощью утилиты [[#Утилита wb-gsm|wb-gsm]].


== Получение информации о модеме == <!--T:2-->
== Получение информации о модеме == <!--T:5-->
 
<!--T:6-->
В контроллерах, начиная с 2019 года, некоторая информация о модеме заносится в память. Получить её можно с помощью чтения файлов в директории ''/proc/device-tree/wirenboard/gsm/''
В контроллерах, начиная с 2019 года, некоторая информация о модеме заносится в память. Получить её можно с помощью чтения файлов в директории ''/proc/device-tree/wirenboard/gsm/''


<!--T:7-->
Например, чтобы узнать модель модема, нужно запустить команду <syntaxhighlight lang="bash">cat /proc/device-tree/wirenboard/gsm/model</syntaxhighlight>
Например, чтобы узнать модель модема, нужно запустить команду <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||включён ли модем в linux
|}


== Включение и начало работы == <!--T:2-->
== Включение и начало работы == <!--T:8-->


<!--T:3-->
<!--T:9-->
#Вставить sim-карту.
#Вставить sim-карту.
#Подключить антенну.
#Подключить антенну.
Строка 30: Строка 44:
После каждой смены sim-карты необходимо перезапускать модем (см. п.3)!
После каждой смены sim-карты необходимо перезапускать модем (см. п.3)!


== Утилита wb-gsm == <!--T:4-->
== Утилита wb-gsm == <!--T:10-->
 
<!--T:11-->
Для упрощения работы с модемами была написана утилита wb-gsm (исходный код доступен на [https://github.com/wirenboard/wb-utils/tree/master/gsm нашем github]). Утилита позволяет:
Для упрощения работы с модемами была написана утилита wb-gsm (исходный код доступен на [https://github.com/wirenboard/wb-utils/tree/master/gsm нашем github]). Утилита позволяет:
*Управлять питанием модемов (команды on, off, restart_if_broken);
*Управлять питанием модемов (команды on, off, restart_if_broken);
Строка 37: Строка 53:
Все возможные команды wb-gsm можно посмотреть [https://github.com/wirenboard/wb-utils/blob/b3d3d50d29578472dfebc97bde77714e097d61d6/gsm/wb-gsm здесь].
Все возможные команды wb-gsm можно посмотреть [https://github.com/wirenboard/wb-utils/blob/b3d3d50d29578472dfebc97bde77714e097d61d6/gsm/wb-gsm здесь].


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


<!--T:13-->
Утилита wb-gsm входит в состав пакета ''wb-utils'' и присутствует в стандартном образе ПО контроллера.
Утилита wb-gsm входит в состав пакета ''wb-utils'' и присутствует в стандартном образе ПО контроллера.


== Переключение активной sim-карты ==<!--T:4-->
== Переключение активной sim-карты ==<!--T:14-->
 
<!--T:15-->
Все контроллеры Wiren Board 6 по умолчанию поставляются в комплектации с двумя sim-картами. При этом, в каждый момент времени, '''только одна sim-карта может быть активной'''. По умолчанию, активной является sim1.  
Все контроллеры Wiren Board 6 по умолчанию поставляются в комплектации с двумя sim-картами. При этом, в каждый момент времени, '''только одна sim-карта может быть активной'''. По умолчанию, активной является sim1.  


<!--T:16-->
Переключить модем на другую sim-карту можно с помощью изменения уровня на соответствующем gpio процессора. Узнать номер gpio можно двумя способами:  
Переключить модем на другую sim-карту можно с помощью изменения уровня на соответствующем gpio процессора. Узнать номер gpio можно двумя способами:  
*выполнить команду <syntaxhighlight lang="bash">echo $WB_GPIO_GSM_SIMSELECT</syntaxhighlight>
*выполнить команду <syntaxhighlight lang="bash">echo $WB_GPIO_GSM_SIMSELECT</syntaxhighlight>
*найти ''SIM Slot Select gpio'' в [[Wiren_Board_6.1:Список_GPIO#Ножки для внутреннего использования|таблице gpio]] контроллера.
*найти ''SIM Slot Select gpio'' в [[Wiren_Board_6.1:Список_GPIO#Ножки для внутреннего использования|таблице gpio]] контроллера.


<!--T:17-->
По умолчанию, этот gpio уже экспортирован в sysfs, поэтому, для переключения активной sim-карты с 1 на 2, нужно выполнить команду: <syntaxhighlight lang="bash">echo 1 > /sys/class/gpio/gpio88/value</syntaxhighlight> Соответственно, для переключения обратно на sim1, нужно записать 0.
По умолчанию, этот gpio уже экспортирован в sysfs, поэтому, для переключения активной sim-карты с 1 на 2, нужно выполнить команду: <syntaxhighlight lang="bash">echo 1 > /sys/class/gpio/gpio88/value</syntaxhighlight> Соответственно, для переключения обратно на sim1, нужно записать 0.
Подробнее о работе с gpio можно узнать из [[Работа_с_GPIO#Интерфейс sysfs в Linux|отдельной статьи]].
Подробнее о работе с gpio можно узнать из [[Работа_с_GPIO#Интерфейс sysfs в Linux|отдельной статьи]].


<!--T:18-->
'''После каждой смены sim-карты нужно перезапускать модем''' (см. [[#Включение и начало работы|раздел о включении]] модема).
'''После каждой смены sim-карты нужно перезапускать модем''' (см. [[#Включение и начало работы|раздел о включении]] модема).


== Низкоуровневая работа по uart == <!--T:4-->
== Низкоуровневая работа по uart == <!--T:19-->
 
<!--T:20-->
Любое взаимодействие с модемом так или иначе сводится к отправке AT-команд через последовательный порт модема. Все модемы подключаются к порту ''/dev/ttyGSM''. 3G модемы, помимо этого, подключаются к портам ''/dev/ttyACM'''X''''' (порты создаются usb-драйвером ''cdc_acm'').
Любое взаимодействие с модемом так или иначе сводится к отправке AT-команд через последовательный порт модема. Все модемы подключаются к порту ''/dev/ttyGSM''. 3G модемы, помимо этого, подключаются к портам ''/dev/ttyACM'''X''''' (порты создаются usb-драйвером ''cdc_acm'').


=== Подключение в linux === <!--T:4-->
=== Подключение в linux === <!--T:21-->
 
<!--T:22-->
*uart: Порт ''/dev/ttyGSM'' является ссылкой на ''/dev/ttymxc'''X''''' (uart процессора) и делается с помощью правил udev. Конечный порт может быть разным для разных версий контроллера (подробнее можно посмотреть на [https://github.com/wirenboard/wb-configs/tree/master/configs/usr/share/wb-configs/udev нашем github]).
*uart: Порт ''/dev/ttyGSM'' является ссылкой на ''/dev/ttymxc'''X''''' (uart процессора) и делается с помощью правил udev. Конечный порт может быть разным для разных версий контроллера (подробнее можно посмотреть на [https://github.com/wirenboard/wb-configs/tree/master/configs/usr/share/wb-configs/udev нашем github]).


<!--T:23-->
*usb: Порты ''/dev/ttyACM'''X''''' (в случае 3G-модема) появляются автоматически после подачи питания на модем. Обычно, порты 3G-модема - это ''/dev/ttyACM0-6'', однако '''точно''' определить, к каким портам модем подключен по USB можно, выполнив команды: <code>wb-gsm off; wb-gsm on; dmesg | tail</code>.  
*usb: Порты ''/dev/ttyACM'''X''''' (в случае 3G-модема) появляются автоматически после подачи питания на модем. Обычно, порты 3G-модема - это ''/dev/ttyACM0-6'', однако '''точно''' определить, к каким портам модем подключен по USB можно, выполнив команды: <code>wb-gsm off; wb-gsm on; dmesg | tail</code>.  
Примерный вывод команды:
Примерный вывод команды:
Строка 79: Строка 107:
Соответственно, в данном случае 3G модем подключен к портам /dev/ttyACM0 - /dev/ttyACM6.
Соответственно, в данном случае 3G модем подключен к портам /dev/ttyACM0 - /dev/ttyACM6.


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


<!--T:26-->
Подробнее про взаимодействие с последовательным портом в linux можно прочитать на соответствующей [[Special:MyLanguage/Работа с последовательным портом из Linux|странице wiki]].
Подробнее про взаимодействие с последовательным портом в linux можно прочитать на соответствующей [[Special:MyLanguage/Работа с последовательным портом из Linux|странице wiki]].


<!--T:52-->
<!--T:27-->
Для работы в интерактивном режиме рекомендуем использовать утилиту minicom:
Для работы в интерактивном режиме рекомендуем использовать утилиту minicom:
* запускаем '''minicom''' с ключём, создающим профиль работы с портом (скорость передачи данных, чётность, и т.д.):
* запускаем '''minicom''' с ключём, создающим профиль работы с портом (скорость передачи данных, чётность, и т.д.):
Строка 97: Строка 128:
* Второй командой выполните просто ''AT''. Вам должен прийти ответ '''OK'''.
* Второй командой выполните просто ''AT''. Вам должен прийти ответ '''OK'''.


== Работа с sms и ussd == <!--T:15-->
== Работа с sms и ussd == <!--T:28-->
 
<!--T:29-->
Работать с sms и ussd проще всего при помощи программы [http://wammu.eu/gammu/ ''Gammu''] (это форк утилиты '''gnokii''', которую перестали развивать).
Работать с sms и ussd проще всего при помощи программы [http://wammu.eu/gammu/ ''Gammu''] (это форк утилиты '''gnokii''', которую перестали развивать).


<!--T:30-->
Краткая инструкция по работе gammu; полную документацию смотрите на [http://wammu.eu/gammu/ сайте проекта gammu]:
Краткая инструкция по работе gammu; полную документацию смотрите на [http://wammu.eu/gammu/ сайте проекта gammu]:


=== Настройка ===<!--T:18-->
=== Настройка ===<!--T:31-->
 
<!--T:32-->
Все контроллеры WB6, начиная с 2018 года, поставляются с уже настроенной утилитой gammu. Если gammu не настроена, то можно выбрать один из 2-х способов настройки:
Все контроллеры WB6, начиная с 2018 года, поставляются с уже настроенной утилитой gammu. Если gammu не настроена, то можно выбрать один из 2-х способов настройки:
*Обновить пакет wb-configs. Для этого, нужно выполнить команду <syntaxhighlight lang="bash">apt update; apt install wb-configs</syntaxhighlight>
*Обновить пакет wb-configs. Для этого, нужно выполнить команду <syntaxhighlight lang="bash">apt update; apt install wb-configs</syntaxhighlight>


<!--T:33-->
[[File:Gammu-config.png|300px|thumb|right|Настройка gammu вручную (''gammu-config'')]]
[[File:Gammu-config.png|300px|thumb|right|Настройка gammu вручную (''gammu-config'')]]
*Настроить gammu вручную.
*Настроить gammu вручную.
Строка 112: Строка 149:
#В параметре ''Connection'' укажите ''at115200''
#В параметре ''Connection'' укажите ''at115200''


=== Примеры команд gammu ===<!--T:18-->
=== Примеры команд gammu ===<!--T:34-->
 
<!--T:35-->
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
$ gammu networkinfo # посмотреть сеть и базовую станцию, к которой вы подключены
$ gammu networkinfo # посмотреть сеть и базовую станцию, к которой вы подключены
Строка 120: Строка 159:
</syntaxhighlight>
</syntaxhighlight>


=== SMS и USSD на русском === <!--T:19-->
=== SMS и USSD на русском === <!--T:36-->
 
<!--T:37-->
SMS и USSD на русском пока работают в ''gammu'' не всегда хорошо, поэтому могут пригодиться команды для переключения языка USSD и перекодирования входящих и исходящих SMS в транслит:
SMS и USSD на русском пока работают в ''gammu'' не всегда хорошо, поэтому могут пригодиться команды для переключения языка USSD и перекодирования входящих и исходящих SMS в транслит:
{| class="wikitable"
{| class="wikitable"
Строка 136: Строка 177:
|}
|}


=== SMS-уведомления === <!--T:19-->
=== SMS-уведомления === <!--T:38-->
 
<!--T:39-->
Отправка sms-уведомлений об изменении состояния какого-либо устройства реализована в ПО Wiren Board с помощью сервиса уведомлений. Подробнее можно прочитать в [[Notification_module#Настройка модуля уведомлений|соответствующей статье]].
Отправка sms-уведомлений об изменении состояния какого-либо устройства реализована в ПО Wiren Board с помощью сервиса уведомлений. Подробнее можно прочитать в [[Notification_module#Настройка модуля уведомлений|соответствующей статье]].


<!--T:40-->
Также, можно отправлять SMS из движка правил wb-rules, вызывая соответствующую функцию (см. [[Notification_module#Как настроить уведомления с более сложными условиями|этот]] подраздел).
Также, можно отправлять SMS из движка правил wb-rules, вызывая соответствующую функцию (см. [[Notification_module#Как настроить уведомления с более сложными условиями|этот]] подраздел).


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


=== Быстрая настройка автоматического выхода в интернет для МТС/Билайн/Мегафон === <!--T:23-->
=== Быстрая настройка автоматического выхода в интернет для МТС/Билайн/Мегафон === <!--T:43-->


<!--T:24-->
<!--T:44-->
В стандартное ПО Wiren Board входят настройки подключения для операторов МТС, Мегафон и Билайн по протоколу ppp. Если вы пользуетесь одним из них, для запуска подключения выполните команду  
В стандартное ПО Wiren Board входят настройки подключения для операторов МТС, Мегафон и Билайн по протоколу ppp. Если вы пользуетесь одним из них, для запуска подключения выполните команду  
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Строка 156: Строка 202:
</syntaxhighlight>
</syntaxhighlight>


<!--T:45-->
Если на контроллере установлен 3G-модем, то для увеличения пропускной способности соединения, демону pppd нужно указать другой порт: в файле /etc/ppp/peers/ваш_провайдер_сотовой_связи (в примере — МТС) замените устройство <code>/dev/ttyGSM</code> на <code>/dev/ttyACM0</code>
Если на контроллере установлен 3G-модем, то для увеличения пропускной способности соединения, демону pppd нужно указать другой порт: в файле /etc/ppp/peers/ваш_провайдер_сотовой_связи (в примере — МТС) замените устройство <code>/dev/ttyGSM</code> на <code>/dev/ttyACM0</code>
[[Файл:GSM-ACM.png|thumb|right|Файл /etc/ppp/peers/<ваш_провайдер_связи>]]
[[Файл:GSM-ACM.png|thumb|right|Файл /etc/ppp/peers/<ваш_провайдер_связи>]]


<!--T:46-->
[[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'' и раскомментируйте/отредактируйте следующие строки:
Строка 171: Строка 219:
</syntaxhighlight>
</syntaxhighlight>


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


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


=== Маршрутизация и настройка <u>''резервного''</u> подключения через ppp === <!--T:38-->
=== Маршрутизация и настройка <u>''резервного''</u> подключения через ppp === <!--T:49-->


<!--T:39-->
<!--T:50-->
'''Важно!''' По умолчанию интерфейс ppp0 при инициализации '''не добавляет нового маршрута по умолчанию''' через ppp, в случае, если такой маршрут существует и настроен, например, через eth0. Если это требуется, то изменение таблицы маршрутизации можно выполнять через скрипты в директориях ip-down.d, ip-up.d. Подробнее о такой настройке можно прочитать в [[Wirenboard6:InstallingOnTheRemoteSite#PPP — основной и резервный выход в интернет|соответствующей статье]].
'''Важно!''' По умолчанию интерфейс ppp0 при инициализации '''не добавляет нового маршрута по умолчанию''' через ppp, в случае, если такой маршрут существует и настроен, например, через eth0. Если это требуется, то изменение таблицы маршрутизации можно выполнять через скрипты в директориях ip-down.d, ip-up.d. Подробнее о такой настройке можно прочитать в [[Wirenboard6:InstallingOnTheRemoteSite#PPP — основной и резервный выход в интернет|соответствующей статье]].


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


<!--T:48-->
<!--T:52-->
Если контроллер обычно подключён к Интернету через Ethernet или Wi-Fi, а GPRS должен использоваться только при неполадках основного канала, такой режим работы называется ''failover''. Обычно он работает так:
Если контроллер обычно подключён к Интернету через Ethernet или Wi-Fi, а GPRS должен использоваться только при неполадках основного канала, такой режим работы называется ''failover''. Обычно он работает так:
# Организуется работа через основной канал.
# Организуется работа через основной канал.
Строка 192: Строка 241:
# Основное соединение постоянно проверяется, и если доступ в Интернет через него восстанавливается, система возвращается к работе через него, изменяя ''default gateway''.
# Основное соединение постоянно проверяется, и если доступ в Интернет через него восстанавливается, система возвращается к работе через него, изменяя ''default gateway''.


<!--T:49-->
<!--T:53-->
В качестве примера укажем две инструкции по организации такого режима работы:
В качестве примера укажем две инструкции по организации такого режима работы:
# 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


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


<!--T:62-->
<!--T:55-->
Модем поддерживает режим мультиплексирования - создание виртуальных портов, через которые можно одновременно работать с модемом.
Модем поддерживает режим мультиплексирования - создание виртуальных портов, через которые можно одновременно работать с модемом.
Например, через один порт можно открыть сессию PPP для GPRS, а через другой получать и отправлять SMS, проверять баланс и т.д.
Например, через один порт можно открыть сессию PPP для GPRS, а через другой получать и отправлять SMS, проверять баланс и т.д.
Подробнее смотрите [[Special:MyLanguage/CMUX|CMUX]]. Этот режим не поддерживается для 2G-модемов.
Подробнее смотрите [[Special:MyLanguage/CMUX|CMUX]]. Этот режим не поддерживается для 2G-модемов.


==Документация на модемы==<!--T:61-->
==Документация на модемы==<!--T:56-->
 
<!--T:57-->
Вся документация доступна на сайте официального поставщика устройств simcom в России ([http://www.mt-system.ru/linecard/simcom-wireless-solutions MT-SYSTEM]). Для удобства в таблице собраны ссылки на документацию на модемы, устанавливающиеся в актуальные модели контроллеров Wiren Board:
Вся документация доступна на сайте официального поставщика устройств simcom в России ([http://www.mt-system.ru/linecard/simcom-wireless-solutions MT-SYSTEM]). Для удобства в таблице собраны ссылки на документацию на модемы, устанавливающиеся в актуальные модели контроллеров Wiren Board:
{| class="wikitable"
{| class="wikitable"
Строка 218: Строка 269:
|}
|}


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


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


<!--T:11-->
<!--T:59-->
В терминальном режиме работы с модемом, например, в программе minicom (смотрите ниже раздел [[Special:MyLanguage/#низкоуровневая-работа с модулем через at-команды|#Низкоуровневая работа с модулем через AT-команды]]), необходимо ввести команду выбора режима:
В терминальном режиме работы с модемом, например, в программе minicom (смотрите ниже раздел [[Special:MyLanguage/#низкоуровневая-работа с модулем через at-команды|#Низкоуровневая работа с модулем через AT-команды]]), необходимо ввести команду выбора режима:
<pre>
<pre>
Строка 230: Строка 281:
</pre>
</pre>


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


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


<!--T:14-->
<!--T:62-->
Чтобы вернуться в режим IoT, выполните команду:   
Чтобы вернуться в режим IoT, выполните команду:   
<pre>
<pre>

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

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

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

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

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

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

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

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

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

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

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

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

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

Подробнее о файлах внутри директории можно узнать из таблицы:

Файл Описание
/proc/device-tree/wirenboard/gsm/model модель модема
/proc/device-tree/wirenboard/gsm/type поддерживаемые сети
/proc/device-tree/wirenboard/gsm/status включён ли модем в linux

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

  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 и присутствует в стандартном образе ПО контроллера.

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

Все контроллеры Wiren Board 6 по умолчанию поставляются в комплектации с двумя sim-картами. При этом, в каждый момент времени, только одна sim-карта может быть активной. По умолчанию, активной является sim1.

Переключить модем на другую sim-карту можно с помощью изменения уровня на соответствующем gpio процессора. Узнать номер gpio можно двумя способами:

  • выполнить команду
    echo $WB_GPIO_GSM_SIMSELECT
    
  • найти SIM Slot Select gpio в таблице gpio контроллера.

По умолчанию, этот gpio уже экспортирован в sysfs, поэтому, для переключения активной sim-карты с 1 на 2, нужно выполнить команду:

echo 1 > /sys/class/gpio/gpio88/value

Соответственно, для переключения обратно на sim1, нужно записать 0.

Подробнее о работе с gpio можно узнать из отдельной статьи.

После каждой смены sim-карты нужно перезапускать модем (см. раздел о включении модема).

Низкоуровневая работа по 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:

Настройка

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

  • Обновить пакет wb-configs. Для этого, нужно выполнить команду
    apt update; apt install wb-configs
    
Настройка gammu вручную (gammu-config)
  • Настроить 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# неизвестно неизвестно

SMS-уведомления

Отправка sms-уведомлений об изменении состояния какого-либо устройства реализована в ПО Wiren Board с помощью сервиса уведомлений. Подробнее можно прочитать в соответствующей статье.

Также, можно отправлять SMS из движка правил wb-rules, вызывая соответствующую функцию (см. этот подраздел).

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

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

wb-gsm restart_if_broken

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

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

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

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

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

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

Файл /etc/ppp/peers/<ваш_провайдер_связи>
Файл /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).

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

Важно! По умолчанию интерфейс 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-модемов.

Документация на модемы

Вся документация доступна на сайте официального поставщика устройств simcom в России (MT-SYSTEM). Для удобства в таблице собраны ссылки на документацию на модемы, устанавливающиеся в актуальные модели контроллеров Wiren Board:

Модель Режимы сети краткое описание hardware design AT-команды
SIM800 2G pdf pdf pdf
SIM5300E 2G/3G pdf pdf pdf
SIM7000E 2G/NB-IOT pdf pdf pdf
A7600E-H 2G/3G/4G pdf pdf pdf

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