TANIX W2 — ВСТАНОВЛЕННЯ DEBIAN, DOCKER І КОНТЕЙНЕРІВ
Після виконання цих інструкцій, ви отримаєте ядро розумного будинку за $20 з енергоспоживанням 2-5W.
Відразу почну з очікуваного питання: «А повернення після Linux на Android TV зробити можна і це дуже просто?» — Так, саме так)
Завантажити Slimbox і записати його на SD-карту програмою — Burn Card Maker 2.0.3 . Установка така сама, як і Debian — вставити картку, затиснути зубочисткою кнопку в аудіороз’єм і підключити живлення. Минут за п’ять на приставці знову Android TV. Тому виконувати цю інструкцію можна без страху та побоювань, у Вас все вийде!
Підготовка носія та образу Debain:
Завантажуємо програму для запису образу на флеш-пам’ять і сам образ:
https://etcher.balena.io/
https://github.com/devmfc/debian-on-amlogic/releases
Записуємо, відкриваємо файл boot.config і видаляємо # зліва від потрібної моделі тв-боксу, в нашому випадку:
| box=tanixw2
Вставляємо флеш-пам’ять (SD/USB). Затискаємо зубочисткою кнопку, яка знаходиться в аудіороз’ємі та подаємо харчування. Чекаємо на 5 секунд.
Вводимо в терміналі (або powershell) в одній локальній мережі з пристроєм:
| ssh root@ip
Пароль: tvbox

ip – адреси, яка присвоєна тв-боксу. Його видно при підключенні плеєра HDMI. Також можна переглянути в роутері або за допомогою програми для смартфона, підключеного до тієї ж локальної мережі, наприклад WIFIMan
Переносимо прошивку на внутрішню пам’ять пристрою:
Вводимо команди по черзі:
| ./aml-multiboot-setup.sh
| ./aml-install-to-emmc.sh
| reboot
Після перезавантаження пристрою знову входимо до ssh:
| ssh root@ip
Пароль:tvbox
Оновлюємо пакети:
| apt update && apt upgrade -y
Встановлюємо пакет nano (текстовий редактор):
| apt install nano
Встановлюємо Docker:
| apt update && apt install -y ca-certificates curl gnupg lsb-release && mkdir -p /etc/apt/keyrings && curl -fsSL https://download.docker.com/linux/debian/gpg | gpg —dearmor -o /etc/apt/keyrings/docker.gpg && echo «deb [arch=arm64 signed-by=/etc/apt/keyrings/docker.gpg] docker-ce-cli containerd.io docker-buildx-plugin docker-compose-

Встановлюємо Portainer (для управління контейнерами):
| docker volume create portainer
| docker run -d —name portainer —restart=always -p 9000:9000 -p 9443:9443 -v /var/run/docker.sock:/var/run/docker.sock -v portainer:/data portainer/portainer-ce:latest
Після встановлення доступів за адресою: http://ip:9000
Розшаримо папку з контейнерами в SMB:
| apt install -y samba samba-common-bin
| nano /etc/samba/smb.conf
Опускаємося вниз файлу, додаємо:
[DockerVolumes]
path = /var/lib/docker/volumes
browseable = yes
read only = no
guest ok = no
valid users = root
force user = root

“CTRL+O” → “ENTER” → “CTRL+X”
smbpasswd -a root
Вводимо пароль для доступу до SMB з логіном root та натискаємо “ ENTER ”
systemctl restart smbd
systemctl enable smbd
Встановлюємо MQTT-брокер:
docker volume create mosquitto
docker run -d —name mosquitto —restart=always —network host -v /var/lib/docker/volumes/mosquitto:/mosquitto eclipse-mosquitto:latest
Потім зупиняємо MQTT:
docker stop mosquitto
Створюємо файл – mosquitto.conf
mkdir -p /var/lib/docker/volumes/mosquitto/config
nano /var/lib/docker/volumes/mosquitto/config/mosquitto.conf
Вставляємо текст:
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log
listener 1883
allow_anonymous false
password_file /mosquitto/config/passwd
Після введення зберігаємо та виходимо: “CTRL+O” → “ENTER” → “CTRL+X”
Створюємо файл — passwd
Заходимо на сайт: https://dmelo.eu/blog/mosquitto_passwd_gen/
Вводимо:
Username — homeassistant
Password — вигадуєте пароль до брокера та вводите його
Iterations — 100
Натискаємо Generate
У зеленому полі з’явився пароль.

