1

Тема: Скрипт на событие Поступление звонка, СМС

Приветствую, уважаемые.
Я уже задавался здесь вопросом по построению туннеля  с кенетика http://forum.zyxmon.org/topic150-ssh-kl … ke-10.html на SSH сервер, все получилось.
Хочется теперь бОльшего! Из-за падучести связи и потери пакетов, да и что он,туннель, будет бестолково висеть,
хочется скрипт , который бы реагировал на событие - поступление телефонного звонка на свисток 3G, получение смс,вообщем, на то , что легче в исполнение. Ну, естественно, скрипт поднимал бы туннель. Подскажите, такие фантазии реализуемы на кенетике?
Я так понимаю, надо "слушать" порт модема, если там RING прошел 10 раз ( только я знаю, сколько надо гудков ждать),то далее выполняем скрипт на запуск ssh -R -f N бла...бла.... Примерно так? Только какой порт надо нюхать, и не будет ли нагружаться процессор бесконечным циклом. Помогите, плиз. Можно Sleep задействовать
Спасибо

Отредактировано zvg197 (2012-01-19 15:47:28)

2

Re: Скрипт на событие Поступление звонка, СМС

Приветствую! Относительно звонка не знаю (нужно более детально искать инфу в интернете), но относительно смс - все реально. Есть такой проект, как smstools Одно время делал на Freebsd небольшой sms to dxcluster шлюз - работало.

Скомпилировал smstools под keenetic.
Имеем роутер, юсб-хаб, телефон Motorola V360
Телефон(модем) определился в системе как ttyACM0
Редактируем под свои нужны конфиг и вуаля, смс получает и кладет в каталог. Дальше, можно написать скрипт на bash:
1) разбор файла и нахождение нужной ключевой строки (наш заветный код, который будем отправлять в смс на роутер)
2) если код есть - наши действия (поднять ssh  и т.п)

Вообщем как-то так.
Выкладываю принятый файлик (смс был отправлен с сайта Киевстар Украина)

# cat GSM1.0Hmo74
From: 777
From_TOA: 81 unknown, ISDN/telephone
From_SMSC: 380672020000
Sent: 12-03-26 10:06:43
Received: 12-03-26 09:28:39
Subject: GSM1
Modem: GSM1
IMSI: 255030564719214
Report: no
Alphabet: ISO
Length: 57

test sms for router
***
Znyzhky z DJUICE DISCOUNT! 477*55
Linux KEENETIC 2.6.23.17  -  xmail, samba, transmission, ftp, lighttp, wol, owfs, iftop, jabber-server, icecast, smstools, aprx

3

Re: Скрипт на событие Поступление звонка, СМС

Добрый день.
ur3ckr, помогите если есть возможность.
У меня роутер прошит в ZyXEL Keenetic (прошивка 1.00(BFW.4)D0).

Задался целью прикрутить smstools, пытаюсь собрать под кинетик, но ничего не выходит.

Отредактировано sluggard (2012-04-11 19:34:44)

4

Re: Скрипт на событие Поступление звонка, СМС

Собирал так: качаем исходник http://smstools3.kekekasvi.com и разархивируем.

Собрать нужно её, используя кросс-компилятор из Keenetic. Для этого в файле smstools3/src/Makefile нужно добавить строчку:
CC=......gcc (зависит от того, чем собираете дополнительные пакеты)
т. е. указать путь до кросс-компилятора.

Запускаем make. В smstools3/src/ получаем файл демона sms-сервера smsd, который копируем на файловую систему в /media/DISK_A1/system/usr/bin.

Если компилировать нет желания или не получается, можно попробовать мой скомпилированный пакет:

#wget http://homeunix.dyndns.org:82/file/for_test/smsd

Закидываем в /media/DISK_A1/system/usr/bin
Даем права на исполнение:

#chmod +x smsd

Есть небольшое НО, чтобы все запустилось, нужно создать в каталоге /var/spool/ каталог sms, в нем incoming, outgoing, checked, но так как после перезагрузке роутера нужно будет создавать каталоги заново, поэтому написал небольшой скрипт:

#!/media/DISK_A1/system/bin/bash

