Мы — долго запрягаем, быстро ездим, и сильно тормозим.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
www.lissyara.su
—> статьи
—> FreeBSD
|
|
|
Теперь цепляем телефон. Как я понял, проблем при подключении датакабеля через обычный comm-port не возникает, но в данной ситуации кабель USB. Чип используется PL2303, в FreeBSD поддерживается. Проверяем:
|
если не видим чего-то подобного:
212 ucom 223 uhub/uplcom |
берем бубен и собираем ядро, добавив в конфигурацию следующиме опции:
|
как это сделать очень хорошо расписано здесь: http://www.lissyara.su/?id=1072, поэтому, повторятся не буду (а можно и отдельно модули собрать, но это тема другой статьи).
ВНИМАНИЕ! Без установленных модулей кабель тоже будет определятся как /dev/ugenX, но работать не будет.
Если все модули на месте — подключаем кабель и смотрим:
~> ls -lah /dev/cuaU* crw-rw---- 1 uucp dialer 0, 69 28 окт 15:01 /dev/cuaU0 crw-rw---- 1 uucp dialer 0, 70 24 окт 10:27 /dev/cuaU0.init crw-rw---- 1 uucp dialer 0, 71 24 окт 10:27 /dev/cuaU0.lock |
Кабель увидели, можно подключать телефон и приступать к настройке SMS-шлюза.
Так как по умолчанию smsd стартует от рута, а это не тру, создаем пользователя:
|
теперь настраиваем SMS Tools, файл /usr/local/etc/smsd.conf
|
По минимуму достаточно, уже будет работать.
Еще пару движений:
в /usr/local/etc/rc.d/smsd
|
меняем на
|
|
смотрим
~> ps ax | grep smsd 16711 ?? Ss 0:00,00 /usr/local/bin/smsd 16712 ?? S 0:00,01 /usr/local/bin/smsd |
~> tail -f /var/log/smsd.log Oct 28 16:39:40 smsgate smsd: Smsd v3.1.3 started. Oct 28 16:39:40 smsgate smsd: Running as smsd:dialer. Oct 28 16:39:40 smsgate smsd: File mode creation mask: 022 (0644, rw-r--r--). Oct 28 16:39:40 smsgate smsd: Outgoing file checker has started. PID: 16711. Oct 28 16:39:40 smsgate GSM0: GSM0: Modem handler 0 has started. PID: 16712. Oct 28 16:39:40 smsgate GSM0: GSM0: Checking device for incoming SMS Oct 28 16:39:40 smsgate GSM0: GSM0: Checking if modem is ready Oct 28 16:39:40 smsgate GSM0: GSM0: -> AT^M Oct 28 16:39:40 smsgate GSM0: GSM0: Command is sent, waiting for the answer Oct 28 16:39:40 smsgate GSM0: GSM0: <- OK Oct 28 16:39:40 smsgate GSM0: GSM0: Pre-initializing modem |
Все завелось, комментируем в конфиге 'logfile', ставим loglevel = 5, в /etc/syslog.conf добавляем:
|
(если надо, после GSM0 через запятую перечисляем все названия модемов из smsd.conf)
в /etc/newsyslog.conf добавляем:
|
Теперь самое вкусное — отправлять эсэмэски.
Ничего сложного, процесс отправки похож на процесс печати, в /var/spool/sms/ есть три каталога:
checked, incoming, outgoing. В каталог outgoing кидаются файлы для отправки, по формату очень похожие на MIME: сначала заголовки, потом, через пустую строку, тело сообщения. Подробнее формат опишу ниже. В пакет входит утилита sendsms, надо добавить пользователя, от которого будут отправлятся sms в группу smsd. Затем пробуем:
|
(обратите внимание, номера вводятся в международном формате но без знака «+»)
И, о Чудо!, через несколько секунд придет желанная SMS. Но мы рано радуемся. Вавилон нас ждет! А точнее — отправка SMS кириллицей. Привычно берем бубен, напильник, и допиливаем "до придания нужной формы". SMSTools умеет обрабатывать события при помощи внешних программ, используем эту возможность и нарисуем скрипт проверки сообщения перед отправкой (за прототип был взят unicode2sms, все скрипты пакета можно найти в /usr/local/share/smstools):
|
добавляем в smsd.conf, в основную часть (до описания модемов):
|
перезапускаем smsd:
|
пробуем: sendsms 79xxxxxxxxx 'Привет! Мы победили Вавилон ?'
ждем...ждем... телефончик — Плюмммм!!! Смотрим... Аллилуя!
Кроме того можно добавить поддержку обработки и других событий (SENT, RECEIVED, FAILED, REPORT, CALL), белый и черный список.
За это отвечают параметры конфигурации:
eventhandler = /path/to/handler
whitelist = /path/to/list
blacklist = /path/to/list
Т.к. гейт не публичный, то чернобелые списки я использовать не стал, а вот обработчик событий написал. Вы можете его найти в приложениях. Это perl-скрипт, достаточно откоменнтированный, чтоб подогнать его под свои нужды.
Теперь вкратце про формат файла сообщений, более полный вольный и сокращенный перевод документации можно найти в приложениях.
Текстовые сообщения
Файл SMS-сообщения похож на файл электронной почты: текстовый файл состоящий из заголовков и содержимого сообщения после пустой строки.
Простой пример:
|
Номер указывается в международном формате но без знака «+». Если необходимо отправить сообщение на короткий номер, то перед номером нужно указать "s".
Расширеный пример:
|
ВАЖНО: Заголовки регистрозависимые.
Можно добавлять свои собственные заголовки. Они игнорируются программой, но не удаляются. Можно, к примеру, привязать к сообщению ключ базы данных добавив заголовок
|
После отправки файл сообщения сохранится в папке отправленных с этим заголовком.
Приложения
Подробное описание многих заголовков можно найти в этом приложении:
|
Скрипт обработки событий и автоматической перекодировки сообщений в кирилице здесь:
|
Справочную информацию по AT-командам для работы с GSM-устройствами можно найти на FTP этого сайта
размещено: 2008-11-10,
последнее обновление: 2009-01-23,
автор: lexy
nikll, 2008-11-10 в 10:14:01
Молодец автор! Так держать!
Хорошая полезная толковая статься без лишней воды.
h0kum, 2008-11-21 в 15:53:02
Интересно
а на прием можно настроить? :-)
lexy, 2008-11-23 в 14:28:47
смотри ответ в форуме
Airatz, 2009-01-19 в 9:54:20
Очень помогла статья. Вот такие изменения предлагаю в Bash скрипт -
"cat $1 | awk '{if(NF==0) {s=1} if(s==0 && NF>0 && \
$0!~/Alphabet:[ \t]*U/){print}}' > $FILE
echo Alphabet: Unicode >> $FILE
cat $1 | awk '{if(NF==0) {s=1} if(s==1){print}}' | iconv -t UCS-2BE >> $FILE"
"cat $1 | awk '{if(NF==0) {s=1} if(s==0 && NF>0 && \
$0!~/Alphabet:[ \t]*U/){print}}' > $FILE
echo Alphabet: Unicode >> $FILE
echo >> $FILE
cat $1 | awk '{if(NF==0) {s=1;next} if(s==1){print}}' | iconv -t UCS-2BE >> $FILE"
с предидущим вариантом smsd всё время писал "... has no text ..."
m4rkell, 2009-01-22 в 15:38:41
Скрипт для отправки в кириллице на пашет, ни тот что в статье ни тот что в каментах, кракозябры приходят и снизу подпись Alphabit: Unicode...кто сделал хоть? Хелп...!
lexy, 2009-01-23 в 9:01:51
точно, был косяк в скрипте, поправил на странице. все из за того, что не подавлялся вывод в grep'е. Этот скрипт у меня используется каждый месяц для отправки более 1000 сообщений, никаких косяков с ним не замечено
Poison, 2009-03-21 в 23:45:15
За статью респект уважуха! нужная вешч!
Далее по теме:
поставил сей софт я, и на те, не отправляется, пишет в лог
smsd: Cannot handle /var/spool/sms/outgoing/send_ce7C75: Access denied.
Решение:
rj45#cat /usr/local/bin/sendsms
#!/bin/sh
# This script send a text sms at the command line by creating
# a sms file in the outgoing queue.
# I use it for testing.
# $1 is the destination phone number
# $2 is the message text
# if you leave $2 or both empty, the script will ask you
DEST=$1
TEXT=$2
if [ -z "$DEST" ]; then
printf "Destination: "
read DEST
fi
if [ -z "$TEXT" ]; then
printf "Text: "
read TEXT
fi
FILE=`mktemp /var/spool/sms/outgoing/send_XXXXXX`
chown uucp ${FILE} #добавил эту строчку
echo "To: $DEST" >> $FILE
echo "" >> $FILE
echo -n "$TEXT" >> $FILE
а дальше все как с татье, на этом все.
poison, 2009-05-04 в 16:59:41
Написал простенькую web морду для сего хозяйства:
rj45# cat /usr/local/www/apache22/http/sms/index.php
<html>
<head>
<title>Send SMS Text Messages</title>
<meta name="Keywords" content="send sms">
<meta name="Description" content="Send free SMS worldwide to any GSM mobile phon e and track message delivery.">
<meta http-equiv="Content-Type" content="text/html; charset=koi8-r">
<!--styles common for ie and nn-->
<link href="./styles.css" rel="stylesheet" type="text/css">
<style type="text/css">
<!— .style1 { color: #FF3333; font-weight: bold; } -->
</style>
</head><body topmargin="0" leftmargin="0" marginheight="0" marginwidth="0">
<table align="center" cellpadding="0" cellspacing="1" width="780">
<tbody>
<tr>
<td style="border: 1px outset black; background-color: rgb(235, 255, 237 );" valign="top">
<div width="100%" style="background-color: rgb(168, 221, 160);">
<center spry:hover="style1" class="style1">
</center>
</div>
<!--div style="border: 0px outset; padding:2x; background-color: white"- ->
<h1>Send SMS Text Messages</h1>
<form method="post" action="sms.php"><div class="usual">
<p>Use this page to send free SMS from your PC to any GSM mobile phone i n the world. Happy txting!</p>
<p>Recipient's mobile phone number in international format
<br>(dashes and spaces are not allowed, only digits matter: 79151234567) :<br>
<input name="phone" value="" size="19" maxlength="40" type="text">   ;
<select name="pb" onChange="if (selectedIndex>0) iphone.value=pb.opt ions[selectedIndex].value">
<option value="" selected="selected"> — Phone book — </option>
</select><br>
<input name="add" type="checkbox">Add this phone into your <a hr ef="./phonebook.php">phone book</a> as
<input name="desc" value="" size="10" maxlength="20" type="text" ></p>
<p>
Send message as flash(message will be displayed on screen of mobile phone, not all models support this option!):
<br>
<select name="flash" size=1>
<option value="no" selected="selected"> - NO - </option>
<option value="yes"> - YES - </option>
</select></p>
<p>Message text, max 140 Latin characters or 70 national characters (Heb rew, Arabic, Cyrillic, etc):<br>
<table>
<tbody>
<tr>
<td>
<textarea name="text" rows="4" cols="50" wrap="v irtual" onKeyPress="len.value=text.value.length" onChange="len.value=text.value. length"></textarea><br>
You entered <input name="len" value="" size="3" disabled="disabled" onFocus="text.focus()" type="text"> characters.
<input name="rus" value="1" type="hidden">
</td>
</tr>
</tbody>
</table>
</p></div>
<p><input value="Send SMS" type="submit"></p><p>
</p><p>By sending SMS messages from this site you agree to the following terms:< /p>
<div sigid="7" style="border: 1px outset ; margin-left: 10px; margin-right: 10px ; background-color: rgb(223, 242, 225);">
<ol>
<li>sms enables you to send free SMS from its site to any cellular phone wo rldwide.</li>
<li>sms
service is provided "as is", there is no gurantee of timely delivery of
all messages to all cellular networks, sms cannot be held
liable for any losses resulted from sms-rj45's failure to deliver
messages.</li>
<li>Information you provide on this page will not be
used for any purpose other than sending SMS message to the designated
phone number, we do not collect or analyze the text of your messages
and destination phone numbers.</li>
<li>We reserve the right to add a small ad to the end of each message you send f rom our site.</li>
</ol>
</div>
</form>
</td>
</tr>
</tbody>
</table>
</body>
</html>
Сам скрипт отправки
rj45# cat /usr/local/www/apache22/http/sms/sms.php
<?php
#$ssms = `/usr/local/bin/sendsms`;
$number = $_POST["phone"];
switch ($_POST["flash"])
{
case "no": $flash = "no";
break;
case "yes": $flash = "yes";
break;
}
$message = $_POST["text"];
$sms = `sendsms $number $flash "$message"`;
shell_exec('$sms');
echo "
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=koi8-r\">
<!--styles common for ie and nn-->
<link href=\"./styles.css\" rel=\"stylesheet\" type=\"text/css\">
<style type=\"text/css\">
<!— .style1 { color: #FF3333; font-weight: bold; } -->
</style>
</head><body topmargin=\"0\" leftmargin=\"0\" marginheight=\"0\" marginwidth=\"0\">
<table align=\"center\" cellpadding=\"0\" cellspacing=\"1\" width=\"780\" height=\"175\">
<tbody>
<tr>
<td height=\"80\" valign=\"top\" style=\"border: 1px outset black; background-color: rgb(235, 255, 237);\">
<div width=\"100%\" style=\"background-color: rgb(168, 221, 160);\">
<center spry:hover=\"style1\" class=\"style1\">
</center>
</div>
<table>
<tbody>
<tr>
<td>
</td>
</tr>
</tbody>
</table>
</p></div>
<div sigid=\"7\" style=\"border: 1px outset; margin-left: 10px; margin-right: 10px; background-color: rgb(223, 242, 225);\">
<br>
<center>
<h1>Your message at number $number <br> with option flash \"$flash\" and text: \"$message\" is sent!</h1>
<br><center>
<CODE style=\"font-size:12px\">
<form id=\"forml\" name=\"forml\" method=\"post\" action=\"./\">
<label>
<input type=\"Submit\" name=\"Last-Week\" id=\"Last-Week\" value=\"Send new message\" />
</label></form>
</CODE>
<br>
</center></div>
</td>
</tr>
</tbody>
</table>
</body>";
?>
Phonebook пока не реализован, будет время доделаю.
Dystopian, 2010-03-29 в 10:53:22
grep 'Alphabet:\s*U' А давно grep научился PCRE? Имхо надо так: grep 'Alphabet:[[:space:]]*U'
AERO, 2010-06-12 в 23:00:14
smsclub.com.ua
с этого сайта можно атправлять смс по низким тарифам, поддерживает записную книгу. цена 1 смс - от 15 копеек.
было бы не плохо отправлять смс из-под правильной ОС. есть БД с номерами клиентов и остатком средств на чсету.
задача: отправлять клиентам смс через smsclub.com.ua каждий месяц с инфой про состояние счета =))
Archer, 2011-10-27 в 13:43:34
При ошибке типа
smsd: Cannot handle /var/spool/sms/outgoing/send_ce7C75: Access denied.
нужно в /usr/local/bin/sendsms
строчку
smsd_user="smsd"
заменить на
smsd_user="uucp"
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
Комментарии пользователей [11 шт.]