У SSH вводимо:
nano /var/lib/docker/volumes/mosquitto/config/passwd
Вставляємо туди весь текст із зеленого поля цілком
Після введення зберігаємо та виходимо: “CTRL+O” → “ENTER” → “CTRL+X”
Запускаємо MQTT:
docker start mosquitto
Встановлюємо ESPHome:
docker volume create esphome
docker run -d —name esphome —restart=always —network host -e TZ=Europe/Kyiv -v /var/lib/docker/volumes/esphome:/config
Europe/Kyiv – замінюємо на вашу часову зону. Переглянути список можна за посиланням: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Після встановлення доступів за адресою: http://ip:6052

Встановлюємо Z2M (Zigbee2MQTT):
docker volume create z2m
docker run -d —name zigbee2mqtt —device /dev/ttyUSB0:/dev/ttyUSB0 —restart=always —network host -v /var/lib/docker/volumes/z2m:/app/data koenkk/zigbee2mqtt:latest
PS рядком —device /dev/ttyUSB0:/dev/ttyUSB0 \ ми прокидаємо в наш контейнер доступ до USB-zigbee координатора. Якщо він знаходитись на іншому порту, потрібно прописати інший. Дізнатися про це можна командою:
ls -l /dev/ttyUSB*
або, якщо нічого не знайшло:
ls -l /dev/ttyACM*
Ми побачимо:

УВАГА ! Zigbee2MQTT треба налаштовувати, шляхом редагування файлу configuration.yaml у папці » z2m «, у нас вона доступна в SMB.
Тому потім зупиняємо Z2M:
docker stop zigbee2mqtt
Налаштовуємо configuration.yaml :

YOUTUBE має докладні професійні інструкції налаштування Z2M під кожен конкретний адаптер Zigbee.
Після чого запускаємо Z2M:
docker start zigbee2mqtt
Після встановлення доступів за адресою: http://ip:8080

Встановлюємо HomeAssistant:
docker volume create homeassistant
docker run -d —name homeassistant —device /dev/ttyUSB0:/dev/ttyUSB0 —restart=always —network=host -v /var/lib/docker/volumes/homeassistant:/config ghcr.io/home-assistant/home-assistant:stable
Якщо у вас Zigbee-координатора немає, то цю строчку вводити не потрібно:
—device /dev/ttyUSB0:/dev/ttyUSB0 \
Коли з’явиться – виконайте:
docker stop homeassistant
docker rm homeassistant
І встановіть Home Assistant — повторно ( ↑ «Встановлюємо HomeAssistant»)
Всі ваші дані будуть залишатися без змін (але на всякий випадок робіть регулярні автобекапі HomeAssistant біля хмари та ручні бекапі перед подібними маніпуляціями).
Після встановлення доступів за адресою: http://ip:8123

Установка HACS:
Після встановлення та налаштування Home Assistant заходимо за адресою та завантажуємо:
https://github.com/hacs/integration/releases/tag/2.0.5
Розпаковуємо та папку HACS поміщаємо в папку «custom_components» (якщо ні — створіть) у кореневому каталозі контейнера (там, де файли configuration.yaml).
Перезавантажуємо систему, заходимо Установки — Пристрої та служби — Додати інтеграцію та шукаємо HACS.
Після перезавантаження ми отримаємо HACS.
Встановлюємо Watchtower (контейнер для автоматичного оновлення всіх контейнерів у DOCKER):
docker run -d —name watchtower —restart=always -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower —cleanup —interval 86400
interval 86400 – година за секунди з моменту запуску контейнера. 86400 = 24 години.
Бонус:
Додаємо SD-карту або флешку, примонтуємо її (щоб не відвалювалася після перезавантаження), розшаримо по SMB, а також встановимо контейнери, які дозволять качати торенти, а також відео з відеосервісів (youtube, rutube тощо).
Підготовка SD-картки/флешки
Перевіряємо, як називається розділ карти/флешки (нам потрібно поле NAME, де вказано розмір, у мене це mmcblk0p1, вам потрібно в коді нижче замінити на своє значення):
lsblk -f
Бачимо назву нашої карти. У мене це — mmcblk0p1 , вам потрібно замінити на свою назву.
Потім:
mkdir -p /mnt/sdcard
mount /dev/mmcblk0p1 /mnt/sdcard
mkfs.ext4 /dev/mmcblk0p1
mount /dev/mmcblk0p1 /mnt/sdcard
Відкриваємо ще раз список та копіюємо UUID:
lsblk -f
(У мене це: e929e3e0-8601-7e4e-9351-2a219d220963 , вам, в коді нижче, потрібно замінити на свій!).
Вводимо команду:
nano /etc/fstab
Внизу файлу вставляємо:
UUID=e929e3e0-8601-7e4e-9351-2a219d220963 /mnt/sdcard ext4 defaults 0 2
Після введення зберігаємо та виходимо: “CTRL+O” → “ENTER” → “CTRL+X”
Розшаруємо SD-картку/флешку за SMB
nano /etc/samba/smb.conf
Опускаємося у самий низ і додаємо текст:
[sdcard]
path = /mnt/sdcard
browseable = yes
writable = yes
guest ok = no
valid users = root
Після введення зберігаємо та виходимо: “CTRL+O” → “ENTER” → “CTRL+X”
Вводимо команду:
systemctl restart smbd
Зовнішню пам’ять тепер видно у SMB.
Встановлюємо MeTube (програму для завантаження відео з відеосервісів):
docker volume create metube
docker run -d —name metube -v /var/lib/docker/volumes/metube:/config -v /mnt/sdcard:/downloads -p 8081:8081 —restart=always ghcr.io/alexta69/metube:latest
Після встановлення доступів за адресою: http://ip:8081

