Начав этот долгий путь построения своего медиацентра с Kodi на борту, я изначально ставил перед ним задачи, немного выходящие за рамки его основного функционала, такие как просмотр фильмов или сериалов. Считаю, что устройство, работающее 24/7 может и должно быть использовано по максимуму. Вот так, постепенно, мой сервер обрастал все новыми и новыми возможностями. Весь этот путь – в предыдущих публикациях.

KODI: собираем удобный и функциональный медиацентр для дома

К сожалению, объем одной публикации на хабре ограничен, потому всё, чем хотел бы поделиться никак не уместить в один пост. Разделил на несколько частей...
Часть 1. Аппаратная часть, подготовка ОС, базовая настройка сервера и Kodi
Часть 2. YouTube, qBittorrent, управление Yatse и Kore, учет трафика VnStat
Часть 3. Ретро-игры
Часть 4. Архив IPTV
Часть 5. Яндекс.Музыка
Часть 6. MariaDB и синхронизация медиатеки
Часть 7. Управление iOS-устройством
Часть 8. Telegram-бот для qBittorrent
Часть 9. Spotify
Часть 10. IVI и Netflix

Одной из основных задач моего сервера – торрент-качалка. Использую ее не только для видео-контента, но и для загрузки какой-то общей информации, как по работе, так и для дома. Нет потребности во включенном ПК и необходимости дожидаться загрузки, оставляя на ночь и так далее. Есть ведь бесшумный медиацентр, который работает и днем и ночью.

И с этой задачей он справляется безупречно. Мне по душе qBittorrent, ввиду его «легкости», «бесплатности» и отличного веб-интерфейса, полностью повторяющего GUI-интерфейс. Для android-устройств есть приложение, с которого также очень удобно управлять загрузками - qBittorrent Controller.

И все бы ничего, но иногда есть потребность добавить торрент на загрузку, находясь вне дома. Варианты с покупкой статического IP-адреса, сервисов DDNS или банального AnyDesk с постоянным доступом меня не устраивали.

Благо, в наше время, с активно развивающимися социальными сетями, с этой задачей легко справится Telegram. У вас всегда будет под рукой доступ к домашней торрент-качалке, где бы вы не находились и прямо из мессенджера. По-моему, это красивое решение.

Изобретать и писать с нуля Telegram-бота не вижу особого смысла, в сети есть масса готовых и стабильных решений. Хотя при большом желании и базовых навыках Python, это тоже вполне реально, учитывая подробную документацию и описание API как со стороны Telegram, так и qBittorrent. Поэтому, если вы преследуете еще и образовательную цель - это отличный повод в чем-то разобраться и сделать самостоятельно.

Сегодня мы воплотим идею с Telegram-ботом в жизнь. Как и прежде, вся реализация будет на базе Kubuntu 20.04. Бота буду использовать с итальянскими корнями - QBittorrentBot. Автор - Mattia Vidoni (ch3p4ll3), как сам он себя описывает – «19yo Italian boy who likes do things» («19-летний итальянский парень, который любит что-то делать»).

И так, приступим. Сначала, мы создадим самого Telegram-бота в мессенджере, а уже потом перейдем к его интеграции и взаимодействию с торрент-клиентом на нашем сервере.

Для регистрации бота открываем в Telegram чат с ботом BotFather. Это самый простой способ, не требующий специальных навыков.

Начинаем общение с BotFather, отправив ему команду на создание нового бота - /newbot.

Вводим имя для бота – например, «Home qBittorrent Control». Следующим шагом вводим username – должно быть уникально в рамках всей социальной сети и на конце содержать «bot» или «_bot». Вводим, если имя неуникально – вам об этом сообщит бот и попросит ввести повторно. Я использовал username – «myqbittorrent_bot», имя свободно, наш бот успешно создан и нам сообщили его токен для доступа к HTTP API. Сохраняем его, он нам еще пригодится.

Теперь можно добавить нашего бота t.me/<имя-бота> и запустить. Пока он ничего, конечно, не умеет и какого-то диалога у вас с ним не выйдет...

В BotFather по команде /mybots вы можете выбрать вашего бота и получить по нему информацию (токен, например, если забыли). Также вы можете редактировать своего бота. Изменить имя или описание, загрузить аватарку («Edit Botpic»). Что я, кстати, и сделал. Для загрузки аватарки используйте изображение с разрешением не менее 250x250 пикселей. Отправлять необходимо как фото, а не файл.

Бот создан, теперь необходимо получить ID вашего аккаунта в Telegram, как администратора этого бота. Что бы его узнать – обратимся к еще одному системному боту – https://t.me/myidbot. По команде /getid вы получите свой ID. Его сохраняем – он нам тоже понадобится чуть позже.

Последнее, что нам нужно от Telegram – это API ID и API HASH. Для получения доступа к API, необходимо перейти по ссылке и зарегистрировать ваше «приложение», как разработчику. На один номер телефона – один ID.

