Начав этот долгий путь построения своего медиацентра с 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)
VyacheslavS
20.09.2021 16:06Кто подскажет как в KODI удобнее всего смотреть с IP видеокамер потоки ONVIF или RTSP?
arboozof Автор
20.09.2021 16:46Я лично не занимался этим вопросом в kodi. Если ошибаюсь — меня поправят. Думаю самый простой и удобный способ (без костылей и надстроек) это создать m3u-плейлист со ссылкой rtsp://… И проигрывать этот плейлист из kodi стандартным проигрывателем. В теории это должно работать.
VyacheslavS
20.09.2021 16:51Не очень удобно переключаться по плейлисту, если камер 2 и более.
arboozof Автор
20.09.2021 16:58Пробовали плагин?
Surveillance Room — Your IP Camera Companion with extra Foscam HD SupportСудя по скриншотам — довольно гибкое дополнение и может работать с несколькими камерами:
https://imgur.com/a/mRsaY#RfpD1Jk
DWeiss
21.09.2021 18:34-1Очень познавательно, хотя не очень понятно для чего так извращаться. Почти в любом роутере есть сервис напоминающий динднс ну или можно поставить приложение на устройство которое будет апдэйтить этот сервис при смени внешнего адреса. И все совершенно бесплатно.
usa_habro_user
22.09.2021 08:02Непонятно, зачем все эти "танцы с бубном"? Поднял на роутере VPN (такая опция есть практически на любом роутере сейчас, как мне кажется; по крайней мере, на моем, весьма стареньком и недорогом ныне RT-N66U есть) и все - "рули" чем хочешь без открытых портов. А динамический DNS прикрутил (я пользуюсь уже много лет https://www.noip.com), и вообще по имени просто обращайся (к роутеру). Хоть с телефона, хоть с ноутбука, хоть с утюга - никаких тебе телеграмов/инстаграмов/"опись, протокол, сдал-принял, отпечатки пальцев! " (c)
MusicMan67
Добрый день! Статья интересная, про бота было интересно почитать. На скриншоте обведена вероятная ошибка, если не прав, поправьте, а если прав - поправьте :)
arboozof Автор
Добрый день! Не думаю, что есть какое-то единственное и правильное написание юнита для этого частного случая. Учитывая, что для запуска бота жизненно необходим запущенный qBittorren (иначе бот свалится в ошибку при неудачном подключении к торрент-клиенту), изначально была идея создать службу для запуска qBittorent после поднятия сетевого интерфейса (After=network.target), а уже службу с ботом запускать после запуска службы с qBittorrent. В рамках systemd это было бы очень просто отслеживать и определять порядок выполнения. Но идею не смог воплотить в жизнь — запуск торрент-клиента из-под systemd так и не победил. В итоге добавил его в автозагрузку из Kubuntu.
И вот для надежности, что qBittorrent точно запущен и можно запускать бота (определил в том числе и опытным путем) — я выбрал After=multi-user.target, что означает запуск после всех включенных служб.
Если я не верно мыслю или у вас есть другое решение, а быть может и вариант запуска qBittorrent из systemd — с удовольствием его проверю. Мы ведь все учимся :)
arboozof Автор
Только сейчас увидел. Что там ошибка, в смысле "опечатка"...)))) исправлено.