За фактом це форк YT-DLP, оформлений у приємний веб-інтерфейс.
Підтримуються: youtube, rutube та сотні інших сайтів.
Список підтримуваних сайтів можна знайти тут:
https://github.com/yt-dlp/yt-dlp/blob/master/supportedsites.md
Встановлюємо qBittorrent:
docker volume create qbittorrent
docker run -d —name qbittorrent -v /var/lib/docker/volumes/qbittorrent:/config -v /mnt/sdcard:/downloads -p 9080:8080 —restart=always linuxserver/qbittorrent
docker stop qbittorrent
nano /var/lib/docker/volumes/qbittorrent/qBittorrent/qBittorrent.conf
Опускаємось біля самого низу і додаємо (блок — [Preferences]):
WebUI\HostHeaderValidation=false
WebUI\CSRFProtection=false
WebUI\LocalHostAuth=false
Після введення зберігаємо та виходимо: “CTRL+O” → “ENTER” → “CTRL+X”
docker start qbittorrent
docker logs qbittorrent —tail 50
Після цього ви побачите балку з тимчасовим паролем для першої сесії.
Після встановлення доступів за адресою: http://ip:9080
Заходьте до веб-інтерфейсу, логін: admin, пароль: тієї, що у лозі. І змінюєте мову, пароль.
Після налаштування перезавантажуєте SMB:
systemctl restart smbd
Готово. Усі файли MeTube та qBittorrent будуть зберігатися в корінь зовнішнього сховища (або підпапку, якщо це настроїти в qBittorrent).
Також керувати qBittorrent можна в додатку для Android — qBitcontroller
Рекомендую зберегти цю команду — systemctl restart smbd . Іноді SMB чомусь довго розуміє і нових файлів може бути не видно. Введення цієї команди перезавантажує SMB, і всі файли одразу видно.
Що стосується MeTube і qBittorrent – рекомендую здорово оцінювати ресурси даного медіаплеєра. Очевидно, що продуктивність упиратиметься у швидкість LAN 100мбіт (12 мбайт на секунду). Це стосується і завантаження і локальної передачі файлів SMB. Загалом працює без проблем, проте не варто забувати, що на сервері присутні й інші контейнери. Дивіться на стабільність роботи. У разі потреби — налаштуйте у qBittorrent черговість та обмежуйте кількість трекерів.
У мене версія 2/16 ГБ, але мені ресурсів цілком вистачає. Навантаження ЦП у звичайному режимі роботи коливається від 10% до 20%, завантаження RAM — близько 60%, так що в принципі запас є. Час завантаження Home Assistant від подачі живлення – 40 секунд до появи веб-інтерфейсу, а далі залежить від ваших інтеграцій. У мене це 2:10, що цілком прийнятно.
Також важливо розуміти, що для відеоспостереження (того ж Frigate) ресурсів даного медіаплеєра може не вистачити.
Якщо щось, колись піде не так — завжди можна почати спочатку 🙂
Ну ось і все! УРА! Тепер у нас є ядро розумного будинку за ціною ~ $ 20 з енергоспоживанням 2-5W.