После заполнения всех полей вы получите заветные значения API ID и API HASH.

Итого, по завершении всего описанного выше, у нас на руках должны быть:
• Токен Telegram-бота;
• ID аккаунта в Telegram;
• API ID;
• API HASH.

Дело за малым – осталось прикрутить этого бота к нашему серверу и подружить с qBittorrent.

Сам торрент-клиент мы устанавливали еще в первой публикации. Если у вас он еще не установлен – устанавливаем:

sudo apt-get update
sudo apt-get install qbittorrent

В разделе «Веб-интерфейс» настроек qBittorrent включаем «Веб-интерфейс (удаленное управление)». При необходимости меняем логин и пароль или порт.

Логин по умолчанию – admin;
Пароль – adminadmin;
Порт – 8080.

Теперь займемся внедрением нашего Telegram-бота. Скачиваем бота из репозитория нашего 19-летнего итальянского парня и распаковываем по пути /opt/qbittorrent-bot/ с предварительным созданием этого каталога и предоставлением прав на чтение и запись. Путь можно выбрать, любой, который больше подходит вам, но все инструкции ниже, будут построены именно на этом расположении бота, имейте ввиду.

wget -P /tmp https://github.com/ch3p4ll3/QBittorrentBot/archive/refs/heads/master.zip
sudo mkdir /opt/qbittorrent-bot
sudo chmod -R 0777 /opt/qbittorrent-bot
unzip -j /tmp/master.zip -d /opt/qbittorrent-bot
rm /tmp/master.zip

Теперь нам необходимо сконфигурировать бота, указав все параметры подключения, как к Telegram-боту, так и к торрент-клиенту qBittorrent. Параметры будем указывать в конфигурационном файле config.py. Открываем его любым текстовым редактором. Я использую mcedit:

mcedit /opt/qbittorrent-bot/config.py

Обратите внимание, что изначально для каждого параметра есть getenv() – удаляем, указываем просто в кавычках, как на скриншоте:

QBITTORRENT_IP – IP-адрес сервера, где работает торрент-клиент qBittorrent;
QBITTORRENT_PORT – порт удаленного подключения к qBittorrent;
QBITTORRENT_USER имя пользователя для удаленного подключения к qBittorrent;
QBITTORRENT_PSW - пароль для удаленного подключения к qBittorrent;
TG_TOKEN – токен нашего Telegram-бота;
API_ID – API ID, полученный в личном кабинете разработчика Telegram;
API_HASH – API HASH, полученный в личном кабинете разработчика Telegram;
AUTHORIZED_IDS - ID вашего аккаунта в Telegram.

Скачанный нами бот разработан на Python и требует некоторых python-библиотек, в том числе и библиотеки для работы с qBittorrent API и Telegram API. Для установки всех необходимых зависимостей воспользуемся утилитой pip. Если она не установлена – устанавливаем:

sudo apt-get install pip

Теперь устанавливаем нашего бота:

pip install -r /opt/qbittorrent-bot/requirements.txt

И запускаем его:

python3 /opt/qbittorrent-bot/main.py

В случае успешного запуска в консоли вы должны получить уведомление:

Pyrogram v1.2.9, Copyright (C) 2017-2021 Dan <https://github.com/delivrance>
Licensed under the terms of the GNU Lesser General Public License v3 or later (LGPLv3+)

Для проверки добавляем любой торрент на загрузку в qBittorrent.

Идем в Telegram, к нашему боту и отправляем ему команду /start. Если все сделано правильно, то в ответ вы получите меню управления вашими загрузками. К слову, постоянно вызывать это меню командой /start в дальнейшем не нужно (если вы не будете очищать переписку). При переходе в чат с ботом у вас это меню будет уже там.

Теперь момент истины, нажимаем на пиктограмму «List». Бот вам должен вернуть список всех торрентов.

Пробуйте в режиме онлайн управлять, ставить на паузу конкретный торрент или все, добавлять новые. Все должно работать. Для добавления нового торрента к загрузке можно воспользоваться magnet-ссылкой, отправив ее в чат или же отправить непосредственно torrent-файл. Результат одинаков. Бот должен обработать вашу команду и передать ее в qBittorrent.

Проверяйте, этот торрент уже должен быть в очереди торрент-клиента.

Все меню, к слову, на английском языке. Если вам комфортнее другой язык – можете внести изменения в файл bot.py во всех секциях, относящихся к меню и заменить на необходимые вам слова или словосочетания.

Все отлично, бот работает, торрент-клиент управляется из мессенджера. Цель достигнута. Единственное, что осталось сделать – это добавить его в качестве службы в систему и заставить запускаться автоматически, при старте нашего медиацентра. Ведь сейчас мы его запустили вручную и если прервать выполнение (Ctrl+C) – прервется и общение с нашим ботом.

