Torrent-качалка на моём домашнем headless Debian исправно качает торренты, но захотелось мне оповещений о том, что торрент скачан. И не хотелось как раньше заходить на SMB или DLNA шару, а хотелось, чтобы инициатива исходила от самого rTorrent'а... Приступим :).
Для начала добавим в .rtorrent.rc следующее:
Теперь по окончании скачивания торрента (event.download.finished) будет выполнен скрипт asterisk_notification.sh с правами супер-пользователя и некоторыми аргументами (рассмотрим позднее):
Далее разрешим пользователю rtorrent запускать скрипт через sudo без запроса пароля. Для этого правим /etc/sudoers и добавляем строки:
Содержимое скрипта asterisk_notification.sh:
Данный скрипт создаёт копию шаблона (notification.call), заменяет параметры Called Number, Caller ID и перемещает в каталог, чтобы Asterisk обработал данный файл и совершил оповещающий звонок.
Содержимое шаблона notification.call:
Т.е. выполняем 1 звонок длиной в 1 секунду из контекста rtorrent-notification.
Содержимое extensions.conf (пока предлагаю просто смотреть на CallerID, так что кладём трубку):
Что имеем в итоге: по окончании загрузки торрента rTorrent запускает скрипт, который генерирует оповещалку с необходимыми параметрами и передаёт Asterisk'у для того, чтобы он позвонил на нужный номер и с помощь Caller ID вида "F:Name_of_Torrent_File <222>" сообщил, что скачивание торрента Name_of_Torrent_File завершено (об этом говорит префикс F:, т.е. Finished:, и номер 222).
А добавив в .rtorrent.rc ещё одну строчку:
Будем дополнительно получать уведомления о том, что торрент поставлен на скачивание (event.download.inserted_new). Уведомление будет приходить с префиксом S: и с номера 111. По сути это ещё и уведомление о том, что rTorrent и Asterisk функционируют в штатном режиме :).
Чем мне импонирует Asterisk, так это возможностями, ограниченными только воображением :). Я уже описывал реализацию получения прогноза погоды с помощью Asterisk, в планах описать и то, как мне стало лень названивать самому и теперь Asterisk сам звонит мне в том случае, если завтра будут осадки или температура выйдет за указанные пределы :).
Howto: Use rtorrent like a pro
Для начала добавим в .rtorrent.rc следующее:
# On completion, call via Asterisk system.method.set_key = event.download.finished,call_on_complete,"execute=sudo,/home/rtorrent/scripts/asterisk_notification.sh,completed,003,222,F:,$d.get_name="
Далее разрешим пользователю rtorrent запускать скрипт через sudo без запроса пароля. Для этого правим /etc/sudoers и добавляем строки:
Cmnd_Alias CMDS = /home/rtorrent/scripts/asterisk_notification.sh rtorrent ALL=NOPASSWD: CMDS
Содержимое скрипта asterisk_notification.sh:
#!/bin/bash # Script generates Asterisk call-file from a template by changing # parameters to the passed ones # Arguments are: $1 - part of the call-file name # $2 - extension to call (called number) # $3 - Caller ID Number # $4 - Caller ID Name prefix (S: or F: for torrent start and finish) # $5 - Caller ID Name (torrent name) # Initialization stage fn=notification.call # Source filename sd=/home/rtorrent/scripts # Source directory dd=/var/spool/asterisk/outgoing/ # Destination directory sf=$sd/$fn # Source file (full path) tag=`date +"%F_%H-%M-%S.%N"` # get current date-time-nanoseconds cf=$sd/torrent_$1_$tag.call # Copied file (full path) # Action stage cp $sf $cf # create a copy of Call-file (template) sed -r -i 's/CHAN-VAR/'"$2"'/' $cf # Change called number sed -r -i 's/CID-NUM/'"$3"'/' $cf # Change callerid number sed -r -i 's/CID-NAME/'"$4$5"'/' $cf # Change callerid name chown asterisk:asterisk $cf # Prepare ownership for Asterisk mv $cf $dd # Move Call-file to call directory
Содержимое шаблона notification.call:
Channel: SIP/CHAN-VAR Callerid: CID-NAME <CID-NUM> Context: rtorrent-notification WaitTime: 1 MaxRetries: 0 Extension: 0
Содержимое extensions.conf (пока предлагаю просто смотреть на CallerID, так что кладём трубку):
[rtorrent-notification] exten => s,1,Answer() exten => s,n,Wait(1) exten => s,n,Hangup()
Что имеем в итоге: по окончании загрузки торрента rTorrent запускает скрипт, который генерирует оповещалку с необходимыми параметрами и передаёт Asterisk'у для того, чтобы он позвонил на нужный номер и с помощь Caller ID вида "F:Name_of_Torrent_File <222>" сообщил, что скачивание торрента Name_of_Torrent_File завершено (об этом говорит префикс F:, т.е. Finished:, и номер 222).
А добавив в .rtorrent.rc ещё одну строчку:
# On completion, call via Asterisk system.method.set_key = event.download.finished,call_on_complete,"execute=sudo,/home/rtorrent/scripts/asterisk_notification.sh,completed,003,222,F:,$d.get_name=" # On new torrent insertion, call via Asterisk system.method.set_key = event.download.inserted_new,call_on_insert_new,"execute=sudo,/home/rtorrent/scripts/asterisk_notification.sh,inserted_new,003,111,S:,$d.get_name="
Чем мне импонирует Asterisk, так это возможностями, ограниченными только воображением :). Я уже описывал реализацию получения прогноза погоды с помощью Asterisk, в планах описать и то, как мне стало лень названивать самому и теперь Asterisk сам звонит мне в том случае, если завтра будут осадки или температура выйдет за указанные пределы :).
Несколько ссылок:
rTorrent_XMLRPC_referenceHowto: Use rtorrent like a pro
Комментариев нет:
Отправить комментарий