Это полностью определённый скрипт дозвона в формате утилиты chat.
Чтобы откорректировать скрипт вручную в том случае, если автоматически составленный скрипт не подходит по какой-либо причине, или не составляется для данного типа модемов.
Скрипт состоит из последовательности строк жду посылаю ...
(через пробел). Если скрипт задан пользователем в этом поле, то поля APN
и timeout
игнорируются.
Перед ожидаемым ответом может ставиться команда TIMEOUT (в верхнем регистре!), которая устанавливает время ожидания этого и последущих ответов (пока оно не будет изменено следующей такой же командой).
В более сложных вариантах вместо одиночного ответа используются цепочки вида ответ-команда1-ответ1-команда2-ответ2-...
: если ответ
на предыдущую команду не получен за заданный таймаут, то посылается команда2
, на которую должен быть получен ответ2
; если не получен, то посылается команда3
и т.д; такая цепочка должна всегда завершаться ответом, т.е. содержать нечётное число элементов.
Подробно о скриптах дозвона см. man chat.
ВНИМАНИЕ! Категорически важно соблюдать чётность и порядок следования элементов скрипта дозвона. Скрипт всегда начинается с сообщения, ожидаемого от модема, и завершается командой, посылаемой в модем. Чтобы пропустить очередной элемент, используется элемент из двух одинарных апострофов подряд (''
, не путать с двойной кавычкой"
), означающий пустую строку.
В NSG Linux скрипт может содержать любые спецсимволы, включая + - " $ и др. (они преобразуются в нужный вид автоматически).
Безусловно, для написания скрипта необходимо знать язык AT-команд конкретного модема, а для начала — хотя бы его тип. К сожалению, язык команд для современных сотовых модемов (да и для заключительного поколения телефонных модемов тоже) изобилует фирменными командами, поэтому полный перечень этих команд выходит за рамки данной справки. Рекомендуется полагаться на команды, которые система подбирает автоматически в зависимости от обнаруженного типа модема. Как правило, бывает достаточно вывести автоматически построенный скрипт командой show
, скопировать его в поле script
и подставить туда ещё одну пару "команда-ответ" (с обязательным соблюдением чётности). Необходимые команды можно попробовать из числа стандартных (например, AT+CPIN? '+SIM: READY'
), или узнать в службе технической поддержки NSG для данного типа модема (тип можно узнать командами ATIn
в режиме прозрачного доступа в порт).
Смотреть журнал порта — на какой команде модем даёт сбой, или где нарушается парность "жду-посылаю".
Типовой скрипт в NSG Linux формируется, как правило, следующим образом:
TIMEOUT 30 XXX-\rAT-OK
. Система ждёт от модема строку XXX
, которую, естественно, не дождётся. Это старый фидошный трюк, чтобы тупо потянуть время и дать модему прогрузиться (подробнее см. параметр TIMEOUT
). После этого посылается Enter (\r
), чтобы прочистить буфер порта (мало ли какой мусор мог там остаться после рестарта модема) и команда AT
, на которую модем уже должен ответить OK
.mode
. Ожидаемый ответ — OK
.Ответ —AT+CGDCONT=1,"IP","access.point.name"[,фигня[,всякая]]
OK
.ATD
. Для сетей GSM/UMTS этогде *99 — фиксированный "вызываемый номер", а ***1 — ссылка на контент номер 1, установленный командой выше. Такое указание в явном виде — надёжнее, это работает во всех без исключения модемах. Ответом должно бытьATD*99***1#
CONNECT
.''
.А теперь сравните это с тем, что вы видите в show
.
Простейший дозвон, модем предполагается всегда готовым к работе:
'' ATDномер CONNECT ''
Более развитый скрипт. Во-первых, обменяться с модемом сообщениями AT OK
, чтобы убедиться, что он жив. Во-вторых, программно инициализировать модем (ATZ
). В-третьих, поскольку большинство телефонных сетей СССР использует импульсный набор номера (P
), то указать это явно в команде ATD
:
'' AT OK ATZ OK ATDPномер CONNECT ''
Перебирать два или более вызываемых номера, если первый не отвечает, можно с помощью конструкции:
'' AT OK ATZ OK ATDPномер1 CONNECT-ATDPномер2-CONNECT-ATDPномер3-CONNECT ''
Перезагрузка модема после разъединения, по падению сигнала DTR. Тот же трюк, что и для сотового модема выше, но для проводных модемов обычно достаточно 2–3 сек.
TIMEOUT 3 XXX-\rAT-OK ATDPномер TIMEOUT 45 CONNECT ''
Фрагмент скрипта с аутентификацией в терминальном режиме:
... ATDPномер ogin: имя assword: пароль ''
Скрипт для сервера доступа по коммутируемым линиям. Инициализирует модем и ставит его в режим автоответа:
'' ATZ OK ATS0=1 OK ''
То же самое, с задержкой на перезагрузку модема:
TIMEOUT 3 XXX-\rAT-OK ATS0=1 OK ''
Если режим автоответа на модеме по каким-либо причинам использовать нельзя, то можно установить в скрипте неограниченное время ожидания и "ручной" ответ на входящий звонок:
TIMEOUT 3 XXX-\rAT-OK AT TIMEOUT 0 RING ATA TIMEOUT 45 CONNECT ''
Эх, Grand Style...
© Network Systems Group 2015–2024 | Отдел документации |