Документация по ОС FreeBSD Четверг, 10.07.2025, 04:21
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Мои статьи [0]
Установка и настройка [281]
X Window [25]
Man pages [30]
Ports & Packages [26]
cvs [18]
Multimedia [20]
Нововсти в мире Unix [0]
RFC [4]
RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Безопасность [52]
Работа с железом [58]
Книги по FreeBSD [17]
Сеть [505]
Программирование [40]
FireWall [58]
Темы экзамена BSDA [14]
Официальные темы экзамена BSDA, включая подробноые описания и советы по обучению.

Главная » Статьи » Установка и настройка

SMSTools 3 - шлюз для отправки SMS [2008]
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'

    если не видим чего-то подобного:
    212 ucom
    223 uhub/uplcom

    берем бубен и собираем ядро, добавив в конфигурацию следующиме опции:
    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` -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

    добавляем в 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?

    ВАЖНО: Заголовки регистрозависимые.
    Можно добавлять свои собственные заголовки. Они игнорируются программой, но не удаляются. Можно, к примеру, привязать к сообщению ключ базы данных добавив заголовок

    X-Db-Id: 777888

    После отправки файл сообщения сохранится в папке отправленных с этим заголовком.

    Приложения

    Подробное описание многих заголовков можно найти в этом приложении:
    Формат файла SMS сообщения
    файл скачан размер размещён примечание
    Скачать
    35 130.9kb 2008-11-10 Формат файла SMS сообщения

    Скрипт обработки событий и автоматической перекодировки сообщений в кирилице здесь:
    Обработчики событий для SMSTools
    файл скачан размер размещён примечание
    Скачать
    27 2.1kb 2008-11-07 Обработчики событий для SMSTools



  • Источник: http://www.lissyara.su/?id=1787
    Категория: Установка и настройка | Добавил: oleg (14.11.2008) | Автор: lexy
    Просмотров: 3299 | Комментарии: 1 | Рейтинг: 5.0/1 |
    Всего комментариев: 1
    1 Research  
    0
    Добрый день, не подскажете куда надо ложить файл скрипта *.sh чтобы он обрабатывался?

    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Форма входа

    Beastie

    Друзья сайта

    Статистика

    Онлайн всего: 2
    Гостей: 2
    Пользователей: 0
    links

    Copyright MyCorp © 2025