Нужно, чтобы на мобильный приходило смс в случае исчезновения и возобновления питания на сервере. Есть Freebsd демон apcupsd управления ИБП APC и asterisk с подключенными к нему GSM-модемами.

Если у вас данный демон управление ИБП стоит на той же машине, что и астериск, можно написать скрипт:

#!/usr/local/bin/bash

/usr/local/sbin/asterisk -rx "dongle sms KS_out +380501111234 Power fackup"

Но у меня управляет ИБП другой сервер, и тут на помощь приходит AMI Asterisk.

Первое что необходимо сделать, это включить AMI и завести пользователя, с помощью которого клиентская программа будет аутентифицироваться. В файл /etc/asterisk/manager.conf:

[general]
enabled = yes
port = 5038
bindaddr = 0.0.0.0

/etc/asterisk/manager.conf

[admin]
secret=FrUyHn6FSaX
deny=0.0.0.0/0.0.0.0
permit=192.168.0.0/255.255.0.0
read=system,call,log,verbose,command,agent,user,config,command,dtmf,reporting,cdr,dialplan,originate
write=system,call,log,verbose,command,agent,user,config,command,dtmf,reporting,cdr,dialplan,originate

Для применения изменений выполним reload:

asterisk -rx "module reload manager"</>

Создаем два скрипта на базе PHP. Основа взята <a href="habrahabr.ru/company/centosadmin/blog/161521/">отсюда</a>.

poweroff.php:

<source lang="php">
<?php

# —- define globals —-
$strhost = "192.168.1.6";
$strport = "5038";
$timeout = "10";
$d=date(DATE_RFC822);
$errno=0 ;
$errstr=0 ;

$sconn = fsockopen ($strhost, $strport, &$errno, &$errstr, $timeout) or die("Connection to $strhost:$strport failed");

if (!$sconn) { echo "$errstr ($errno)<br>\n"; }

else {

fputs ($sconn, "Action: login\r\n");
fputs ($sconn, "Username: admin\r\n");
fputs ($sconn, "Secret: FrUyHn6FSaX\r\n");
fputs ($sconn, "Events: on\r\n\r\n");
usleep(1000);
fputs ($sconn, "Action: Command\r\n");
fputs ($sconn, "Command: dongle sms MTS_out +380661111234 Power failure. $d \r\n");
fputs ($sconn, "Action: Logoff\r\n\r\n");
usleep (500);

fclose ($sconn);

}

И poweron.php:

<?php

# —- define globals —-
$strhost = "192.168.1.6";
$strport = "5038";
$timeout = "10";
$d=date(DATE_RFC822);
$errno=0 ;
$errstr=0 ;

$sconn = fsockopen ($strhost, $strport, &$errno, &$errstr, $timeout) or die("Connection to $strhost:$strport failed");

if (!$sconn) { echo "$errstr ($errno)<br>\n"; }

else {

fputs ($sconn, "Action: login\r\n");
fputs ($sconn, "Username: admin\r\n");
fputs ($sconn, "Secret: FrUyHn6FSaX\r\n");
fputs ($sconn, "Events: on\r\n\r\n");
usleep(1000);
fputs ($sconn, "Action: Command\r\n");
fputs ($sconn, "Command: dongle sms MTS_out +380661111234 Power is back. $d \r\n");
fputs ($sconn, "Action: Logoff\r\n\r\n");
usleep (500);

fclose ($sconn);

}


Далее переходим:

# cd /usr/local/etc/apcupsd/

И редактируем два файла onbattery — событие при переключении на батарею и offbattery — переходим на основное питание.

Добавляем строчки в начале файла:

/usr/local/bin/php -f /root/scripts/poweroff.php

И так же для poweron.php:

/usr/local/bin/php -f /root/scripts/poweron.php

Результат — при переходе ИБП на работу от батарей приходит смс с текстом «Power failure. Wed, 05 Jun 13 15:53:59 +0300.

И обратная смс при возвращении питания.

Комментарии (8)


  1. blind_oracle
    21.09.2015 17:35
    +1

    А зачем для этого астериск городить? Есть гораздо более простые sms-tools и подобные им.
    Или астериск с модемами ещё какую-то функцию исполняет?

    Ну и PHP юзать вместо шелл-скриптов это… слишком :)

    Это делается в одну строчку:

    echo "Action: login\r\n..." | nc 192.168.1.6 5038
    


    1. strelokr
      21.09.2015 18:09

      Астериск работает как полноценная АТС.


      1. fleaump
        21.09.2015 18:49

        микротик сам может отправлять смс


        1. strelokr
          21.09.2015 19:59

          это два отдельный проекта.


          1. fleaump
            21.09.2015 20:18
            +1

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


  1. fleaump
    21.09.2015 17:52
    +2

    Всегда напрягали такие огороды костылей.

    Ставится центральный мониторинг, который через snmp\агентов своих собирает статистику с оборудования и сервисов. В случае зашквара система мониторинга сообщает что случилось, где случилось и во сколько, соответственно механизм оповещения нужно сделать один раз смс\pushbullet\email\sip-call, а не городить его всюду.

    Автор посмотри на Zabbix, все бесплатно, просто и комфортно.


  1. vanomel
    22.09.2015 20:00

    А это правда ваш пароль на AMI? Можно я им воспользуюсь или мне выбрать другой?


    1. strelokr
      22.09.2015 22:16
      -1

      Да, конечно.
      Неужели можно решить что я запостил реальный пароль?