Будем использовать подсистему systemd. Создаем файл с описанием нашей службы для запуска Telegram-бота (назовем службу, например, qbittorrent-bot):

sudo mcedit /etc/systemd/system/qbittorrent-bot.service

Вставляем содержимое (изменить User на вашего пользователя в системе):

[Unit]
Description=qBittorrent-bot
After=multi-user.target

[Service]
Type=idle
User=kodi
ExecStart=python3 /opt/qbittorrent-bot/main.py

[Install]
WantedBy=multi-user.target

Пересобираем все службы systemd:

systemctl daemon-reload

И запускаем нашу службу с Telegram-ботом:

systemctl start qbittorrent-bot

Проверяем, все ли успешно:

systemctl status qbittorrent-bot

В ответ вы должны получить статус «Active: active (running)»:

Теперь добавляем службу в автозагрузку:

systemctl enable qbittorrent-bot

Но необходимо понимать, если при запуске бота не запущен qBittorrent – бот не запустится из-за ошибки подключения к торрент-клиенту. Поэтому стоит позаботиться об автозапуске и самого qBittorrent тоже. Я добавил через параметры системы Kubuntu.

Все готово, можно перезагрузить систему и проверить автозапуск.

Теперь ваш домашний сервер стал еще чуточку «умнее» и «послушнее». Всем хорошего времяпрепровождения с вашим медиацентром!

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


  1. MusicMan67
    20.09.2021 13:02

    Добрый день! Статья интересная, про бота было интересно почитать. На скриншоте обведена вероятная ошибка, если не прав, поправьте, а если прав - поправьте :)


    1. arboozof Автор
      20.09.2021 16:41

      Добрый день! Не думаю, что есть какое-то единственное и правильное написание юнита для этого частного случая. Учитывая, что для запуска бота жизненно необходим запущенный qBittorren (иначе бот свалится в ошибку при неудачном подключении к торрент-клиенту), изначально была идея создать службу для запуска qBittorent после поднятия сетевого интерфейса (After=network.target), а уже службу с ботом запускать после запуска службы с qBittorrent. В рамках systemd это было бы очень просто отслеживать и определять порядок выполнения. Но идею не смог воплотить в жизнь — запуск торрент-клиента из-под systemd так и не победил. В итоге добавил его в автозагрузку из Kubuntu.


      И вот для надежности, что qBittorrent точно запущен и можно запускать бота (определил в том числе и опытным путем) — я выбрал After=multi-user.target, что означает запуск после всех включенных служб.


      Если я не верно мыслю или у вас есть другое решение, а быть может и вариант запуска qBittorrent из systemd — с удовольствием его проверю. Мы ведь все учимся :)


      1. arboozof Автор
        20.09.2021 17:35

        Только сейчас увидел. Что там ошибка, в смысле "опечатка"...)))) исправлено.


  1. VyacheslavS
    20.09.2021 16:06

    Кто подскажет как в KODI удобнее всего смотреть с IP видеокамер потоки ONVIF или RTSP?


    1. arboozof Автор
      20.09.2021 16:46

      Я лично не занимался этим вопросом в kodi. Если ошибаюсь — меня поправят. Думаю самый простой и удобный способ (без костылей и надстроек) это создать m3u-плейлист со ссылкой rtsp://… И проигрывать этот плейлист из kodi стандартным проигрывателем. В теории это должно работать.


      1. VyacheslavS
        20.09.2021 16:51

        Не очень удобно переключаться по плейлисту, если камер 2 и более.


        1. arboozof Автор
          20.09.2021 16:58

          Пробовали плагин?
          Surveillance Room — Your IP Camera Companion with extra Foscam HD Support


          Судя по скриншотам — довольно гибкое дополнение и может работать с несколькими камерами:
          https://imgur.com/a/mRsaY#RfpD1Jk


  1. DWeiss
    21.09.2021 18:34
    -1

    Очень познавательно, хотя не очень понятно для чего так извращаться. Почти в любом роутере есть сервис напоминающий динднс ну или можно поставить приложение на устройство которое будет апдэйтить этот сервис при смени внешнего адреса. И все совершенно бесплатно.


    1. arboozof Автор
      21.09.2021 23:17

      Выбор всегда за пользователем :)


  1. usa_habro_user
    22.09.2021 08:02

    Непонятно, зачем все эти "танцы с бубном"? Поднял на роутере VPN (такая опция есть практически на любом роутере сейчас, как мне кажется; по крайней мере, на моем, весьма стареньком и недорогом ныне RT-N66U есть) и все - "рули" чем хочешь без открытых портов. А динамический DNS прикрутил (я пользуюсь уже много лет https://www.noip.com), и вообще по имени просто обращайся (к роутеру). Хоть с телефона, хоть с ноутбука, хоть с утюга - никаких тебе телеграмов/инстаграмов/"опись, протокол, сдал-принял, отпечатки пальцев! " (c)