SMS из консоли под Linux, учимся отправлять sms

bur80

Profi

Сообщ. #1 от 24.06.10, 07:54

*
*
*
*
*

Всем привет !

Столкнулся с необходимостью создания собственного GSM-шлюза с целью отправки служебный сообщений с сервера. Порывшись в интернете нашёл несколько вариантов отправки. Вариант с отправкой посредством программ типа gnokii я отбросил, так как интересует отправка только из консоли. Утилита sms_client заточена под буржуйских провайдеров и, даже разобравшись с настройкой SMS-центра у меня отправить sms`ку на свой телефон так и не удалось - вместо отправки sms программа зачем то звонит на номер SMS-центра но никак не хочет отправлять сообщение.

Помогите, пожалуйста разобраться.

___________

Понедельник начинается в субботу.©

Профиль · PM

Поощрения: 1 Dgm

Рейтинг (т): 9

ЦарьТроллей

Full Member

Сообщ. #2 от 24.06.10, 08:14

*
*
*

Всё относительно просто. SMS, на основании стандартов ESTI 07.07 & 05.07 отправляются посредством AT-команд. Устройство, через которое шлём, должно присоединяться через COM-порт, либо его аналог (USB-конвертер). Далее, на COM-порт (/dev/ttyS*) натравливаем minicom. В консоли minicom'а вручную даём команды. Например, отправка будет выглядеть как:

Профиль · PM

Поощрения: 1 Dgm

Рейтинг (т): 15

Expanded
Wrap disabled
    1. AT+CMGS="+номер-телефона-куда-отправляем"<CR>Test of SMS<ctrl-Z>

В подробностях, с деталями и картинками либо в перечисленных выше стандартах, но их относительно сложно достать, либо http://www.communica.se/multitech/gprs_at.pdf (ЕМНИП, страница 50), либо http://www.traud.de/gsm/index.html (под оффтоп, но понять о чём речь можно). Сердечно рекомендую первый документ.

P.S. В качестве устройства отправки использовать можно практически любое устройство -- телефон, GSM/GPRS-модуль во встраиваемом или отдельном исполнении. Практически все девайсы поддерживают эти стандарты. Команды так же будут одинаковы для всех девайсов. Ибо это стандарты.

Добавлено 24.06.10, 08:18

P.P.S. Если надо софтом отправлять/принимать/читать (разбирать) сообщения, то просто эмулируем COM-порт (эта тема давным-давно отпинана -> http://tldp.org/HOWTO/Serial-Programming-HOWTO/ ). И вводим данные со спец. символами (тот же <cr> есть "^M").

Сообщение отредактировано: ЦарьТроллей - 24.06.10, 08:18

___________

А тебя беспокоит куда я надел вязаную кипу... эээ... "шапочку"? Ты хочешь поговорить об этом?

bur80

Profi

Сообщ. #3 от 24.06.10, 10:50

*
*
*
*
*

Получилось отправить sms через minicom, спасибо за команду для отправки:

Профиль · PM

Поощрения: 1 Dgm

Рейтинг (т): 9

Expanded
Wrap disabled
    1. AT+CMGS="+номер-телефона-куда-отправляем"<CR>Test of SMS<ctrl-Z>

Работает, если предварительно выполнить:

Expanded
Wrap disabled
    1. AT+CMGF=1

Думаю, что тоже самое можно реализовать вида:

Expanded
Wrap disabled
    1. echo 'at+cmgs="+7xxxxxxxxxx"...'

Но, тут возникает одно НО. Как реализовать в строке символы <CR> и <ctrl+z> ?

:wall:

___________

Понедельник начинается в субботу.©

Full Member

Сообщ. #4 от 24.06.10, 11:27

Мяут-Настоящий (Online)

Expanded
Wrap disabled

Full Member

    1. echo -e '\x0a'

Это CR (шестнадцатеричный код).

Ctrl-Z думаю аналогично - главное оба кода знать.

___________

Is six afraid of seven, ‘cause seven eight nine? (c)

*
*
*

Профиль · PM

Поощрения: 3 Dgm

Рейтинг (т): 18

bur80

Profi

Сообщ. #5 от 24.06.10, 12:52

*
*
*
*
*

Нашёл возможное решение:

Цитата

1) php-script

$num=$_GET["num"];

$msg=$_GET["msg"];

exec("./wins-sms.sh $num '".urlencode($msg)."'");

2) shell-script

#!/bin/bash

lf="\r"

d=/dev/ttyACM0

n=+$1

m=`echo "$2" | sed 's/+/ /g'`

echo -e "AT$lf" > $d

echo -e "AT+CMGF=1$lf" > $d

sleep 1

echo -e "AT+CMGS=$n$lf" > $d

sleep 2

echo -e "$m$lf" > $d

echo -e "\0032" > $d

exit

Оригинал находится здесь.

Не работает

Профиль · PM

Поощрения: 1 Dgm

Рейтинг (т): 9

:no-sad:

Мой вариант таков (без php):

Expanded
Wrap disabled
    1. #!/bin/bash

    2. lf="\x0013"

    3. d="/dev/rfcomm0"

    4. n="+7913ххххххх"

    5. m=`echo "$2" | sed 's/+/ /g'`

    6. #echo -e "AT$lf" > $d

    7. echo -e "AT+CMGF=1$lf" > $d

    8. sleep 2

    9. echo -e "AT+CMGS=$n$lf" > $d

    10. sleep 2

    11. echo -e "text$lf\x0026" > $d

    12. #echo "\x1A" > $d

    13. #echo $d

    14. exit

Проглатывает и тишина. Что не так делаю ?

Добавлено 24.06.10, 13:49

Есть идея почему это не работает. Думаю, что после посылки команды посредством echo связь с модемом прерывается (у меня связь через голубой зуб, что накладывает свои особенности) и поэтому выходит что команда инициализации at+cmgf=1 должна быть выполнена заново. Точнее сказать она должна быть выполнена до команды посылки самой sms`ки. У нас же, между выполнением команд пауза и если её убрать то получаем ошибку ввода/вывода. Я прав ?

