Управление модемом по SMS: настройка службы SMS AT RUN на модулях Telit

Управление модемом по SMS: настройка службы SMS AT RUN на модулях Telit

← Все разделы FAQ

Разделы FAQ:

Оглавление

Введение

Модем управляется AT-командами. Обычно их подаёт контроллер или компьютер, подключённый к модему кабелем. Но оборудование часто стоит там, куда не приедешь за пять минут: шкаф на подстанции, счётчик в подвале, метеопост, банкомат в другом городе.

SMS AT RUN — встроенная служба модулей Telit, на которых построены GSM-модемы TELEOFIS. Она позволяет удалённо управлять модемом по SMS: модем проверяет входящие сообщения, и если SMS пришло с разрешённого номера, а его текст начинается с AT, выполняет этот текст как обычную AT-команду и отправляет ответ обратно тем же SMS.

Что это даёт на практике:

  • Диагностика без выезда. Уровень сигнала, оператор, состояние регистрации — одним сообщением.
  • Перезагрузка зависшего устройства. Когда GPRS/LTE-канал уже не отвечает, SMS чаще всего ещё проходит.
  • Изменение настроек. Смена APN, режима сети, управление выводами GPIO.
  • Работа без интернета. Служба не требует активного пакетного соединения, только регистрацию в сети и SMS.
Примечание: служба работает на самом модеме. Она не зависит от вашего контроллера и его ПО, поэтому остаётся доступной, когда основная логика устройства перестала отвечать.

Далее по шагам: задаём параметры службы, заносим номера в белый список, включаем службу и проверяем, что настройки сохраняются после перезагрузки. Затем разбираем формат SMS-команд, защиту и ограничения.


Что нужно до начала настройки

  • Локальный доступ к модему по COM-порту (терминал: PuTTY, Tera Term, Telit AT Controller и т. п.). Первичная настройка выполняется только локально — по SMS её сделать нельзя, служба ещё выключена.
  • Установленная SIM-карта с активной услугой SMS и известным номером.
  • Номер телефона (или SIM-модема), с которого вы будете отправлять команды.
  • Положительный баланс на SIM-карте модема — исходящие ответные SMS платные.
Примечание: каждый ответ модема — это отдельное платное SMS, а длинный ответ разбивается на несколько сообщений. На тарифах с дорогими SMS активная диагностика может заметно расходовать баланс.

Быстрая настройка

Если нужен рабочий результат прямо сейчас, введите в терминале по порядку (номер замените на свой):

AT#SMSATRUNCFG=3,1,5
AT#SMSATWL=0,1,0,"+79999999999"
AT#SMSATRUN=1

Первая команда задаёт параметры выполнения (значения по умолчанию), вторая разрешает ваш номер, третья включает службу. После каждой команды модем должен ответить OK.

Порядок важен: AT#SMSATRUNCFG возвращает ERROR, если служба уже включена. Отдельная команда сохранения (AT&W) не нужна — параметры службы записываются в энергонезависимую память автоматически. Ниже — что именно делает каждая команда.


Шаг 1. Параметры выполнения

AT#SMSATRUNCFG=<instance>[,<urcmod>[,<timeout>]]

Значение по умолчанию, которое подходит подавляющему большинству применений:

AT#SMSATRUNCFG=3,1,5
Параметр Что задаёт Рекомендация
<instance> Номер внутреннего AT-интерфейса модема, который резервируется под выполнение команд из SMS. Допустимые значения — от 2 до 5 3 (по умолчанию) — оставьте как есть
<urcmod> Показывать ли в локальном терминале уведомление #SMSATRUN: <команда> в момент получения команды: 0 — нет, 1 — да 1 (по умолчанию) — удобно при отладке
<timeout> Максимальное время выполнения команды в минутах, от 1 до 60. Если команда не завершилась за это время, модуль перезагружается 5 минут (по умолчанию)

Интерфейс №1 для службы недоступен — это тот порт, через который вы работаете с модемом локально, поэтому локальное управление при настройке службы не теряется. Тот же интерфейс, что и SMS AT RUN, использует служба Event Monitor: изменение <instance> в AT#SMSATRUNCFG автоматически меняет его и в AT#ENAEVMONICFG, и наоборот.

