Используем torrent клиент transmission вместе с Home Assistant

В данной короткой заметке рассмотрим процесс установки клиента transmission в свой собственный docker контейнер и интеграции его с Home Assistant (бывший Hass.io). Интеграция позволит отображать состояние загрузки торрентов, а также управлять клиентом.

Данный метод применим если Home Assistant (бывший Hass.io) установлен поверх существующей операционной системы, то есть у вас есть доступ к командной строке хоста.

Небольшое отступление о необходимости доступа к командной строке хоста

Технически, доступ к командной строке не обязателен. Можно создать контейнер средствами замечательного аддона Portainer, но тогда нужно убедиться, что на машине где развёрнут Home Assistant (бывший Hass.io) достаточно свободного места для скачивания торрентов. Если с местом всё в порядке, можно создать папку downloads там же, где находится файл конфигурации HA (configuration.yaml), тогда путь ней в параметрах запуска контейнера будет выглядеть так: /config/downloads . Если необходимо подробнее расписать работу с аддоном Portainer, пишите в комментариях.

Находим контейнер

Не мудрствуя лукаво выберем первый из поисковой выдачи гугла: https://hub.docker.com/r/linuxserver/transmission/ Согласно инструкции, создать контейнер можно двумя способами: одной длинной командой докера, либо созданием файла docker-compose. Воспользуемся первым способом, а команду создания контейнера поместим в файл шелл-скрипта для удобного редактирования и повторного использования.

Создадим в домашней директории пользователя папки для хранения конфигурации transmission и для слежения за новыми торрентами (т.н. watch folder):

mkdir -p ~/docker/transmission/config/watch
nano ~docker/transmission/start.sh

Cкопируем в редактор команду для создания докер-контейнера:

docker create \
  --name=transmission \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Europe/Moscow \
  -p 9091:9091 \
  -p 51413:51413 \
  -p 51413:51413/udp \
  -v /home/user/docker/transmission/config:/config \
  -v /mnt/torrents:/downloads \
  -v /home/user/docker/transmission/config/watch:/watch \
  --restart unless-stopped \
  linuxserver/transmission

Путь /home/user/docker/transmission/config указывает на папку config в домашней директории вашего пользователя. Папку /nfs/torrents нужно заменить на полный путь к папке, в которую клиент будет скачивать файлы. У меня эта папка является примонтированным сетевым диском NAS.

Важно убедиться, что в конце shell файла нет пробелов и переносов строк, docker по какой-то причине болезненно воспринимает эти артефакты и может ругаться непонятными сообщениями вроде invalid reference format.

Разбираемся с правами

Если возникнут проблемы с правами доступа к папке с закачками (например, transmission не сможет создать скачиваемый файл), нужно убедиться, что владельцем папки /nfs/torrents(у вас будет своя папка) является тот же пользователь, ID которого (PUID и PGID) указаны в параметрах запуска контейнера. Узнать PUID/PGID пользователя можно с помощью команды id имя пользователя. Узнать имя владельца папки можно с помощью команды ls -l.

Запускаем контейнер

Создадим контейнер командой sh start.sh. Если ошибок нет, запустим его командой docker start transmission и тут же проверим логи на предмет ошибок командой docker logs transmission. Если все прошло нормально, по адресу http://хх.хх.хх.хх:9091 будет доступен веб-интерфейс transmission.

Настраиваем интеграцию с Home Assistant

Для интеграции нашей качалки в Home Assistant добавим в файл конфигурации следующие строки:

transmission:
  host: xx.xx.xx.xx

xx.xx.xx.xx нужно заменить на адрес машины, на которой крутится контейнер transmission. После перезагрузки HA в списке сенсоров добавятся новые значения:

image-20200203231305588

На странице интеграции есть примеры автоматизаций, например, можно отправлять нотификацию по окончании закачки торрента или уменьшать скорость закачки по времени дня, либо другим событиям. Возможности ограничены только вашей фантазией.