Использование нескольких GSM модемов в SMSTOOLS3. Модернизация скрипта sendsms для отправки SMS-сообщений с возможностью выбора исходящего GSM модема.
Используя утилиту SMSTOOLS3 (развернутую по этой статье) для отправки/приема SMS сообщений, я столкнулся со сложностью отправки SMS сообщений с разных подключенных GSM модемов.
По-умолчанию в SMSTOOLS3, имеется скрипт отправки SMS сообщений (/usr/local/bin/sendsms), который отправляет SMS сообщения с первого устройства указанного в файле конфигурации.
Ниже рассмотрим как исправить изъян скрипта в отсутствие выбора GSM модема для отправки SMS сообщения, путем доработки его.
Рассмотрим как настроить два GSM модема (прим. GSM1, GSM2), для возможности отправки с обоих SMS сообщений. В конфигурационном файле (/etc/smsd.conf), указываем используемые GSM модемы через запятую (devices = GSM1, GSM2), добавляем секцию описания очередей ([queues]) для каждого GSM модема и в каждую секцию описания GSM модема указываем какая очередь используется для того или иного GSM модема.
Пример файла конфигурации:
devices = GSM1, GSM2 outgoing = /var/spool/sms/outgoing checked = /var/spool/sms/checked incoming = /var/spool/sms/incoming failed = /var/spool/sms/failed sent = /var/spool/sms/sent logfile = /var/log/smsd.log loglevel = 5 [queues] GSM1 = /var/spool/sms/GSM1 GSM2 = /var/spool/sms/GSM2 [GSM1] device = /dev/ttyUSB2 incoming = high queues = GSM1 detect_unexpected_input = no check_memory_method = 31 ussd_convert = 1 [GSM2] device = /dev/ttyUSB5 incoming = high queues = GSM2 detect_unexpected_input = no check_memory_method = 31 ussd_convert = 1
Создадим каталоги для очередей (GSM1, GSM2) указанные в файле конфигурации (/etc/smsd.conf):
mkdir -p /var/spool/sms/{GSM1,GSM2}
Я модернизировал поставляемый по-умолчанию скрипт для отправки SMS сообщений. Заменяем содержимое в исходном скрипте (/usr/local/bin/sendsms), на представленное содержимое ниже:
#!/bin/bash # This script send a text sms at the command line by creating # a sms file in the outgoing queue. # $1 is the destination phone number. # $2 is the message text. # If you leave $2 or both empty, the script will ask you. # If you give more than 2 arguments, last is taken as a text and # all other are taken as destination numbers. # If a destination is asked, you can type multiple numbers # delimited with spaces. # Keys for example: "password" and "keke": # KEYS="5f4dcc3b5aa765d61d8327deb882cf99 4a5ea11b030ec1cfbc8b9947fdf2c872 " KEYS="" # When creating keys, remember to use -n for echo: # echo -n "key" | md5sum smsd_group="smsd" # Will need echo which accepts -n argument: ECHO=echo case `uname` in SunOS) ECHO=/usr/ucb/echo ;; esac if ! [ -z "$KEYS" ]; then printf "Key: " read KEY if [ -z "$KEY" ]; then echo "Key required, stopping." exit 1 fi KEY=`$ECHO -n "$KEY" | md5sum | awk '{print $1;}'` if ! echo "$KEYS" | grep "$KEY" >/dev/null; then echo "Incorrect key, stopping." exit 1 fi fi DEST=$1 TEXT=$2 MODEM=$3 if [ -z "$DEST" ]; then printf "Destination(s): " read DEST if [ -z "$DEST" ]; then echo "No destination, stopping." exit 1 fi fi if [ -z "$TEXT" ]; then printf "Text: " read TEXT if [ -z "$TEXT" ]; then echo "No text, stopping." exit 1 fi fi if [ $# -gt 3 ]; then n=$# while [ $n -gt 1 ]; do destinations="$destinations $1" shift n=`expr $n - 1` done TEXT=$1 else destinations=$DEST fi if [ -z $3 ]; then MODEM="outgoing" fi echo "-- " echo "Text: $TEXT" ALPHABET="" if which iconv > /dev/null 2>&1; then if ! $ECHO -n "$TEXT" | iconv -t ISO-8859-15 >/dev/null 2>&1; then ALPHABET="Alphabet: UCS" fi fi group="" if [ -f /etc/group ]; then if grep $smsd_group: /etc/group >/dev/null; then group=$smsd_group fi fi for destination in $destinations do echo "To: $destination" echo "Modem: $MODEM" TMPFILE=`mktemp /tmp/smsd_XXXXXX` $ECHO "To: $destination" >> $TMPFILE $ECHO "Modem: $MODEM" >> $TMPFILE [ -n "$ALPHABET" ] && $ECHO "$ALPHABET" >> $TMPFILE $ECHO "" >> $TMPFILE if [ -z "$ALPHABET" ]; then $ECHO -n "$TEXT" >> $TMPFILE else $ECHO -n "$TEXT" | iconv -t UNICODEBIG >> $TMPFILE fi if [ "x$group" != x ]; then chgrp $group $TMPFILE fi chmod 0660 $TMPFILE FILE=`mktemp /var/spool/sms/$MODEM/send_XXXXXX` mv $TMPFILE $FILE done
Синтаксис использования остался прежним, за исключением того что после текста сообщения, можно указать с какого GSM модема отправить его.
sendsms 79888888888 'С первого телефона' GSM1 sendsms 79888888888 'Со второго телефона' GSM2
[stextbox id=’warning’]Если не указать с какого GSM модема отправлять сообщение, то при отправке будет использоваться первый GSM модем указанный в файле конфигурации (/etc/smsd.conf)[/stextbox]
Обсуждение
Нет комментариев.