SMS из консоли под Linux, учимся отправлять sms
bur80
Profi
Всем привет !
Столкнулся с необходимостью создания собственного GSM-шлюза с целью отправки служебный сообщений с сервера. Порывшись в интернете нашёл несколько вариантов отправки. Вариант с отправкой посредством программ типа gnokii я отбросил, так как интересует отправка только из консоли. Утилита sms_client заточена под буржуйских провайдеров и, даже разобравшись с настройкой SMS-центра у меня отправить sms`ку на свой телефон так и не удалось - вместо отправки sms программа зачем то звонит на номер SMS-центра но никак не хочет отправлять сообщение.
Помогите, пожалуйста разобраться.
___________
Понедельник начинается в субботу.©
Всё относительно просто. SMS, на основании стандартов ESTI 07.07 & 05.07 отправляются посредством AT-команд. Устройство, через которое шлём, должно присоединяться через COM-порт, либо его аналог (USB-конвертер). Далее, на COM-порт (/dev/ttyS*) натравливаем minicom. В консоли minicom'а вручную даём команды. Например, отправка будет выглядеть как:
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
___________
А тебя беспокоит куда я надел вязаную кипу... эээ... "шапочку"? Ты хочешь поговорить об этом?
Получилось отправить sms через minicom, спасибо за команду для отправки:
AT+CMGS="+номер-телефона-куда-отправляем"<CR>Test of SMS<ctrl-Z>
Работает, если предварительно выполнить:
AT+CMGF=1
Думаю, что тоже самое можно реализовать вида:
echo 'at+cmgs="+7xxxxxxxxxx"...'
Но, тут возникает одно НО. Как реализовать в строке символы <CR> и <ctrl+z> ?
___________
Понедельник начинается в субботу.©
Мяут-Настоящий (Online)
Full Member
echo -e '\x0a'
Это CR (шестнадцатеричный код).
Ctrl-Z думаю аналогично - главное оба кода знать.
___________
Is six afraid of seven, ‘cause seven eight nine? (c)
Нашёл возможное решение:
Цитата
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
Оригинал находится здесь.
Не работает
Мой вариант таков (без php):
#!/bin/bash
lf="\x0013"
d="/dev/rfcomm0"
n="+7913ххххххх"
m=`echo "$2" | sed 's/+/ /g'`
#echo -e "AT$lf" > $d
echo -e "AT+CMGF=1$lf" > $d
sleep 2
echo -e "AT+CMGS=$n$lf" > $d
sleep 2
echo -e "text$lf\x0026" > $d
#echo "\x1A" > $d
#echo $d
exit
Проглатывает и тишина. Что не так делаю ?
Добавлено 24.06.10, 13:49
Есть идея почему это не работает. Думаю, что после посылки команды посредством echo связь с модемом прерывается (у меня связь через голубой зуб, что накладывает свои особенности) и поэтому выходит что команда инициализации at+cmgf=1 должна быть выполнена заново. Точнее сказать она должна быть выполнена до команды посылки самой sms`ки. У нас же, между выполнением команд пауза и если её убрать то получаем ошибку ввода/вывода. Я прав ?
___________
Понедельник начинается в субботу.©
Цитата
Точнее сказать она должна быть выполнена до команды посылки самой sms`ки.
Эммм... Вообще-то, я могу заметить что лучше один раз настроить параметры отправки/приёма/чтения/индикации о поступлении новых сообщениий/... и сохранить профиль в девайсе, чем каждый раз зпбивать это командами.
Цитата
У нас же, между выполнением команд пауза и если её убрать то получаем ошибку ввода/вывода. Я прав ?
В принципе, да. Но надо посмотреть... Там оговорено, что возвращается либо OK, либо что-то ещё. В принципе, посмотри в документе. Там расписано. Если ты пропускаешь возвращаемое значение, то фигня может приключиться.
Кстати, забей на PHP (овно полнейшее) и на bash. Либо используй скрипт на expect (этот язык для таких вещей в принципе и писался, если ты видел когда-нибудь в Win98 какие-нибудь скрипты по "подключению к Интернет", то оно очень похоже. Или "автоматизаторы" для работы с ftp...). Либо напиши простенькую программулину (особенно если в дальнейшем использовать веб-форму), которая в аргументах ком. строки получает номер куда слать и текст (как минимум, но можно ещё понаворотить). Причём пиши, подглядывая в HOWTO выше.
Так проще.
Цитата
Это CR (шестнадцатеричный код).
Ctrl-Z думаю аналогично - главное оба кода знать.
Да можно, в принципе, и терминальными кодами обойтись -- <cr> это ^M, а Ctrl-Z это ^Z. Это же терминал!
___________
А тебя беспокоит куда я надел вязаную кипу... эээ... "шапочку"? Ты хочешь поговорить об этом?
Проблема решена юзанием gammu.
___________
Понедельник начинается в субботу.©
Nadz Goldman
Да эту тему уже в фак надо давно!
___________
Позволь другому быть другим.
# Северный ветер - Мои фотоальбомы.
Profi
deil
Moderator
А ещё есть gnokii !
___________
Я не могу тебя забыть, ты снишься мне ночами, твой нежный запах, вкус и цвет стоят перед глазами.
Когда тебя со мною нет, так тоскливо, и без тебя я не могу, мое ПИВО...
з.ы. аренда VPS от Дейла
Nadz Goldman
Цитата (deil @ 13.08.10, 17:20)
Profi
А ещё есть gnokii !
Перестаньте баянить.
Это мертво уже много поколений.
___________
Позволь другому быть другим.
# Северный ветер - Мои фотоальбомы.
Вот здесь есть решение проблемы отправки и приема SMS-сообщений с сервера с помощью пакета smstools
Nadz Goldman
Не забывайте про семеновские PDU
___________
Позволь другому быть другим.
# Северный ветер - Мои фотоальбомы.
Profi