artem
22.10.2013
16768

Отправка и прием SMS сообщений с помощью пакета smstools3 и GSM модема

Настройка модема

1. Для переключения устройства в режим модема, воспользуемся инструментом usb_modeswitch. Готовый RPM-пакет есть в репозитории rpmforge, скачиваем, устанавливаем:

wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el5.rf.x86_64.rpm
rpm -ivh rpmforge-release-0.5.3-1.el5.rf.x86_64.rpm
yum install usb_modeswitch

Добавляем в /etc/usb_modeswitch.conf

DefaultVendor = 0x12d1
DefaultProduct = 0x1001
MessageEndpoint = 0x01
MessageContent = «55534243000000000000000000000011060000000000000000000000000000»

Переключаем устройство в режим модема командой

usb_modeswitch -c /etc/usb_modeswitch.conf

Если usb_modeswitch отработает без ошибок, в системе должно появиться некоторое количество устройств /dev/ttyUSB*. Если этого не произошло, значит драйвер usbserial нужно загружать вручную

modprobe usbserial vendor=0x12d1 product=0x1001

Чтобы не делать этого вручную после каждой перезагрузки, нужно добавить в конфиг udev строку

SYSFS{idVendor}==»12d1″, SYSFS{idProduct}==»1001″, RUN+=»/sbin/modprobe usbserial vendor=0x12d1 product=0x1001″

2. Устанавливаем пакет minicom, настраиваем устройство для постоянной работы в режиме модема

yum install minicom
minicom -s

В «Serial port setup» выставляем значения «Serial Device» — /dev/ttyUSB0, «Bps/Par/Bits» — 38400 8N1. Выбиваем пункт «Save setup as dfl» для сохранения настроек и подключаемся к модему. Посылаем модему команду

AT^U2DIAG=0

Это заставит устройство всегда включаться в режиме модема, не возвращаясь в режим хранилища данных. Использование usb_modeswitch более не понадобится.

Настройка smstools3

1. Скачиваем smstools3 с сайта разработчика, устанавливаем

wget http://smstools3.kekekasvi.com/packages/smstools3-3.1.15.tar.gz
cd smstools3
make install

2. Настройка smstools3

Настройки smstools3 хранятся в файле /etc/smsd.conf. Пример настроек:

devices = GSM1
logfile = /var/log/smsd.log
loglevel = 2

pidfile = /var/run/smsd/smsd.pid
infofile = /var/run/smsd/smsd.working

checkhandler = /opt/sms_to_ucs2.sh
eventhandler = /opt/sms_from_ucs2.sh

[GSM1]
device = /dev/ttyUSB0
baudrate = 115200
init = AT+CPMS=»ME»,»ME»,»ME»
incoming = high

Пояснения:

  • GSM1 — произвольное имя
  • при loglevel равном 2, в лог пишется только информация о запуске/завершении программы. Для начала, лучше поставить сделать значение равным 7 и проверить лог на предмет ошибок.
  • checkhandler — в этом параметре указан путь к скрипту, который будет запускаться каждый раз при отправке сообщения. Путь к файлу сообщения передается в первом параметре, текст скрипта будет приведен ниже.
  • eventhandler — в этом параметре указан путь к скрипту, который будет запускаться каждый раз при получении сообщения. Путь к файлу сообщения передается во втором параметре, текст скрипта будет приведен ниже.
  • init — команды, которые будут отправлены модему перед получением и отправкой сообщений. Команда AT+CPMS казывает, какую память следует использовать для работы с SMS. В данном случае, для всех операций с SMS будет использоваться память модема.
  • incoming — значение high означает, что получение сообщений будет происходить с большим приоритетом, чем отправка. Если это поведение нежелательно, данный параметр указывать не нужно.

3. Скрипты для обработки отправляемых и получаемых SMS сообщений

SMS сообщения, содержащие символы кириллицы, приходят в кодировке UCS2 и отправляться должны в кодировке UCS2.
Отправка SMS:

#!/bin/bash

export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

FROM_FILE=»$1″
[ ! -r «$FROM_FILE» ] && exit 1

if grep -q ‘[а-яА-Я]’ $FROM_FILE; then
TMPFILE=$(mktemp /tmp/smsd_XXXXXX)
sed -e ‘/^$/ q’ < «$FROM_FILE» > $TMPFILE
echo ‘Alphabet: Unicode’ >> $TMPFILE
sed -e ‘1,/^$/ d’ < «$FROM_FILE» | iconv -f UTF-8 -t UNICODEBIG >> $TMPFILE
mv $TMPFILE «$FROM_FILE»
fi

Отправлять SMS можно с помощью команды sendsms (входит в пакет smstools3)

sendsms <номер> «<текст>»

Получение SMS, пересылка на почту sms@example.com

#!/bin/bash

export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

MAIL_FROM=smstools@example.com
MAIL_TO=sms@example.com
FROM_FILE=»$2″
[ ! -r «$FROM_FILE» ] && exit 1
[[ ! $FROM_FILE == /var/spool/sms/incoming* ]] && exit 0

TEXT=»
CONV=»
if sed -e ‘/^$/ q’ < «$FROM_FILE» | grep -q «^Alphabet: UCS2»; then
CONV=yes
fi

if [ ! «$CONV» ]; then
TEXT=»$(sed -e ‘1,/^$/ d’ < «$FROM_FILE»)»
else
TMPFILE=$(mktemp /tmp/smsd_XXXXXX)
sed -e ‘/^$/ q’ < «$FROM_FILE» | sed -e ‘s/Alphabet: UCS2/Alphabet: UTF-8/g’ > $TMPFILE
TEXT=»$(sed -e ‘1,/^$/ d’ < «$FROM_FILE» | iconv -f UNICODEBIG -t UTF-8)»
echo «$TEXT» >> $TMPFILE
mv $TMPFILE «$FROM_FILE»
fi
NUM=»$(grep -E ‘^From:’ «$FROM_FILE» | sed -e ‘s|^From:[[:space:]]*(.*)|1|’)»

cat <<__eof__ sendmail=»» -t=»» br=»»>From: $MAIL_FROM
To: $MAIL_TO
Subject: Входящее SMS сообщение с номера $NUM
Content-Type: text/plain; charset=»UTF-8″
Content-Transfer-Encoding: 8bit

$TEXT
__EOF__

 
avatar
  Подписаться  
Уведомление о

Остались вопросы?

Я - Першин Артём, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

Why Choose HUGE?

Unlimited pre-designed elements

Each and every design element is designed for retina ready display on all kind of devices

User friendly interface and design

Each and every design element is designed for retina ready display on all kind of devices

100% editable layered PSD files

Each and every design element is designed for retina ready display on all kind of devices

Created using shape layers

Each and every design element is designed for retina ready display on all kind of devices