[root@mng ~]#wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm [root@mng ~]#rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt [root@mng ~]#rpm -K rpmforge-release-0.5.2-2.el6.rf.*.rpm [root@mng ~]#yum install usb_modeswitch [root@mng ~]#yum install minicom [root@mng ~]#yum install smstools usbtools [root@mng ~]#minicom -s
Serial-port /dev/ttyUSB0 Welcome to minicom 2.3 OPTIONS: I18n Compiled on Aug 19 2010, 05:50:19. Port /dev/ttyUSB0 Press CTRL-A Z for help on special keys AT S7=45 S0=0 L1 V1 X4 &c1 E1 Q0 OK Проверка уровня сигнала AT+CSQ +CSQ: 15,99 Пробум отправку смс AT+CMGF=1 AT+CMGS="+7965XXXXXXX" > TEST ><CTRL+Z> +CMGS: 6 OK <Ctrl>+A Q Для выхода с терминала миником
[root@mng ~]# wget http://smstools3.kekekasvi.com/packages/smstools3-3.1.15.tar.gz [root@mng smstools3]# make -s install Installing binary program files /usr/local/bin/smsd Installing some scripts /usr/local/bin/sendsms /usr/local/bin/sms2html /usr/local/bin/sms2unicode /usr/local/bin/unicode2sms Installing config file Skipped /etc/smsd.conf, file already exists Creating minimum spool directories Skipped /var/spool, directory already exists Creating directory /var/spool/sms Creating directory /var/spool/sms/incoming Creating directory /var/spool/sms/outgoing Creating directory /var/spool/sms/checked Installing start-script /etc/init.d/sms3 Example script files are not installed automatically. Please dont forget to edit /etc/smsd.conf.
[root@mng smstools3]# cat /etc/smsd.conf devices = GSM1 incoming=/var/spool/sms/incoming outgoing=/var/spool/sms/outgoing checked=/var/spool/sms/checked sent=/var/spool/sms/sent logfile = /var/log/smsd/smsd.log loglevel = 7 #debug = 7 user = sms smart_logging = yes [GSM1] device = /dev/ttyUSB0 [root@mng smstools3]# mkdir /var/spool/sms/sent [root@mng smstools3]# /etc/init.d/sms3 start Starting SMS Daemon: smsd. [root@mng smstools3]# ps ax | grep sms 12005 ? Ss 0:00 /usr/local/bin/smsd -n MAINPROCESS -p/var/run/smsd.pid -i/var/run/smsd.working -l/var/log/smsd.log 12007 ? S 0:00 /usr/local/bin/smsd -n GSM1_______ -p/var/run/smsd.pid -i/var/run/smsd.working -l/var/log/smsd.log 12050 pts/1 S+ 0:00 grep sms [root@mng smstools3]# sendsms "7965XXXXXXX" "TESTER" -- Text: TESTER To: 7965XXXXXXX [root@mng smstools3]# tail -f /var/log/smsd.log 2013-06-25 11:21:59,7, GSM1: Command is sent, waiting for the answer 2013-06-25 11:21:59,7, GSM1: <- OK 2013-06-25 11:22:00,7, GSM1: -> AT+CMGS=42 2013-06-25 11:22:00,7, GSM1: Command is sent, waiting for the answer 2013-06-25 11:22:00,7, GSM1: <- > 2013-06-25 11:22:00,7, GSM1: -> 0011000B919756107494F80008FF1C004600750063006B00200079006F00750020043D0438043304350440 2013-06-25 11:22:00,7, GSM1: Command is sent, waiting for the answer 2013-06-25 11:22:04,7, GSM1: <- +CMGS: 7 OK 2013-06-25 11:22:04,5, GSM1: SMS sent, Message_id: 7, To: 7965XXXXXX, sending time 8 sec. 2013-06-25 11:22:04,6, GSM1: Moved file /var/spool/sms/checked/send_d704Fu to /var/spool/sms/sent/send_d704Fu
Шлюз email2sms
#!/usr/bin/perl # Copyright(C) Victor Vislobokov, 2011 # Under GNU GPL 2 License use DB_File; use Net::POP3; # имя и пароль для доступа к почтовому ящику $username = "username"; $password = "password"; # POP3 сервер $server = "pop.yandex.ru"; # номер сотового куда отправлять SMS $num = 'XXXXXXXXXX'; # База данных для хранения идентификаторов писем $db_file = "/var/tmp/sms/id.db"; # Файл журнала для протоколирования действий $logfile = "/var/tmp/sms/emailtosms.log"; $pop = Net::POP3->new($server, Timeout => 60); $rc = $pop->login($username, $password); if ($rc > 0) { # Открываем БД сохранённых сообщений $DB = tie(%hash_id, "DB_File", $db_file); # Получаем список сообщений $msgnums = $pop->list; foreach my $msgnum (keys %$msgnums) { # Получаем уникальный ID сообщения $uid = $pop->uidl($msgnum); # Отмечаем это сообщение в хеше текущих в данной сессии $msgs{$uid} = 1; # Проверяем не было ли уже обработано данное сообщение # Если обработано, идём дальше if (defined $hash_id{$uid}) { writeLog($logfile, "$uid already processed"); next; } # Если нет, обрабатываем $hash_id{$uid} = 1; $msg = $pop->get($msgnum); foreach $line (@$msg) { if (index($line, "Subject: ") == 0) { $sms = substr($line, 9, 50); chomp($sms); $stamp = getCurrentDateTime(); writeLog($logfile, "SMS '$sms' sended"); system("/usr/local/bin/sendsms \"$num\" \"$stamp $sms\""); } } # $pop->delete($msgnum); } } elsif ($rc == 0) { writeLog($logfile, "No messages in mailbox"); } else { writeLog($logfile, "Login failed"); } $pop->quit; # Удаляем из базы старые ID foreach $uid (keys %hash_id) { # Если ID из базы есть в текущей сессии, оставляем next if (defined $msgs{$uid}); DB_File::DELETE($DB, $uid); writeLog($logfile, "$uid was been deleted"); } untie(%hash_id); # ---------------------------------------------------------------------------- # Получение текущей даты и времени # ---------------------------------------------------------------------------- sub getCurrentDateTime { my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time()); $mon++; $year=$year-100+2000; return(sprintf("%.4d-%.2d-%.2d %.2d:%.2d:%.2d", $year, $mon, $mday, $hour, $min, $sec)); } # ---------------------------------------------------------------------------- # Запись в лог # ---------------------------------------------------------------------------- sub writeLog { my ($logfile, $msg) = @_; if (!defined $logfile) { $logfile = "/dev/null"; } my ($datetime, $fd, $rc); $datetime = getCurrentDateTime(); $rc = open($fd, ">>$logfile"); if (!defined $rc) { if ($main::config{'DEBUG'} > 0) { # При невозможности вывода в файл, выводим на стандартный ввод print "$msg\n"; } } else { print($fd "$datetime "); print($fd "$msg"); print($fd "\n"); close($fd); } }
[root@mng /]# chmod 755 email2sms.pl [root@mng sms]# crontab -l */3 * * * * /email2sms.pl