Немного ознакомимся что же такое SMS(СМС) сообщение.
SMS (СМС — кириллицей) - (Short Message Service — "служба коротких сообщений"). Технология, позволяющая осуществлять приём и передачу коротких текстовых сообщений с помощью устройств включающих в себя модуль модема. Входит в стандарты сотовой связи.
Текст СМС может состоять из алфавитно-цифровых символов. Максимальный размер сообщения в стандарте GSM - 140 байт (1120 бит).
Таким образом, при использовании 7-битной кодировки (латинский алфавит и цифры) можно отправлять сообщения длиной до 160 символов.
При использовании 8-битной кодировки (немецкий, французский язык) можно отправлять сообщения длиной до 140 символов.
Для поддержки других национальных алфавитов (китайского, арабского, русского и др.) используется 2-байтовая (16-битная) кодировка UCS-2.
Таким образом, SMS, написанное кириллицей, не может превышать 70 знаков.
SMS-сообщения можно отправлять в двух форматах – текстовом и PDU (Packet Data Unit - единица/блок/модуль пакетных данных).
Текстовый формат чрезвычайно прост и везде достаточно подробно описан. Но из-за своей простоты он содержит несколько ограничений. Например, из текстового режима нельзя отправить сообщения русскими буквами. Кроме того, в текстовом режиме нельзя управлять параметрами сообщения, такими, например, как его тип. Некоторые модемы вообще не поддерживают текстовый режим.
Список АТ команд:
AT+CMGF= - установка режима работы, 0 для цифрового режима, или 1 для текстового.
AT+CMGS= - отправка СМС сообщения
Существуют несколько способов отправки СМС:
- В ручную используя АТ команды и терминальное ПО
- Используя специализированное ПО по отправке СМС сообщений
1. Ручной режим отправки СМС через терминальное ПО
Как подавать АТ команды: Статья
Терминальное ПО: Статья
1.1. Текстовый режим
Текстовый режим достаточно прост. Рассмотрим отправку СМС через программу Hterm на примере модема TELEOFIS RX301-R4
Проверим, какой режим установлен на данный момент:
AT+CMGF?
+CMGF: 0
Ответ 0 означает, что модем работает через PDU режим. Переведем в текстовый режим командой:
AT+CMGF=1
OK
Зададим номер телефона на который будем отправлять СМС
AT+CMGS="89514562536"
>
Примечание: В зависимости от модели модуля, номер нужно вводить, либо в кавычках, как в примере, либо без кавычек!
В ответ увидим символ приглашения ">". Это означает, что уже можно набирать текст сообщения. Но как Вы помните, только на латинице!!!
Введем текст "Hello world" но без переноса строки. В программе Hterm нужно убрать символ перевода каретки (с CR на None).
Отправка СМС завершается после подачи комбинации клавиш Ctrl+Z. Но для того, чтобы отправить её в модем необходимо использовать HEX кодировку этой комбинации 1A
> Hello world
+CMGS: 4
В других терминальных программах возможно будет немного по другому. Но основной принцип и последовательность действий не меняются.
1.2. PDU режим
По сути, это просто текстовая строка, состоящая из шестнадцатеричных байтов, которая содержит в себе все параметры сообщения.
Сообщение в PDU-режиме представляет собой такую хитрую формулу:
SMS = SCA+TPDU
где,
SMS — это целиком сформированное сообщение
SCA – это Service Center Address — номер телефона SMS-центра, через который отправляется SMS
TPDU – это Transport Protocol Data Unit – единица данных транспортного протокола. Именно этот блок содержит номер получателя, текст сообщения и несколько служебных полей.
Рассмотрим отправку СМС через программу Hterm на примере модема TELEOFIS RX301-R4
Устанавливаем режим PDU
AT+CMGF=0
OK
Т.к. в PDU режиме мы уже можем отправлять СМС на кириллице, попробуем отправить слово "Привет!!!"
Для перекодирования текста в PDU воспользуемся онлайн конвертером: Конвертер сообщений
Заполняем поля:
Receiver: - номер на который отправляем сообщение. (обязательно указывать + в начале Т.е. Российский номер будет начинаться с +7)
Alphabet Size: - 7 для латиницы, 16 для кириллицы.
Text: - текст сообщения
Все остальные пункты выключаем или стираем.
Нажимаем кнопку Convert и в поле PDU Message Entry/Display видим необходимый результат для отправки.
В начале мы подаем длину сообщения командой AT+CMGS. Эта команда требует пояснения: Длина сообщения в данном случае подразумевает не длину всего сообщения, а длину блока TPDU!
AT+CMGS=31
>
Видим символ строки приглашения для ввода. Теперь нам нужно ввести закодированную строку в PDU формате
0001000B919715542635F6000812041F04400438043204350442002100210021
И следом отправляем завершающую комбинацию Ctrl+Z или в HEX кодировке 1A
Если все хорошо, получим в ответ индекс отправленного сообщения:
+CMGS: 5
Таким образом только PDU режим позволяет отправлять СМС в русской символике.
Соответственно если Вы пишете собственное ПО, которое должно рассылать СМС на русском языке, Вам необходимо внести в него возможность преобразования сообщения в PDU режим.
Или же можно воспользоваться каким-либо сторонним ПО.
2. Получение СМС сообщений
У модемов есть несколько видов памяти, в которых могут храниться SMS-сообщения.
Память модема делится на три логических секции:
- первая для просмотра, чтения и удаления сообщений
- вторая для сохранения и отправки исходящих сообщений
- третья для только что полученных сообщений
Кроме логического деления на секции у модема ещё есть несколько видов физической памяти:
- память SIM-карты
- внутренняя память модема
- прочее.
Каждая физическая память назначается определенной логической секции. Таким образом, можно назначить память SIM-карты для чтения и удаления сообщений, а память модема для написания и отправки.
Каждая область физической памяти имеет свое имя, для того, чтобы ей можно было оперировать в командах модема. Вот несколько возможных имен областей:
SM – память SIM-карты
ME – память модема/телефона
MT – это общая память SIM-карты и модема, т.е. MT=SM+ME
BM – память для широковещательных сообщений сети
SR – память для отчётов (о доставке и т.п.)
Для чтения сообщений нам понадобится только SM и ME память, либо MT, которая включает в себя и SM, и ME
Для настройки памяти модема существует специальная AT-команда:
AT+CPMS
AT+CPMS? - узнать, какая область назначена для какой секции
+CPMS: "MT",29,255,"ME",29,255,"ME",29,255
Самое главное для чтения входящих сообщений – это первая секция
Нам нужно настроить первую секцию памяти (для чтения и удаления) и назначить ей соответствующую физическую область памяти. Делается это так:
AT+CPMS="MT"
+CPMS: 29,255,29,255,29,255
Цифры означают количество сообщений в памяти (например 29) и максимально допустимое количество сообщений (например 255) в каждой секции.
Когда область памяти установлена, можно приступить к чтению сообщения.
Для чтения сообщений существует 2 команды: AT+CMGL и AT+CMGR. Разница их в том, что первая команда выдаёт сразу все сохраненные в памяти сообщения, а вторая – только одно сообщение, индекс которого передается ей в параметрах. Индекс начинается с нуля.
AT+CMGL=<status>
где <status>:
0 - Полученные непрочитанные сообщения
1 - Полученные прочитанные сообщения
2 - Сохраненные не отправленные сообщения
3 - Сохраненные отправленные сообщения
4 - Все сообщения
AT+CMGR=<index>
где <index> – индекс сохраненного сообщения.
Попробуем прочитать сообщение с индексом 0
AT+CMGR=0
+CMGR: 1,"",155
07919762929090F040038111F10008511121304343218C0500033F0302043E0431044904380442044C00200431043B04380437043A0438043C0020043E00200412043004480435043C0020043D043E0432043E043C0020043D043E043C0435044004350020043F04400438002004370432043E043D043A04350020043D043000200441044204300440044B0439002E0020041F043E04340440043E0431043D04350435
OK
Как можно видеть, сообщение хранится только в PDU формате
Если переключиться в текстовый режим измениться только заголовок сообщения, а само сообщение так и останется в PDU формате
+CMGR: "REC READ","111","","15/11/12,03:34:34+12
Используем онлайн конвертер для преобразования сообщения: Конвертер сообщений
Добавляем PDU сообщение в окно PDU Message Entry/Display и нажимаем Convert
В поле Result мы увидим раскодированное сообщение:
SMS DELIVER (receive)
Receipt requested: no
SMSC: 79262909090
Sender: 111
TOA: 81 unknown, Numbering Plan: unknown
TimeStamp: 12/11/15 03:34:34 GMT +03:00
TP-PID: 00
TP-DCS: 08
TP-DCS-desc: Uncompressed Text, No class
Alphabet: UCS2 (16bit)
User Data Header: 05 00 03 3F 03 02
общить близким о Вашем новом номере при звонке на старый. Подробнее
Length: 70
Т.е. получать СМС мы можем исключительно в PDU формате.
3. Удаление СМС сообщений
Для удаления СМС сообщений используется команда:
AT+CMGD=<index>[,<flag>]
,где
<index> – индекс сообщения в памяти.
<flag> - удаление СМС сообщения по критерию (не обязательный параметр)
Критерии:
0 — удалить сообщение по индексу (по умолчанию)
1 — удалить все прочитанные сообщения
2 — удалить прочитанные и отправленные сообщения
3 — удалить прочитанные, отправленные и не отправленные сообщения
4 — удалить все сообщения
Например для удаления всех сообщений из модема используем команду:
AT+CMGD=1,4
4. Отправка и получение СМС сообщений через специализированное ПО
Т.к. при ручной отправке и получении СМС мы имеем дело с PDU режимом, сообщения в котором еще необходимо перекодировать. Отправлять и получать сообщения становится неудобно.
Для облегчения этой задачи можно использовать специализированное ПО.
Примером могут послужить две программы:
SMSGate - данное ПО платное!
Gnokii - данное ПО бесплатно для использования.
4.1. SMSGate
Для получения более подробной информации изучите руководство по данному ПО:
4.2. Gnokii
Данное ПО в большинстве своем работает в операционной системе Linux.
Есть версии и для Windows, но режим работы остается таким же. Т.е. из консоли.
Можно рассмотреть пример команды отправки СМС и настройку под модем:
В Linux модем отображается как файл устройства, например для USB модема TELEOFIS RX301-R4 может выглядеть так:
/dev/ttyUSB0
Настройки хранятся в файле /etc/gnokiirc и могут выглядеть таким образом:
[global]
port = /dev/ttyUSB0
model = AT
initlength = default
connection = serial
use_locking = no
serial_baudrate = 115200
smsc_timeout = 10
Пример команды по отправке СМС:
echo 'Hello!!!' | gnokii --sendsms +79260000000
Получить больше информации по работе данного приложения Вы можете на официальном сайте данного приложения: http://gnokii.org/
В сети присутствуют совершенно различные системы по отправке и приему СМС сообщений. В том числе и онлайн сервисы.
Также обладая необходимыми знаниями, Вы можете написать собственное ПО для отправки и приёма СМС сообщений.
5. Диагностика неисправностей при отправке или получении СМС
В процессе отправки или приема СМС сообщений могут проявляться различные ошибки.
Основные известные проблемы:
+CMS ERROR: 304 (Invalid PDU mode parameter) | Проверьте правильность ввода содержимого PDU. Попробуйте добавить номер центра обслуживания (SMSC) |
+CMS ERROR: 500 (Unknown error) | Этот код ошибки формируется при проблемах на самых разных стадиях отправки сообщения, поэтому может быть вызван разными причинами: - модем не зарегистрирован в сети - на счету недостаточно средств для передачи сообщения - сеть испытывает перегрузку и не может отправить сообщение в данный момент - задан неправильный номер центра обслуживания - задан неправильный номер абонента - программа некорректно работает с данным модемом (При использовании ПО для отправки) |
+CMS ERROR 330 (SMSC address unknown) | Часто встречается с 3G-модемами, это означает, что номер центра обслуживания не определен |
+CMS ERROR 331 (No network service) | Проверьте уровень сигнала. Баланс на СИМ карте. Свяжитесь с оператором мобильной связи для выявления причины. |
Дополнительная информация:
GSM модемы TELEOFIS серии RX. Руководство по эксплуатации
Ссылки по теме: