|
|
www.lissyara.su
—> статьи
—> FreeBSD
—> программы
—> SMSTools 3
SMSTools 3 - шлюз для отправки SMS
Автор: lexy.
xxx: мой телефон крякнул :-(
xxx: все. я теперь не мобильная. сссукаааааааа . ну не прет так сразу во всем ]:->
yyy: че с ним? ))
xxx: он уже не жилец((((. у него белый свет ....в конце тунеля
xxx: экран белым светиться ..ни че не вижу...
yyy: знач будешь ходить со старым сименсом :-P
xxx: откуда у меня появится старый сименс?
yyy: у всех есть старые сименсы :-D
Цитата #400329 bash.org.ru
Нет, мы, как раз, немобильными не останемся, именно потому, что у нас есть «старый сименс»!
Постановка задачи: есть база партнеров по бизнесу, которых нужно уведомлять о состоянии их счета независимо от менеджеров, которые с ними работают. Переговоры с сотовыми операторами по поводу SMS-гейтов зашли в тупик в виду неадекватного ценника, неповоротливости (срок исполнения ведь обычно - «уже вчера должно работать») или сложности реализации, поэтому
имеем:
старый Siemens M75;
родной (семёновский) дата-кабель DCA-510 к нему;
машинку с правильной осью (FreeBSD 7.0)
НАДО: создать автоматизированную систему рассылки SMS
Детали полной реализации я выкладывать не буду, т.к. задача весьма специфическая, но рассмотрю все основные моменты отправки 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
| Теперь цепляем телефон. Как я понял, проблем при подключении датакабеля через обычный comm-port не возникает, но в данной ситуации кабель USB. Чип используется PL2303, в FreeBSD поддерживается. Проверяем:
~> kldstat -v | grep 'u[pl]*com'
| если не видим чего-то подобного:
берем бубен и собираем ядро, добавив в конфигурацию следующиме опции:
device ucom
device 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 стартует от рута, а это не тру, создаем пользователя:
~# 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
| теперь настраиваем SMS Tools, файл /usr/local/etc/smsd.conf
# структура файла такая:
# глобальные настройки
# ...
# ...
# [ модем 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
|
Все завелось, комментируем в конфиге 'logfile', ставим loglevel = 5, в /etc/syslog.conf добавляем:
!+smsd,GSM0
*.* /var/log/smsd.log
| (если надо, после GSM0 через запятую перечисляем все названия модемов из smsd.conf)
в /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 > /dev/null` -o `grep 'Alphabet:\s*U' $1 > /dev/null` ]
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 664 $1
| добавляем в smsd.conf, в основную часть (до описания модемов):
checkhandler=/path/to/ucsautoconvert
| перезапускаем smsd:
#~ /usr/local/etc/rc.d/smsd restart
| пробуем: sendsms 79xxxxxxxxx 'Привет! Мы победили Вавилон ?'
ждем...ждем... телефончик — Плюмммм!!! Смотрим... Аллилуя!
Кроме того можно добавить поддержку обработки и других событий (SENT, RECEIVED, FAILED, REPORT, CALL), белый и черный список.
За это отвечают параметры конфигурации:
eventhandler = /path/to/handler
whitelist = /path/to/list
blacklist = /path/to/list
| Т.к. гейт не публичный, то чернобелые списки я использовать не стал, а вот обработчик событий написал. Вы можете его найти в приложениях. Это perl-скрипт, достаточно откоменнтированный, чтоб подогнать его под свои нужды.
Теперь вкратце про формат файла сообщений, более полный вольный и сокращенный перевод документации можно найти в приложениях.
Текстовые сообщения
Файл SMS-сообщения похож на файл электронной почты: текстовый файл состоящий из заголовков и содержимого сообщения после пустой строки.
Простой пример:
To: 491721234567
Hello, this is the sms.
|
Номер указывается в международном формате но без знака «+». Если необходимо отправить сообщение на короткий номер, то перед номером нужно указать "s".
Расширеный пример:
To: 491721234567
Flash: yes
Alphabet: ISO
Hello Stefan, how are you?
|
ВАЖНО: Заголовки регистрозависимые.
Можно добавлять свои собственные заголовки. Они игнорируются программой, но не удаляются. Можно, к примеру, привязать к сообщению ключ базы данных добавив заголовок
После отправки файл сообщения сохранится в папке отправленных с этим заголовком.
Приложения
Подробное описание многих заголовков можно найти в этом приложении:
Формат файла SMS сообщения
|
файл
|
скачан
|
размер
|
размещён
|
примечание
|
|
3979
|
130.9kb
|
2008-11-10
|
Формат файла SMS сообщения
|
|
Скрипт обработки событий и автоматической перекодировки сообщений в кирилице здесь:
Обработчики событий для SMSTools
|
файл
|
скачан
|
размер
|
размещён
|
примечание
|
|
3899
|
2.1kb
|
2008-11-07
|
Обработчики событий для SMSTools
|
|
Справочную информацию по AT-командам для работы с GSM-устройствами можно найти на FTP этого сайта
Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?t=12237.
размещено: 2008-11-10,
последнее обновление: 2009-01-23,
автор: lexy
|
|
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS
Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT
В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat
Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp
Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration
Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster
HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS
История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire
Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной
Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server
Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs
Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec
Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash
Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT
Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3
Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN
На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
2010-08-25, manefesto
freebsd lvm
Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
2010-04-30, gonzo111
proftpd file auth"a
Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
2010-04-22, lissyara
tw_cli
Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
2010-04-14, fox
MySQL Master+Master
MySQL (Master Master) and (Master Slave) Как настроить репликацию…
2010-03-09, terminus
DNS zones
Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
2010-03-09, aspera
Squid+AD (group access)
Настройка прокси сервера SQUID с автроризацией пользователей в AD. Разделение пользователей на группы
2010-03-02, BlackCat
Шлюз: Часть 4
Настройка дополнительных сервисов: синхронизация времени (OpenNTPD), клиент DynDNS.org.
2010-03-01, BlackCat
Шлюз: Часть 3
Настройка DHCP и DNS серверов для работы внутри частной сети, c поддержкой внутренних (частных зон) DNS, а так же интеграция DHCP и DNS сервисов.
2010-03-01, BlackCat
Шлюз: Часть 2
Конфигурация МСЭ pf для проброса портов с изменением порта назначения и без, а так же поддержки активного режима FTP и ограничения максимального размера сегмента
|
Комментарии пользователей [11 шт.]