___________

Понедельник начинается в субботу.©

ЦарьТроллей

Full Member

Сообщ. #6 от 24.06.10, 15:11

*
*
*

Цитата

Точнее сказать она должна быть выполнена до команды посылки самой sms`ки.

Эммм... Вообще-то, я могу заметить что лучше один раз настроить параметры отправки/приёма/чтения/индикации о поступлении новых сообщениий/... и сохранить профиль в девайсе, чем каждый раз зпбивать это командами.

Цитата

У нас же, между выполнением команд пауза и если её убрать то получаем ошибку ввода/вывода. Я прав ?

В принципе, да. Но надо посмотреть... Там оговорено, что возвращается либо OK, либо что-то ещё. В принципе, посмотри в документе. Там расписано. Если ты пропускаешь возвращаемое значение, то фигня может приключиться.

Кстати, забей на PHP (овно полнейшее) и на bash. Либо используй скрипт на expect (этот язык для таких вещей в принципе и писался, если ты видел когда-нибудь в Win98 какие-нибудь скрипты по "подключению к Интернет", то оно очень похоже. Или "автоматизаторы" для работы с ftp...). Либо напиши простенькую программулину (особенно если в дальнейшем использовать веб-форму), которая в аргументах ком. строки получает номер куда слать и текст (как минимум, но можно ещё понаворотить). Причём пиши, подглядывая в HOWTO выше.

Профиль · PM

Поощрения: 1 Dgm

Рейтинг (т): 15

;)

Так проще.

Цитата

Это CR (шестнадцатеричный код).

Ctrl-Z думаю аналогично - главное оба кода знать.

Да можно, в принципе, и терминальными кодами обойтись -- <cr> это ^M, а Ctrl-Z это ^Z. Это же терминал!

___________

А тебя беспокоит куда я надел вязаную кипу... эээ... "шапочку"? Ты хочешь поговорить об этом?

bur80

Profi

Сообщ. #7 от 5.08.10, 09:00

:)
8-)
*
*
*
*
*

Проблема решена юзанием gammu.

___________

Понедельник начинается в субботу.©

Профиль · PM

Поощрения: 1 Dgm

Рейтинг (т): 9

Profi

Сообщ. #8 от 5.08.10, 10:27

Nadz Goldman

Да эту тему уже в фак надо давно!

___________

Позволь другому быть другим.

# Северный ветер - Мои фотоальбомы.

Profi

*
*
*
*
*

Профиль · PM

Поощрения: 4 Dgm

Рейтинг (т): 24

Master

Сообщ. #9 от 13.08.10, 17:20

deil

:lol:

Moderator

А ещё есть gnokii !

___________

Я не могу тебя забыть, ты снишься мне ночами, твой нежный запах, вкус и цвет стоят перед глазами.

Когда тебя со мною нет, так тоскливо, и без тебя я не могу, мое ПИВО...

з.ы. аренда VPS от Дейла

*
*
*
*
*
*

Профиль · PM

Рейтинг (т): 46

Profi

Сообщ. #10 от 13.08.10, 22:20

Nadz Goldman

Цитата (deil @ 13.08.10, 17:20)

:lol:

Profi

А ещё есть gnokii !

Перестаньте баянить.

Это мертво уже много поколений.

___________

Позволь другому быть другим.

# Северный ветер - Мои фотоальбомы.

*
*
*
*
*

Профиль · PM

Поощрения: 4 Dgm

Рейтинг (т): 24

mrcat

Newbie

Профиль · PM

Рейтинг (т): 1

Сообщ. #11 от 14.08.10, 12:24

Вот здесь есть решение проблемы отправки и приема SMS-сообщений с сервера с помощью пакета smstools

http://mrcat.ru/sms-send-receive

Profi

Сообщ. #12 от 14.08.10, 13:38

Nadz Goldman

Не забывайте про семеновские PDU

___________

Позволь другому быть другим.

# Северный ветер - Мои фотоальбомы.

Profi

*
*
*
*
*

Профиль · PM

Поощрения: 4 Dgm

Рейтинг (т): 24