Приветствую всех! Надеюсь моя статья будет интересна не только радиолюбителям, которые присутствуют на Хабре, но и остальным читателям.
Кто такие радиолюбители, можно почитать тут, а что такое Dx-кластер — тут.
Немного предыстории: однажды в одном из радиолюбительском рефлекторе проскочила идея отправки смс сообщения в DX-кластер, ведь не везде есть покрытие интернета. Но идея была откинута радиолюбителями, которые работают/имеют непосредственное отношение к операторам мобильной связи. Мотивировали это тем, что очень дорогое выйдет оборудование, поэтому идея того не стоит.
Я заинтересовался этой темой и было принято решение собрать в единое целое smstools, мобильный телефон и DX-кластер.
Данная схема успешно завелась на моем домашнем сервере под управлением FreeBSD. Сейчас же решил проделать все тоже, но на роутере D-link DIR-620
Оборудование:
— роутер Dir-620 с прошивкой Zyxel Keenetic;
— мобильный телефон Motorola v360 (старый телефон жены, валяется как резерв);
— прямые руки и желание;
О smstools рассказывать не буду, уже этот вопрос осветили на Хабре тут.
И статья на Хабре, как прошить роутер — тут.
Итак, подключаем телефон и убеждаемся, что роутер его видет:
dmesg
...
...
cdc_acm 1-1.4.3:1.0: ttyACM0: USB ACM device
Дальше собираем smstools. Как собирать свои пакеты, детально написано у Zyxmon тут Т.к. smstools не входит в стандартные утилиты OpenWrt, поэтому, скачиваем исходники отсюда и разархивируем.
Собрать нужно её, используя кросс-компилятор из Keenetic. Для этого в файле smstools3/src/Makefile нужно в строчке:
CC=gcc
указать путь до кросс-компилятора. У меня так:
СС=/home/igor/keenetic/staging_dir/toolchain-mipsel_r2_gcc-4.1.2_uClibs-0.9.30.3/bin/mipsel-openwrt-linux-uclibc-gcc
Делаем make. В smstools3/src/ получаем файл демона sms-сервера smsd, который копируем на файловую систему в /media/DISK_A1/system/usr/bin. Заодно в директорию /media/DISK_A1/system/etc положим файл конфигурации smsd.conf, который необходим для запуска smsd.
Мой файл конфигурации:
devices = GSM1
logfile = /media/DISK_A1/system/var/log/smstools/smsd.log
loglevel = 7
[GSM1]
device = /dev/ttyACM0
incoming = yes
check_memory_method = 31
smsc = 38097*******
baudrate = 115200
rtscts = no
Также для работы smsd нужно создать следующие директории:
mkdir -p /media/DISK_A1/system/var/log/smstools
mkdir -p /var/spool/sms/checked/
mkdir -p /var/spool/sms/outgoing/
mkdir -p /var/spool/sms/incoming/
Запускаем sms-сервер:
# smsd -c /media/DISK_A1/system/etc/smsd.conf
Отправляем тестовое смс сообщение на телефон такого вида:
(частота DXстанция комментарий)
14144.0 UE1WFF WFF!!!
В каталоге /var/spool/sms/incoming/ будет текстовый файл такого вида:
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
14144.0 UE1WFF WFF!!!
***
Осталось только взять нужную строку и отправить в DX-кластер. Для этого пишем простой скрипт на perl. Скажу сразу, что на perl не программировал, поэтому возможно скрипт можно и получше написать…
#!/media/DISK_A1/system/usr/bin/perl
$k=0;
my @curfiles=glob('*.{txt}');
$count=1;
while ($name=glob('*.{txt}')) {
$count++;
}
$count=$count-2;
for ($k=0; $k<=$count; $k++)
{
open FILE,$k.'.gsm.txt';
$i=0;
while ()
{
$i++;
if ($i==12) { $string=};
}
close FILE;.
unlink $k.'.gsm.txt';
use Net::Telnet ();
my $my_call = '******';
my $my_pass = '******';
my $myspot='DX '.$string;
my $t = Net::Telnet->new(Host => '19*.15*.23*.25*', Port => '9****', Timeout => 10);
$t->waitfor('/Callsign : /');
$t->print($my_call);
$t->waitfor('/Password : /');
$t->print($my_pass);
$t->waitfor('/****** de ****** >/');
$t->print($myspot);
print @lines;
$t->print("bye");
$t->close;
}
И все, сообщение ушло в радиолюбительский кластер. Дальше скрипт можно добавить в крон на выполнение в определенное время.
Так же по аналогии можно сделать и sms-уведомление сотрудников или отправку смс из интернета, как сделано на сайте Киевстара
Статья первая, поэтому возможно что-то не так оформил, готов выслушать все в свой адрес :)
Благодарю за внимание!
Автор: ur3ckr