WRT_SPOOL=/var/spool
cpdir=/media/DISK_A1/system/var/spool
mkdir -p $WRT_SPOOL
mkdir -p $WRT_SPOOL/sms
mkdir -p $WRT_SPOOL/sms/incoming
mkdir -p $WRT_SPOOL/sms/outgoing
mkdir -p $WRT_SPOOL/sms/checked
/media/DISK_A1/system/usr/bin/smsd -c /media/DISK_A1/system/etc/smsd.conf
sleep 25
killall smsd
mv $WRT_SPOOL/sms/incoming/*.* $cpdir/incoming/

Конфиг smsd.conf

devices = GSM1
logfile = /media/DISK_A1/system/var/log/smstools/smsd.log
loglevel = 7

[GSM1]
device = /dev/ttyACM0
incoming = yes
check_memory_method = 31
# Service Center Address
smsc = 3809*******   
#send_delay = 10
baudrate = 115200
rtscts = no

Также незабываем создать /media/DISK_A1/system/var/log/smstools/smsd.log

Отредактировано ur3ckr (2012-04-11 20:04:34)

Linux KEENETIC 2.6.23.17  -  xmail, samba, transmission, ftp, lighttp, wol, owfs, iftop, jabber-server, icecast, smstools, aprx

5

Re: Скрипт на событие Поступление звонка, СМС

премного благодарен! все заработало!

6

Re: Скрипт на событие Поступление звонка, СМС

ur3ckr, подсажите еще такой момент.
Если на роутере включено соедиение с интернетом, то smsd в лога не может с ним соединиться, пишет что устройство занято и он ожидает ответа на команды.
Если соединение не активно, то smsd нормально отрабатывает прием смс.

Как можно программно разрывать соединение по модему, а после приема/отправки смс снова переводить модем на раздачу интернета?

7

Re: Скрипт на событие Поступление звонка, СМС

ur3ckr, спасибо за идею. Утащил к себе.

Со всеми вытекающими...

8

Re: Скрипт на событие Поступление звонка, СМС

ryzhov_al :

ur3ckr, спасибо за идею. Утащил к себе.

А мне теперь останется ухватить себе почти готовый Makefile  big_smile

9

Re: Скрипт на событие Поступление звонка, СМС

ryzhov_al :

ur3ckr, спасибо за идею. Утащил к себе.

Всегда пожалуйста!

Zyxmon :

А мне теперь останется ухватить себе почти готовый Makefile  big_smile

Да он и так в принципе почти готовый был.

sluggard :

ur3ckr, подсажите еще такой момент.
Если на роутере включено соедиение с интернетом, то smsd в лога не может с ним соединиться, пишет что устройство занято и он ожидает ответа на команды.
Если соединение не активно, то smsd нормально отрабатывает прием смс.

Как можно программно разрывать соединение по модему, а после приема/отправки смс снова переводить модем на раздачу интернета?

Здесь желательно подробней, как подключаетесь к интернету, какой модем/телефон используете (я так понял скорее всего 3Г модем какой-то).

По теории примерно как-то так:
написать скрипт, который анализирует лог, и если подключиться не может (хотя можно и сразу) - разрывать ппое-соединение, принимать сообщение, подключать назад ппое-соединение

Linux KEENETIC 2.6.23.17  -  xmail, samba, transmission, ftp, lighttp, wol, owfs, iftop, jabber-server, icecast, smstools, aprx

10

Re: Скрипт на событие Поступление звонка, СМС

Здесь желательно подробней, как подключаетесь к интернету, какой модем/телефон используете (я так понял скорее всего 3Г модем какой-то).

По теории примерно как-то так:
написать скрипт, который анализирует лог, и если подключиться не может (хотя можно и сразу) - разрывать ппое-соединение, принимать сообщение, подключать назад ппое-соединение

3G модем Huawei E171, подключение настроено в веб интерфейсе в логах:

13 Апр 01:07:49    pppd[11281]    pppd 2.4.4 started by root, uid 0
13 Апр 01:07:50    pppd[11281]    Serial connection established.
13 Апр 01:07:50    pppd[11281]    Using interface ppp0
13 Апр 01:07:50    pppd[11281]    Connect: ppp0 <--> /dev/ttyUSB0

разрывать то я научился

kill -INT `cat /var/run/ppp0.pid`

но не хватает времени на прием смс, модем сразу начинает поднимать инет после такого разрыва соединения.

Отредактировано sluggard (2012-04-13 19:40:49)

11

Re: Скрипт на событие Поступление звонка, СМС

smstools3 в репозитории. Все файлы, логи папки теперь используются на usb (/media/DISK_A1/system/), нужные директории создаются, операции копирования из /var не нужны.

ur3ckr, оформляйте все не в виде словесного описания, а в виде набора файлов:
http://zyxel-keenetic-packages.googleco … smstools3/
Так проще добавлять сделанное другими в репозиторий.

12

Re: Скрипт на событие Поступление звонка, СМС

Спасибо парни за работу!
Все четко и то, что нужно.

Отредактировано zvg197 (2012-04-18 14:24:39)

13

Re: Скрипт на событие Поступление звонка, СМС

И еще... Не подскажите опцию smstools или AT команду, чтобы после получения смс можно было ее удалить из потрохов симки ( если опция "SM" ) или из памяти ( если опция "ME") ? Или автоматом удаляются смски? Ведь не ровен час память смсками может забится.
2 -ой момент. При запуске smsd "тормозит" роутер безбожно. В терминале еле ползает, кушает памяти smsd больше всех среди процессов. conf такой

devices = GSM1
logfile = /media/DISK_A1/system/var/log/smsd.log
loglevel = 4

[GSM1]
device = /dev/ttyUSB2
incoming = yes
incoming = high
baudrate = 115200
rtscts = no
init = at+cpms="ME","ME","ME"

Подскажите, что не так....?
Спасибо

Отредактировано zvg197 (2012-04-20 09:14:49)

14

Re: Скрипт на событие Поступление звонка, СМС

Подскажите пожалуйста как пользоваться программой smstools3? Установил её из репозитория, а что дальше то делать?
Оператор Мегафон, модем Е1550. В качестве примера нужно получить остаток трафика (номер 000163; текст "O")

15

Re: Скрипт на событие Поступление звонка, СМС

Добрый день! У меня Zyxel Keenetic Giga II, установил прошивку v 1.11, установил ext_init.sh-II, все работает, получил доступ по ssh. Далее установил smstools3, настроил на использование с huaweiE1750. Модем работает, смс исправно принимает/отправляет.
Одна беда - с отправкой кириллицы.
В качестве checkhandler пробовал различные скрипты, которые смог найти.
Например (слегка модифицирован, в оригинале почему то не добавляли пустую строку между заголовками и телом сообщения:

#!/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
echo "" >> $FILE
cat $1 | awk '{if(NF==0) {s=1} if(s==1){print}}' | iconv -c -s -t UCS-2BE >> $FILE

mv $FILE $1
chmod 664 $1

и этот:

#!/bin/sh 

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

и стандартный unicode2sms, который лежит в /media/DISK_A1/system/usr/sbin/ рядом с смс демоном.
Пробовал обойтись и без checkhandler, через iconv -f UTF-8 -t UCS-2 в sh скрипте конвертировать текст. Добавлял параметры decode_unicode_text и incoming_utf8  в /etc/smsd.conf. Также нашел тут http://smstools3.kekekasvi.com/topic.php?id=809 рекомендации добавить аргументы -c -s для iconv - так же не помогло. Смс приходят либо пустые (с пробелами) либо в формате @825B:, то с пробелами между символами то без них. Пробовал менять Alphabet на Unicode, UTF-8, ISO, UCS-2. Не приходит в нормальном виде  sad
Стандартный unicode2sms выдает в логах следующее:

2015-04-24 11:13:26,7, smsd: Running checkhandler: /media/DISK_A1/system/usr/sbin/unicode2sms /media/DISK_A1/sy
2015-04-24 11:13:26,7, smsd: Done: checkhandler, execution time 0 sec., status: 0 (0)
2015-04-24 11:13:26,3, smsd: Exec: checkhandler encountered errors:
2015-04-24 11:13:26,3, smsd: ! od: invalid option -- t
2015-04-24 11:13:26,3, smsd: ! BusyBox v1.19.4 (2013-10-26 17:03:57 MSK) multi-call binary.
2015-04-24 11:13:26,3, smsd: !

2015-04-24 11:13:26,3, smsd: ! Usage: od [-aBbcDdeFfHhIiLlOovXx] [FILE]
2015-04-24 11:13:26,3, smsd: !

2015-04-24 11:13:26,3, smsd: ! Print FILE (or stdin) unambiguously, as octal bytes by default
2015-04-24 11:13:26,3, smsd: !

Т.е. на ту же проблему жаловался warm в топике http://smstools3.kekekasvi.com/topic.php?id=809 т.е. на строку в unicode2sms:

text=`od -t x1 $1 | cut -c8-99`

Что интересно, в консоли нельзя просто выполнить команду sendsms 79XXXXXXXXX 'Кириллица', всегда выдает ошибку

iconv: (stdin):1:0: cannot convert

, искал эту ошибку и пришел к выводу, что все завязано на locale, которого нет.
Пожалуйста, помогите настроить отправку кириллицы.

16

Re: Скрипт на событие Поступление звонка, СМС

defulike, смс-ки отправлять обязательно нужно через тело ? Просто через интернет не подходит ?
http://forum.zyxmon.org/topic361-otprav … endar.html

17

Re: Скрипт на событие Поступление звонка, СМС

laforsh :

defulike, смс-ки отправлять обязательно нужно через тело ? Просто через интернет не подходит ?
http://forum.zyxmon.org/topic361-otprav … endar.html

Спасибо, но нет, не подходит.

18

Re: Скрипт на событие Поступление звонка, СМС

defulike, перейдите на entware и там попробуйте.

19

Re: Скрипт на событие Поступление звонка, СМС

Отправил на модем смс с кириллицей. Открыл файл, там было Alphabet: UCS2. Скопировал файл, стер текст, в конец через

echo "ПРивет" | iconv -f UTF-8 -t UCS-2BE >> file

Скопировал файл в /var/spool/outgoing, ушло. В результате использую php как и планировал, что-то вроде:

$text = "Тестовое сообщение";
$text = iconv("UTF-8", "UCS-2BE", $text);
file_put_contents("/media/DISK_A1/system/var/spool/sms/outgoing/sent1", "To: 79XXXXXXXXXX\nAlphabet: UCS2\n\n".$text);

Checkhandler пр этом необходимо отключить.