Примечание: пока служба SMS AT RUN или Event Monitor включена, AT#SMSATRUNCFG отвечает ERROR. Чтобы изменить параметры на работающем модеме, сначала выполните AT#SMSATRUN=0, задайте параметры и снова включите службу.

Текущие параметры можно посмотреть запросом AT#SMSATRUNCFG?.


Шаг 2. Белый список номеров

Это ключевой шаг с точки зрения безопасности. Модем выполнит команду только если отправитель есть в белом списке. Пока список пуст, служба фактически не работает — все команды будут игнорироваться.

AT#SMSATWL=<action>,<index>[,<entryType>[,<string>]]

Добавить номер +79999999999 в первый слот:

AT#SMSATWL=0,1,0,"+79999999999"
Параметр Значения
<action> 0 — добавить запись; 1 — удалить запись; 2 — показать запись в указанном слоте
<index> Номер слота, от 1 до 8
<entryType> 0 — телефонный номер; 1 — пароль (не более двух паролей одновременно)
<string> Номер в кавычках, в международном формате: только цифры, + в начале и маска * в конце. Пароль — ровно 16 символов

Маски номеров

Символ * ставится только в конце номера и заменяет любое окончание — удобно, когда команды могут приходить с нескольких SIM-карт службы эксплуатации.

Запись Кому разрешён доступ
"+79999999999" Только этому конкретному номеру
"+7916*" Всем номерам с кодом 916
"+7*" Любому российскому номеру
Примечание: запись "+7*" открывает управление модемом с любого российского номера. Для оборудования в поле указывайте конкретные номера или максимально узкие маски, иначе достаточно случайного «AT»-сообщения или подмены номера, чтобы вмешаться в работу устройства.

Просмотр списка

Весь список целиком:

AT#SMSATWL?

Одна запись, например в слоте 1:

AT#SMSATWL=2,1

Просматривайте список перед добавлением записей, чтобы не затереть занятый слот.


Шаг 3. Включение службы

AT#SMSATRUN=1
Значение Описание
0 Служба выключена (состояние по умолчанию)
1 Служба включена: входящие SMS проверяются как потенциальные AT-команды

Проверьте состояние запросом AT#SMSATRUN?. Ответ приходит в формате #SMSATRUN: <mod>,<stat>, где первое число — настройка (включена/выключена), второе — фактическое состояние службы (1 — активна). Для работающей службы ответ должен быть #SMSATRUN: 1,1.

Настройка хранится в энергонезависимой памяти модуля. После перезагрузки или отключения питания служба поднимается автоматически — включать её заново не нужно.


Шаг 4. Проверка после перезагрузки

Перезагрузите модем командой AT#REBOOT и после старта выполните:

AT#SMSATRUN?
AT#SMSATRUNCFG?
AT#SMSATWL?

