Шаблоны Joomla 3 здесь: http://www.joomla3x.ru/joomla3-templates.html

Linux

Gammu (работаем с SMS)

Автор: GAMER вкл. .

После экспериментов с Asterisk (chan_dongle) было принято решение попробовать gammu. Первые тесты показали ряд преимуществ перед астериском.

Выделю два: работа с большим количеством телефонов и поддержка длинных СМС и кирилицы. Но нужно немного допилить.

Итак:

1. Ставим.

# aptitude install gammu-smsd


2. Настраиваем файл конфига.

# cat /etc/gammu-smsdrc

# Configuration file for Gammu SMS Daemon

# Gammu library configuration, see gammurc(5)
[gammu]
# Please configure this!
port = /dev/ttyUSB0
connection = at115200
gammucoding = utf8
synchronizetime = yes
# Debugging
logformat = textall

# SMSD configuration, see gammu-smsdrc(5)
[smsd]
service = files
logfile = /var/log/gammu-smsd
# Increase for debugging information
debuglevel = 4

# Paths where messages are stored
inboxpath = /var/spool/gammu/inbox/
outboxpath = /var/spool/gammu/outbox/
sentsmspath = /var/spool/gammu/sent/
errorsmspath = /var/spool/gammu/error/

# by GAMER
TransmitFormat = unicode
#TransmitFormat = auto

OutboxFormat = unicode


3. У меня криво рестартовал сервис. Ругался на выделение памяти. Сделал больше паузу между стоп и старт.

Кроме того были разные бока с кодировкой. В итоге подправил скрипт запуска демона.

# cat /etc/init.d/gammu-smsd


#! /bin/sh
### BEGIN INIT INFO
# Provides:          gammu-smsd
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Should-Start:      mysql postgresql $syslog
# Should-Stop:       mysql postgresql $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Gammu SMS daemon
# Description:       Daemon for automatically sending and receiving messages using GSM phone.
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/gammu-smsd
NAME=gammu-smsd
DESC="Gammu SMS Daemon"

# user which will run this daemon
USER=gammu

# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0

# Include user parameters if available
if [ -f /etc/default/$NAME ] ; then
        . /etc/default/$NAME
fi

. /lib/lsb/init-functions

case "$1" in
  start)
    if grep -q '^port = /dev/null' /etc/gammu-smsdrc ; then
        log_warning_msg " $NAME not yet configured, please edit /etc/gammu-smsdrc"
        exit 0
    fi
        log_daemon_msg "Starting $DESC" "$NAME"
        export LC_ALL=ru_RU.utf8
        start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
                --exec  $DAEMON -- $DAEMONPARAM --daemon --user $USER \
        --pid /var/run/$NAME.pid
    log_end_msg $?
        ;;
  stop)
    log_daemon_msg "Stopping $DESC" $NAME
        start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
                --exec $DAEMON
    log_end_msg $?
        ;;
  restart|force-reload)
    sh $0 stop
    sleep 3
    sh $0 start
        ;;
  reload)
        log_daemon_msg "Reloading $DESC" $NAME
        start-stop-daemon --stop --signal HUP --quiet --pidfile \
                /var/run/$NAME.pid --name $NAME
        log_end_msg $?
  ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload|reload}" >&2
        exit 1
        ;;
esac

exit 0

Курсивом выделил свои изменения и добавления.

Пример настроек от читателя сайта - ТеМ!k

У меня ubuntu, так что тут может небольшие расхождения могут быть.

Конфигурация gammu для работы из mysql (полагаю что mysql уже имеется):

1. я ставил через apt-get install:
 sudo apt-get install gammu gammu-smsd

2. после такой установки идем сюда
  cd /usr/share/doc/gammu/examples/sql
  ls
  видим
  mysql.sql pgsql.sql.gz sqlite.sql.gz

3. теперь в имеющуюся БД накатываем скрипт:

   mysql -u root -p db_name < mysql.sql

4. после успешной накатки видим таблички:

 daemons
 gammu
 inbox
 outbox
 outbox_multipart
 pbk
 pbk_groups
 phones
 sentitems

5. редактируем конфиг sudo emacs /etc/gammu-smsdrc, все также как у тебя,
что самое забавное я даже не менял
service = files
на
service = sql
driver = native_mysql
хотя по идее надо.

в твоем конфиге комментим блок

# Paths where messages are stored
#inboxpath = /var/spool/gammu/inbox/
#outboxpath = /var/spool/gammu/outbox/
#sentsmspath = /var/spool/gammu/sent/
#errorsmspath = /var/spool/gammu/error/

добавляем:
user = root
password = ******
pc = localhost
database = db_name

6. редактирую /etc/init.d/gammu-smsd (так же как у тебя)

7. теперь самое интересное:

для отправки русского сообщения через mysql нужно сделать insert в таблицу "outbox":

INSERT INTO outbox (
 DestinationNumber,
 TextDecoded,
 CreatorID,
 Coding,
 DeliveryReport
)
VALUES (
 '+7908*******',
 'Текст сообщения!',
 'Program',
 'Unicode_No_Compression',
 'yes'
);

чтобы была возможность отправиль длинное сообщение,
нужно накатить следующий скрипт:

delimiter ^
DROP TRIGGER IF EXISTS outbox_after_ins_tr^
CREATE TRIGGER `outbox_after_ins_tr` AFTER INSERT ON `outbox`
  FOR EACH ROW
BEGIN
 set @seq=2;
 set @udh=left(new.udh,10);
 while (length(@remains)>0 and @seq<256) do
   set @part=left(@remains,67);
   
   if length(hex(@seq))=1 then
      set @seqx=CONCAT('0',hex(@seq));
   else
      set @seqx=hex(@seq);
   end if;

   set @remains=substring(@remains from 68);
   insert into outbox_multipart  (SequencePosition,UDH,TextDecoded,id, Coding) values (@seq,concat(@udh,@seqx),@part,new.ID, new.Coding);
   set @seq=@seq+1;
 end while;
END
^
DROP TRIGGER IF EXISTS outbox_before_ins_tr^
CREATE TRIGGER `outbox_before_ins_tr` BEFORE INSERT ON `outbox`
  FOR EACH ROW
BEGIN
IF NEW.InsertIntoDB = '0000-00-00 00:00:00' THEN
   SET NEW.InsertIntoDB = CURRENT_TIMESTAMP();
   END IF;
   IF NEW.SendingDateTime = '0000-00-00 00:00:00' THEN
   SET NEW.SendingDateTime = CURRENT_TIMESTAMP();
   END IF;
   IF NEW.SendingTimeOut = '0000-00-00 00:00:00' THEN
   SET NEW.SendingTimeOut = CURRENT_TIMESTAMP();
   END IF;

 if length(new.TextDecoded)>160 then
    set names utf8;   
    set @countM= hex((char_length(new.TextDecoded) div 68)+1);         
    set @remains=substring(new.TextDecoded from 68);
    set @randomUDH=hex(FLOOR(1 + (RAND() * 254))); /* получим что-то типа '050003D30501';*/    
    
  if length(@countM)=1 then
    set @countM=CONCAT('0',@countM);
  end if;

  if length(@randomUDH)=1 then
    set @randomUDH=CONCAT('0',@randomUDH);
  end if;

  if length(@remains)>0 then
   set new.UDH=concat('050003',@randomUDH,@countM,'01');
   set new.TextDecoded=left(new.TextDecoded,67);
   set new.MultiPart='true';
   set new.RelativeValidity= 255;   
  else
    set new.MultiPart='false';
  end if;
 
  end if;
END;