SMS (скор. Від англ. Short Messaging Service - «служба коротких повідомлень») - один з кращих способів доставки короткої інформації в текстовій формі.
Використання SMS дозволяє вирішувати наступні завдання:
- інформація про події для швидкого реагування.
Для взаємодії з модемом використовуються АТ-команди. Даний формат підтримується більшістю сучасних модемів. Модем підключається до комп'ютера через COM порт, фізичний або віртуальний. При підключенні через віртуальний порт, як канал зв'язку можуть використовуватися, наприклад, USB або Bluetooth.
АТ-команди можуть бути оброблені модемом тільки коли він знаходиться в командному режимі. Більшість модемів переходить в командний режим відразу при включенні. Введення команд в режимі безпосередньої роботи модему розпізнається самим модемом як введення даних. Прийняті команди підтверджуються висновком повідомлення [Ok] на термінал.
Більшість АТ команд (крім двох) починаються із префікса at. Винятком є escape послідовність +++ і команда повтору /. Команди нечутливі до регістру. Максимальний розмір (не рахуючи пробіли і символи повернення каретки) команди становить 39 символів.
АТ команди для роботи з SMS
+++ - escape послідовність. Використовується для перекладу модему з режиму з'єднання зв'язку в командний режим;
o - переклад в online-режим, використовується для відновлення зв'язку після введення escape послідовності;
/ - повтор останньої введеної команди;
AT + CMGF = * - установка режиму роботи, * - 0 для цифрового режиму, або 1 для текстового. Відправлення повідомлень в кирилиці можлива через цифровий режим з попередньої перекодуванням тексту в UCS.
AT + CMGS = * - відправка SMS повідомлень, * - текст повідомлення в форматі встановленому командою AT + CMGF, в текстовому режимі використовується даний формат:
AT + CMGS = [номер_получателя] [Enter]
[Текст_сообщенія] [Ctrl + Z]
Для передачі повідомлення в цифровому режимі використовується формат PDU:
AT + CMGS = [довжина повідомлення] [Enter]
[Номер SMS центру] [стан повідомлення] [кількість успішно переданих] [довжина і номер відправника] [довжина номера одержувача] [формат номера] [номер одержувача] [ідентифікатор протоколу] [save sms] [кодування] [термін доставки повідомлення] [ довжина тексту] [текст] [Ctrl + Z]
Пояснення до полів:
[Довжина повідомлення] - довжина всього отриманого повідомлення в байтах;
[Enter] - переклад каретки, в шестнадцетірічном вигляді одно 0x0D;
[Номер SMS центру] - довжина номера і номер SMS центру. 00 - використовувати номер з налаштувань вшитих в SIM карту;
[Стан повідомлення] - 11 для повідомлення, що відправляється, 00 для прийнятого;
[Кількість успішно переданих] - встановлюється пристроєм, спочатку має бути 00;
[Довжина і номер відправника] - довжина номера і номер відправника. 00 - використовувати значення за замовчуванням;
[Довжина номера одержувача] - довжина номера одержувача;
[Формат номера] - 91 для міжнародного формату, 81 для місцевого;
[Номер одержувача] - номер одержувача у форматі PDU;
[Ідентифікатор протоколу] - для SMS дорівнює 00;
[Save sms] - 0 - для збереження повідомлення, 1 - повідомлення виводиться на екран (flash sms);
[Кодування] - 0 - латиниця, 1 - кирилиця;
[Термін доставки повідомлення] - термін доставки повідомлення, по закінченню часу якщо повідомлення не буде доставлене, то воно буде знищено, вказується SMSC час;
[Довжина тексту] - довжина тексту повідомлення;
[Текст] - текст повідомлення переведений в формат USC2;
[Ctrl + Z] - кінець команди, в шістнадцятковому вигляді одно 26.
Всі чисельні значення (довжини рядків) передаються в шістнадцятковій системі числення.
Команда відправки повідомлення «Hello world!" На номер 79876543210 в текстовому режимі, має вигляд:
Hello world! [Ctrl + Z]
Для відправки такого повідомлення на той же номер, але використовуючи цифровий режим, потрібно передати в модем:
AT + CMGL = * - читання повідомлень з пам'яті модему, * - одне з п'яти значень, в залежності від режиму (CMGF) використовується текстовий або цифровий параметр, значення параметрів в Таблиці 1;
AT + CMGD = * - видалення повідомлення електронної пошти було модему, * - номер повідомлення.
Параметри командиAT + CMGL
При отриманні повідомлення в цифровому режимі воно має вигляд:
[Номер SMS центру] [стан повідомлення] [довжина і номер відправника] [ідентифікатор протоколу] [кодування] [довжина тексту] [текст]
Від вихідного повідомлення відрізняється: стан повідомлення одно 00, відсутні такі поля, як номер одержувача і поля пов'язані з ним, поле save sms, і поле часу доставки повідомлення.
Розглянемо основні моменти практичної реалізації. Як приклад я буду використовувати код на Java.
Для підключення до пристрою використовується клас jssc.SerialPort.SerialPort, при ініціалізації об'єкта в конструктор передається рядок з назвою порту. При підключенні через порт COM4:
SerialPort serialPort = new SerialPort ( "COM4");
Потім відкривається порт і налаштовується підключення:
Для передачі команд в пристрій використовуємо метод writeString об'єкта SerialPort, наприклад установка режиму відправки повідомлення:
char Enter = 0x0D; // Сімволпереводакареткі serialPort.writeString ( "AT + CMGF = 0" + Enter);
privatestatic String reversePhone (String phone)
if (phone.length ()% 2 == 1)
String phoneRev = "";