
NB!2) Не нашел, как вставить таблицы, поэтому полная версия статьи во вложениях
Статья про SMSTools3
xxx: мой телефон крякнул

xxx: все. я теперь не мобильная. сссукаааааааа . ну не прет так сразу во всем ]:->
yyy: че с ним? ))
xxx: он уже не жилец((((. у него белый свет ....в конце тунеля
xxx: экран белым светиться ..ни че не вижу...
yyy: знач будешь ходить со старым сименсом

xxx: откуда у меня появится старый сименс?
yyy: у всех есть старые сименсы

Цитата #400329 bash.org.ru
Нет, мы, как раз, немобильными не останемся, именно потому, что у нас есть «старый сименс»!
Постановка задачи: есть база партнеров по бизнесу, которых нужно уведомлять о состоянии их счета независимо от менеджеров, которые с ними работают. Переговоры с сотовыми операторами по поводу SMS-гейтов зашли в тупик в виду неадекватного ценника, неповоротливости (срок исполнения ведь обычно - «уже вчера должно работать») или сложности реализации, поэтому
имеем:
- старый Siemens M75;
- родной (семёновский) дата-кабель DCA-510 к нему;
- машинку с правильной осью (FreeBSD 7.0)
Детали полной реализации я выкладывать не буду, т.к. задача весьма специфическая, но рассмотрю все основные моменты отправки SMS.
В портах нашел вот что:
Код: Выделить всё
Port: smstools-3.1.3
Path: /usr/ports/comms/smstools3
Info: SMS Gateway software for GSM modems and mobile phones
Maint: mm@FreeBSD.org
WWW: http://smstools3.kekekasvi.com
Код: Выделить всё
sudo make -C /usr/ports/comms/smstools3 install clean
Код: Выделить всё
~> kldstat -v | grep 'u[pl]*com'
Код: Выделить всё
212 ucom
223 uhub/uplcom
Код: Выделить всё
device ucom
device uplcom
ВНИМАНИЕ! Без установленных модулей кабель тоже будет определятся как /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
Так как по умолчанию smsd стартует от рута, а это не тру, создаем пользователя:
Код: Выделить всё
~# pw groupadd smsd -g 151
~# pw useradd -n smsd -u 151 -c 'SMS Gate worker' -g smsd -G uucp,dialer -w no -s /sbin/nologin -d /nonexistent
Код: Выделить всё
# структура файла такая:
# глобальные настройки
# ...
# ...
# [ модем 1 ]
# ...
# [ модем 2 ]
# ...
# [ модем 3 ]
# ...
# используемые устройства, если несколько — пишем через запятую
devices = GSM0
# лог, если не указан — пишется в syslog, если = 1, пишет в stdout
logfile = /var/log/smsd.log
# писать фсё
loglevel = 7
# No comments, я надеюсь ;-)
USER = smsd
GROUP = dialer
# No comments too , главное — не забыть создать /var/run/smsd/ и дать все права юзеру smsd
PIDFILE= /var/run/smsd/smsd.pid
INFOFILE= /var/run/smsd/smsd.working
# Теперь настраиваем все телефоны, ГСМ-момеды и пр. шелезяки
# Siemens M75
[GSM0]
# порт
device = /dev/cuaU0
# скорость в нем
baudrate = 115200
# аппаратное управление потоком
rtscts = no
# строка инициализации (взял с сайта программы),
# подробная справка по командам в приложениях
init = AT+CPMS="ME","ME","ME"
init2 = AT+CNMI=1,1,0,2
# приоритет входящих сообщений
incoming = high
# хотим отчет о доставке
report = yes
# задержка перед отправкой
send_delay = 20
Еще пару движений:
в /usr/local/etc/rc.d/smsd
Код: Выделить всё
pidfile=/var/run/smsd.pid
Код: Выделить всё
pidfile=/var/run/smsd/smsd.pid
Код: Выделить всё
~# echo smsd_enable=»YES» >> /etc/rc.conf
~# /usr/local/etc/rc.d/smsd start
Код: Выделить всё
~> 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
Код: Выделить всё
!+smsd,GSM0
*.* /var/log/smsd.log
в /etc/newsyslog.conf добавляем:
Код: Выделить всё
/var/log/smsd.log smsd:dialer 644 7 100 * JC
Ничего сложного, процесс отправки похож на процесс печати, в /var/spool/sms/ есть три каталога:
checked, incoming, outgoing. В каталог outgoing кидаются файлы для отправки, по формату очень похожие на MIME: сначала заголовки, потом, через пустую строку, тело сообщения. Подробнее формат опишу ниже. В пакет входит утилита sendsms, надо добавить пользователя, от которого будут отправлятся sms в группу smsd. Затем пробуем:
Код: Выделить всё
sendsms 79xxxxxxxxx 'Hello! How are You?'
И, о Чудо!, через несколько секунд придет желанная SMS. Но мы рано радуемся. Вавилон нас ждет! А точнее — отправка SMS кириллицей, а значит, берем бубен, напильник, и дорисовываем все как надо. SMSTools умеет обрабатывать события при помощи внешних программ, значит рисуем скрипт проверки сообщения перед отправкой (за прототип был взят unicode2sms, все скрипты пакета можно найти в /usr/local/share/smstools):
Код: Выделить всё
#!/bin/sh
# checkhandler for SMS Tools 3
# autoconverts cyrillic messages to UCS-2BE
# add checkhandler=/path/to/ucsautoconvert into global part of smsd.conf
# written by lexy (lexy@mrlexy.ru), 2008
FILE=`mktemp /tmp/smsd_XXXXXX`
if [ ! `grep '[А-Яа-я]' $1` -or `grep 'Alphabet:\s*U' $1`]
then exit 0
fi
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
mv $FILE $1
chmod 644 $1
Код: Выделить всё
checkhandler=/path/to/ucsautoconvert
Код: Выделить всё
#~ /usr/local/etc/rc.d/smsd restart
ждем...ждем... телефончик — Плюмммм!!! Смотрим... Аллилуя! Кроме того можно добавить поддержку обработки и других событий (SENT, RECEIVED, FAILED, REPORT, CALL), белый и черный список.
За это отвечают параметры конфигурации:
Код: Выделить всё
eventhandler = /path/to handler
whitelist = /path/to/list
blacklist = /path/to/list
Теперь про формат файла сообщений, вольный сокращенный перевод документации
Текстовые сообщения
Файл SMS-сообщения похож на файл электронной почты: текстовый файл состоящий из заголовков и содержимого сообщения после пустой строки.
Простой пример:
Код: Выделить всё
To: 491721234567
Hello, this is the sms.
Номер указывается в международном формате но без знака «+». Если необходимо отправить сообщение на короткий номер, то перед номером нужно указать "s".
Расширеный пример:
Код: Выделить всё
To: 491721234567
Flash: yes
Alphabet: ISO
Hello Stefan, how are you?
ВАЖНО: Заголовки регистрозависимые.
Можно добавлять свои собственные заголовки. Они игнорируются программой, но не удаляются. Можно, к примеру, привязать к сообщению ключ базы данных добавив заголовок
Код: Выделить всё
X-Db-Id: 777888
Заголовки
Приводится с сокращениями
Булевы значения могут быть для значения «истина» true, yes, on или 1. Все остальные значения трактуются ка «ложь»
======================================================
далее пошли таблицы, поэтому текст обрывается....
в приложениях пока только полный текст статьи в pdf и скрипты,
справочники по AT командам для GSM залью в доки