Modem-stretch: различия между версиями
Vdromanov (обсуждение | вклад) |
Vdromanov (обсуждение | вклад) |
||
Строка 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: | == Получение информации о модеме == <!--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: | == Включение и начало работы == <!--T:8--> | ||
<!--T: | <!--T:9--> | ||
#Вставить sim-карту. | #Вставить sim-карту. | ||
#Подключить антенну. | #Подключить антенну. | ||
Строка 30: | Строка 44: | ||
После каждой смены sim-карты необходимо перезапускать модем (см. п.3)! | После каждой смены sim-карты необходимо перезапускать модем (см. п.3)! | ||
== Утилита wb-gsm == <!--T: | == Утилита 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: | == Переключение активной 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: | == Низкоуровневая работа по 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: | === Подключение в 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: | === Отправка 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: | <!--T:27--> | ||
Для работы в интерактивном режиме рекомендуем использовать утилиту minicom: | Для работы в интерактивном режиме рекомендуем использовать утилиту minicom: | ||
* запускаем '''minicom''' с ключём, создающим профиль работы с портом (скорость передачи данных, чётность, и т.д.): | * запускаем '''minicom''' с ключём, создающим профиль работы с портом (скорость передачи данных, чётность, и т.д.): | ||
Строка 97: | Строка 128: | ||
* Второй командой выполните просто ''AT''. Вам должен прийти ответ '''OK'''. | * Второй командой выполните просто ''AT''. Вам должен прийти ответ '''OK'''. | ||
== Работа с sms и ussd == <!--T: | == Работа с 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: | === Настройка ===<!--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: | === Примеры команд gammu ===<!--T:34--> | ||
<!--T:35--> | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ gammu networkinfo # посмотреть сеть и базовую станцию, к которой вы подключены | $ gammu networkinfo # посмотреть сеть и базовую станцию, к которой вы подключены | ||
Строка 120: | Строка 159: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== SMS и USSD на русском === <!--T: | === SMS и USSD на русском === <!--T:36--> | ||
<!--T:37--> | |||
SMS и USSD на русском пока работают в ''gammu'' не всегда хорошо, поэтому могут пригодиться команды для переключения языка USSD и перекодирования входящих и исходящих SMS в транслит: | SMS и USSD на русском пока работают в ''gammu'' не всегда хорошо, поэтому могут пригодиться команды для переключения языка USSD и перекодирования входящих и исходящих SMS в транслит: | ||
{| class="wikitable" | {| class="wikitable" | ||
Строка 136: | Строка 177: | ||
|} | |} | ||
=== SMS-уведомления === <!--T: | === 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: | == Интернет через ppp == <!--T:41--> | ||
<!--T:42--> | |||
Перед выходом в интернет необходимо, чтобы модем был включен. Для этого вручную или в файле настройке сетевых интерфейсов (см. далее) выполните команду <pre>wb-gsm restart_if_broken</pre> | Перед выходом в интернет необходимо, чтобы модем был включен. Для этого вручную или в файле настройке сетевых интерфейсов (см. далее) выполните команду <pre>wb-gsm restart_if_broken</pre> | ||
=== Быстрая настройка автоматического выхода в интернет для МТС/Билайн/Мегафон === <!--T: | === Быстрая настройка автоматического выхода в интернет для МТС/Билайн/Мегафон === <!--T:43--> | ||
<!--T: | <!--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: | <!--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: | === Маршрутизация и настройка <u>''резервного''</u> подключения через ppp === <!--T:49--> | ||
<!--T: | <!--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: | <!--T:51--> | ||
Для более сложных случаев, когда физическое соединение на интерфейсе eth0 не пропадает, рекомендуется применять скрипты, которые на основе доступности какого-либо сетевого уздла в интернете через один из интерфейсов переключают маршрут по умолчанию. В интернете предлагается множество решений решений такого рода задачи, можно выбрать одно из них. | Для более сложных случаев, когда физическое соединение на интерфейсе eth0 не пропадает, рекомендуется применять скрипты, которые на основе доступности какого-либо сетевого уздла в интернете через один из интерфейсов переключают маршрут по умолчанию. В интернете предлагается множество решений решений такого рода задачи, можно выбрать одно из них. | ||
<!--T: | <!--T:52--> | ||
Если контроллер обычно подключён к Интернету через Ethernet или Wi-Fi, а GPRS должен использоваться только при неполадках основного канала, такой режим работы называется ''failover''. Обычно он работает так: | Если контроллер обычно подключён к Интернету через Ethernet или Wi-Fi, а GPRS должен использоваться только при неполадках основного канала, такой режим работы называется ''failover''. Обычно он работает так: | ||
# Организуется работа через основной канал. | # Организуется работа через основной канал. | ||
Строка 192: | Строка 241: | ||
# Основное соединение постоянно проверяется, и если доступ в Интернет через него восстанавливается, система возвращается к работе через него, изменяя ''default gateway''. | # Основное соединение постоянно проверяется, и если доступ в Интернет через него восстанавливается, система возвращается к работе через него, изменяя ''default gateway''. | ||
<!--T: | <!--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: | ==Мультиплексирование== <!--T:54--> | ||
<!--T: | <!--T:55--> | ||
Модем поддерживает режим мультиплексирования - создание виртуальных портов, через которые можно одновременно работать с модемом. | Модем поддерживает режим мультиплексирования - создание виртуальных портов, через которые можно одновременно работать с модемом. | ||
Например, через один порт можно открыть сессию PPP для GPRS, а через другой получать и отправлять SMS, проверять баланс и т.д. | Например, через один порт можно открыть сессию PPP для GPRS, а через другой получать и отправлять SMS, проверять баланс и т.д. | ||
Подробнее смотрите [[Special:MyLanguage/CMUX|CMUX]]. Этот режим не поддерживается для 2G-модемов. | Подробнее смотрите [[Special:MyLanguage/CMUX|CMUX]]. Этот режим не поддерживается для 2G-модемов. | ||
==Документация на модемы==<!--T: | ==Документация на модемы==<!--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: | = GPRS на модемах SIM7000E 2G/NB-IoT = <!--T:57--> | ||
<!--T: | <!--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: | <!--T:59--> | ||
В терминальном режиме работы с модемом, например, в программе minicom (смотрите ниже раздел [[Special:MyLanguage/#низкоуровневая-работа с модулем через at-команды|#Низкоуровневая работа с модулем через AT-команды]]), необходимо ввести команду выбора режима: | В терминальном режиме работы с модемом, например, в программе minicom (смотрите ниже раздел [[Special:MyLanguage/#низкоуровневая-работа с модулем через at-команды|#Низкоуровневая работа с модулем через AT-команды]]), необходимо ввести команду выбора режима: | ||
<pre> | <pre> | ||
Строка 230: | Строка 281: | ||
</pre> | </pre> | ||
<!--T: | <!--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: | <!--T:61--> | ||
Режим запоминается и активен и после отключения питания, установить режим нужно один раз. | Режим запоминается и активен и после отключения питания, установить режим нужно один раз. | ||
<!--T: | <!--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 |
Включение и начало работы
- Вставить sim-карту.
- Подключить антенну.
- Перезапустить модем, выполнив команды
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 (нажать 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
- В параметре Port укажите /dev/ttyXXX - файл модема, соответствующий вашей модели контроллера.
- В параметре 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/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. Обычно он работает так:
- Организуется работа через основной канал.
- Постоянно проверяется наличие доступа в Интернет через основной канал.
- В случае неполадок запускается запасное соединение, меняются настройки default gateway.
- Основное соединение постоянно проверяется, и если доступ в Интернет через него восстанавливается, система возвращается к работе через него, изменяя default gateway.
В качестве примера укажем две инструкции по организации такого режима работы:
- 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
Мультиплексирование
Модем поддерживает режим мультиплексирования - создание виртуальных портов, через которые можно одновременно работать с модемом. Например, через один порт можно открыть сессию PPP для GPRS, а через другой получать и отправлять SMS, проверять баланс и т.д. Подробнее смотрите CMUX. Этот режим не поддерживается для 2G-модемов.
Документация на модемы
Вся документация доступна на сайте официального поставщика устройств simcom в России (MT-SYSTEM). Для удобства в таблице собраны ссылки на документацию на модемы, устанавливающиеся в актуальные модели контроллеров Wiren Board:
Модель | Режимы сети | краткое описание | hardware design | AT-команды |
---|---|---|---|---|
SIM800 | 2G | |||
SIM5300E | 2G/3G | |||
SIM7000E | 2G/NB-IOT | |||
A7600E-H | 2G/3G/4G |
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