Идея создать будильник на базе Asterisk была уже давно, т.к. от обычного будильника проснуться получалось не всегда в отличии от звонка. Идея следующая: на веб-сайте задаем свой номер телефона и время, когда нас надо разбудить (с учетом дней недели). Когда наступает час X и минута Y, то Asterisk звонит по указанному номеру и проигрывает ругательную запись о необходимости скорейшего подъема.



Asterisk поддерживает автоматический обзвон с помощью формирования call-файлов.
.call файл — это текстовые файлы, которые при помещении их в определенную директорию (по умолчанию /var/spool/asterisk/outgoing/) заставляют Asterisk совершить исходящий вызов.

На базе этой функции и был реализован будильник с веб-интерфейсом.

Вся софтовая часть будильника состоит из 3 файлов:
index.php — веб-интерфейс будильника, через который возможно просмотреть, добавить или удалить будильники.
alarm.list — файл, в котором содержится актуальный список будильников в формате CSV. Структура файла следующая:
номер_телефона, пн_время, вт_время, ср_время, чт_время, пт_время, сб_время, вс_время

Формат времени: часы: минуты.
Рассмотрим на примере. Создадим будильник на понедельник 16:30 и пятницу 18:40 для номера 81234567890.



В файле alarm.list появится следующая запись:
81234567890,16:30,,,,18:40,,

Asterisk будет звонить по данному номеру каждые понедельник в 16:30 и пятницу 18:40.

parsing.sh — скрипт, парсящий данные с alarm.list и создающий call-файлы для Asterisk. Также в данном файле содержатся переменные, необходимые для формирования call-файла:
CALLPATH='/var/spool/asterisk/outgoing' # Каталог call-файлов Asterisk
CHANNEL='Dongle/dongle0' # Канал, через который будем звонить
MAXRETRIES='2' # Количество попыток дозвона
RETRYTIME='240' # Задержка между попытками
WAITTIME='30' # Время ожидания ответа
DATA='/var/lib/asterisk/sounds/ru/wakeup' # Путь к воспроизводимому аудиофайлу


Для запуска скрипта необходимо передать ему путь к alarm.list:
/var/www/alarm/parsing.sh /var/www/alarm/alarm.list

В ответ (если раскомментирована переменная DEBUG) скрипт выведет список активных будильников.



Данный файл должен быть добавлен в крон на запуск раз в минуту. Пример записи в /etc/crontab:
#Alarm
* * * * * root /var/www/alarm/parsing.sh /var/www/alarm/alarm.list


Архив со всеми файлами можно скачать по ссылке.

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


  1. Spring_Storm
    25.06.2015 16:59
    +1

    сразу вспомнился сервис budist.ru, поначалу возникла мысль зачем плодить ещё что-то, но вообще кул, да.


    1. Torna
      25.06.2015 19:41

      спасибо за будисту.


    1. maxvit Автор
      29.06.2015 22:11

      Сторонние сервисы не позволят реализовать нестандартные задумки. Например, у меня диалплан написан так, что пока не перезвонишь с телефона из соседней комнаты (что гарантирует 100% подъем :) астериск так и будет звонить.


  1. jkb
    25.06.2015 18:32
    +1

    Сейчас очень популярен в сша сервис wakie.com


    1. 57uff3r
      26.06.2015 08:17

      Wakie передает привет и благодарит за упоминание :)


  1. koef
    25.06.2015 22:59

    */1 не нужно, * — это и так будет раз в минуту в данном случае.


    1. maxvit Автор
      29.06.2015 21:39

      Спасибо, да для записи минуты так правильнее и проще. Исправил в статье.