Служба должна быть включена (#SMSATRUN: 1,1), параметры — совпадать с заданными, а в белом списке — быть ваши номера. После этого отправьте с разрешённого номера пробную команду AT+CSQ (см. следующий раздел).


Как отправлять команды и читать ответы

Правила формата сообщения

  • Текст SMS должен начинаться с AT — никаких приветствий, пробелов и переносов перед командой.
  • Отправитель должен быть в белом списке.
  • Сообщение не должно быть склеенным (concatenated) — одна команда = одно SMS. Ответ модема, наоборот, при необходимости разбивается на несколько сообщений.
  • Несколько команд подряд разделяются точкой с запятой: AT+CSQ;+COPS?

Пример

Отправьте на номер SIM-карты модема сообщение с текстом:

AT+CSQ

Через несколько секунд придёт ответное SMS:

+CSQ: 9,0

OK

Первое число — уровень сигнала (RSSI) в условных единицах от 0 до 31, второе — коэффициент битовых ошибок (BER) от 0 до 7. Значение 99 в любом из полей означает, что величина не определена.

Команда без ответа

Если ответное SMS не нужно (например, вы просто перезагружаете устройство и хотите сэкономить на SMS), начните текст с HAT вместо AT:

HAT#REBOOT

Полезные команды для диагностики

Команда Что показывает / делает
AT+CSQ Уровень и качество сигнала
AT+COPS? Текущий оператор сети
AT+CREG? Состояние регистрации в сети
AT+CGMR Версия прошивки модуля
AT+CGSN IMEI устройства
AT#MONI Подробная информация о соте
AT#REBOOT Перезагрузка модема

Это лишь малая часть — полный перечень команд с описанием параметров и форматов ответа смотрите в AT Commands Reference Guide.


Настройки порта и отдельный AT-интерфейс

Команды из SMS выполняются не на том порту, к которому подключено ваше оборудование, а на отдельном внутреннем AT-интерфейсе — том, что задан в <instance> (по умолчанию №3). У каждого интерфейса собственный набор настроек, поэтому команды, которые настраивают «свой» порт, по SMS меняют параметры интерфейса службы, а не физического порта.

Например, если отправить по SMS AT+ICF=2,1 (8 бит, чётность Even, 1 стоп-бит), модем ответит OK, но чётность на физическом UART, к которому подключён контроллер, не изменится. То же относится к командам:

  • параметры порта — AT+IPR (скорость), AT+ICF (формат кадра и чётность), AT+IFC и AT&K (управление потоком), AT&D, AT&S;
  • формат ответов — ATE, ATV, ATQ, ATX, AT+CMEE;
  • режим SMS и уведомлений — AT+CMGF, AT+CNMI, AT+CREG=<n>, AT+CGREG=<n>.

Такие параметры меняйте локально, через тот порт, к которому они относятся. По SMS имеет смысл отправлять команды, которые действуют на модуль целиком: запросы состояния, настройки сети и APN, управление GPIO, перезагрузку.

Примечание: по этой же причине опасны команды ATQ1 и ATQ2 — они отключают ответы на интерфейсе службы, и модем перестаёт отвечать на SMS-команды (см. раздел «Ограничения и опасные команды»).

Безопасность: пароли и маски

Проверка по номеру отправителя защищает от случайных сообщений, но номер в SMS технически можно подменить. Для ответственных объектов Telit предусматривает второй режим — Digest SMS AT RUN, в котором сообщение подписывается паролем (дайджестом), и доступ привязан к паролю, а не к номеру.

AT#SMSATWL=0,2,1,"1234567890123456"

Эта команда записывает пароль в слот 2.

  • Пароль должен быть длиной ровно 16 символов.
  • Одновременно в белом списке может быть не более двух паролей.
  • Такие сообщения формируются в двоичном (8-битном) виде — с обычного телефона их не отправить, нужна программа или SMS-шлюз, умеющий собирать дайджест.

Структура такого сообщения (заголовок, дайджест, кодирование) описана в документе Telit Running AT Commands Remotely Application Note.

Примечание: не оставляйте широких масок вроде "+7*" на действующем оборудовании. Не публикуйте номер SIM-карты модема. Периодически проверяйте содержимое белого списка командой AT#SMSATWL? — особенно на устройствах, которые проходили сервис или меняли владельца.

Ограничения и опасные команды

Команды, которые не работают через SMS

Не выполняются команды, требующие ввода данных после приглашения >: AT+CMGS, AT+CMGW, AT#SSEND, AT#SEMAIL, AT#WSCRIPT, AT#I2CWR и подобные — приглашение в SMS не передаётся.

Ответы очень длинных команд (семейство AT#CSURV) обрезаются: в цепочку помещается не более 15 SMS.

Команды, после которых связь с модемом теряется

Примечание: не отправляйте по SMS команды из списка ниже. Они блокируют обмен SMS или ответы службы, и восстановить управление получится только локально, на объекте.
  • AT+CFUN=2, AT+CFUN=4 — перевод модуля в неактивные режимы;
  • AT+CMUX=0, AT#BND=3;
  • AT+CGCLASS="CG", AT+CGSMS=0, AT+COPS=2;
  • AT#SIMDET=0, ATQ1, ATQ2;
  • включение телефонной книги FDN, если ваш номер в неё не внесён.

Команды AT#REBOOT и AT#SHDN работают, но ответное SMS до выключения модуля отправить не успевают — отсутствие ответа здесь нормально.

Задержка перед выполнением

Часть команд, которые обращаются к сети или переключают режимы GSM/GPRS, конфликтует с работающей SMS-службой и может завершиться ошибкой. Помогает пауза перед выполнением команды из SMS:

AT#ATRUNDELAY=1,5

Первый параметр — служба (1 — SMS AT RUN, 0 — TCP AT RUN), второй — задержка в секундах, от 0 до 30 (по умолчанию 0). Задержка действует только на команды, пришедшие через службу, и сохраняется до следующей команды AT#ATRUNDELAY.

Рекомендуемые значения: 10 секунд для AT+COPS=?, AT+CFUN, AT#SIMDET, AT#CSURV; 5 секунд для AT#SGACT, AT+CGACT, AT+CGATT.

Полные таблицы задержек и перечень ограничений приведены в документе Telit Running AT Commands Remotely Application Note.


Не работает: что проверить

Симптом Вероятная причина и решение
Ответ не приходит вообще Проверьте баланс SIM-карты модема и регистрацию в сети (AT+CREG?). Убедитесь, что служба включена и активна: AT#SMSATRUN? должно вернуть #SMSATRUN: 1,1.
SMS доходит, но остаётся во «Входящих» модема как обычное сообщение Отправитель не в белом списке, либо номер записан в другом формате. Всегда используйте международный формат с +: "+79999999999", а не "89999999999".
AT#SMSATRUNCFG отвечает ERROR Служба SMS AT RUN или Event Monitor включена, либо задан недопустимый <instance> (допустимо 2–5). Выполните AT#SMSATRUN=0, задайте параметры и включите службу снова.
Модем неожиданно перезагрузился после SMS-команды Команда не уложилась в <timeout> из AT#SMSATRUNCFG — по его истечении модуль перезагружается. Увеличьте тайм-аут или разбейте запрос на более короткие команды.
Команда настройки порта (AT+ICF, AT+IPR и т. п.) ответила OK, но ничего не изменилось Команда применилась к внутреннему интерфейсу службы, а не к физическому порту. Выполните её локально (см. раздел «Настройки порта и отдельный AT-интерфейс»).
Команда выполняется, но ответ пустой или обрезан Ответ длиннее допустимой цепочки SMS. Разбейте запрос на несколько коротких команд.
Одна конкретная команда стабильно даёт ошибку Конфликт с SMS-службой — задайте задержку через AT#ATRUNDELAY.
Команды с символами \, ^, {, }, [, ], ~, | не проходят Эти символы есть только в расширенной таблице 7-битного алфавита GSM, и часть телефонов и SMS-шлюзов передаёт их некорректно. Попробуйте отправить команду с другого устройства или через шлюз, поддерживающий 8-битные SMS.

Частые вопросы

1. Нужен ли интернет или активный GPRS-канал?

Нет. Достаточно регистрации в сети и работающей услуги SMS. Именно поэтому SMS AT RUN остаётся рабочим инструментом, когда передача данных недоступна.

2. Сколько номеров можно добавить в белый список?

До 8 записей, из которых не более 2 могут быть паролями. Одна запись с маской покрывает целую группу номеров.

3. Останется ли служба включённой после отключения питания?

Да. Состояние службы и её параметры хранятся в энергонезависимой памяти и восстанавливаются при старте, команда AT&W для этого не нужна. Проверить можно по шагу 4.

4. Можно ли по SMS поменять скорость или чётность порта?

Нет. Команды из SMS выполняются на отдельном внутреннем AT-интерфейсе, и настройки порта, заданные по SMS, применяются к нему, а не к физическому UART. Скорость (AT+IPR), чётность (AT+ICF) и управление потоком меняйте локально.

5. Что происходит с командными SMS после выполнения?

Модем распознаёт их, выполняет и удаляет — память SMS не забивается.

6. Как полностью отключить службу?

Локально в терминале: AT#SMSATRUN=0. По SMS отключать не рекомендуется — после этого удалённое управление станет недоступно.

7. Я отправил команду, но модем не ответил. Он завис?

Не обязательно. Сначала проверьте, нет ли команды в списке тех, что не возвращают ответ (AT#REBOOT, AT#SHDN, всё, что начинается с HAT) или требуют приглашения ввода. Затем отправьте заведомо безопасный запрос AT+CSQ. Если и он молчит — вероятно, проблема со связью, балансом или питанием устройства.


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