Infinix Zero 30
Categories: Інструкції

Raspberry Pi в домашній екосистемі: Можливості та приклади (частина 1)

Деякий час назад я придбав одноплатний міні-комп’ютер Raspberry Pi 4 (він же «малинка» в середовищі любителів), не особливо розуміючи, як і для чого його можна використовувати в домашніх умовах. Швидше, це була чергова технологічна іграшка, причому за абсолютно прийнятні гроші, тому можна було дозволити собі поекспериментувати. Забігаючи вперед, можу сказати, що зараз у мене на RPi4 крутяться такі сервіси, як network-wide блокувальник реклами AdGuard Home, система зберігання бекапів Apple Time MachineHomebridge для додавання несертифікованих пристроїв в екосистему Apple HomeKit, програма для скачування торрентів Transmission, медіасервер PLEX і ігрова ретро-консоль RetroPie. У планах проекспериментувати з self-hosted менеджером паролів Bitwarden, open source аналогом знаменитого 1Password. Не так уже й мало для такої крихітки розміром з пачку сигарет, вірно?

У цьому циклі з двох статей я постараюся максимально докладно розповісти, як я все це встановлював і налаштовував.

Перша стаття буде більше корисна маководам, оскільки торкається специфічних для екосистеми Apple моментів, хоча розділ, що стосується AdGuard, буде цікавий користувачам будь-якої настільної або мобільної операційної системи.

У другій статті розглянемо універсальні сервіси, які можуть бути корисними всім без винятку. А просуватися ми з вами будемо, як нормальні люди – від простого до складного.

Підготовка Raspberry Pi

Потрібно зауважити, що ранні ревізії Raspberry Pi були досить слабкими в апаратному плані, тому кожен розробник програмного забезпечення сприймав цей комп’ютер як однозадачну машину. Через це будь-який сервіс, який можна запустити на RPi, за замовчуванням пропонується завантажити у вигляді готового образу операційної системи. Скачав, записав на SD-картку, засунув в RPi і включив готовий комп’ютер з встановленим сервісом. Але наше завдання – запустити одночасно кілька сервісів, благо нинішня ревізія це дозволяє. Тому їх ми будемо встановлювати як застосунки.

Припустимо, що Raspberry Pi з «чистою» системою Raspbian ви вже підключили до локальної мережі. Якщо ви новачок і не знаєте, з чого взагалі почати, то почніть з  офіціальної інструкції (за посиланням – чудовий покроковий майстер з масою інтерактивних ілюстрацій), а потім переходите до наступного етапу.

Крок 1

Перш за все, потрібно включити доступ по SSH до вашої Raspberry Pi. Для цього потрібно виконати кілька нескладних кроків:

  • Відкрийте вікно «Raspberry Pi Configuration» в меню «Preferences» операційної системи
  • Натисніть на вкладку «Interfaces»
  • Виберіть «Enable» поруч з рядком SSH
  • Натисніть на кнопку «ОК», щоб зміни вступили в силу

Якщо у вас встановлена Raspbian Lite без графічного інтерфейсу, в Terminal на самій Raspberry Pi вбийте наступні команди:

sudo systemctl enable ssh
sudo systemctl start ssh

Доступ включений.

У мене комп’ютер з macOS, тому я можу відразу приступати до подальших кроків, як і власники комп’ютерів з Linux. Користувачі Windows 10 теж отримали в складі своєї операційної системи вбудований клієнт OpenSSH деякий час назад, але для його активації може знадобитися виконати деякі маніпуляції.

Відкрийте командний рядок Windows або оболонку PowerShell (кому що подобається) і введіть таку команду:

Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'

Якщо клієнт SSH встановлений, то відповідь на команду буде приблизно такою:

Якщо ж OpenSSH.Client в поле State повідомляє нам, що він NotPresent, то найшвидшим способом його активації буде введення такої команди:

Add-WindowsCapability -Online -Name OpenSSH.Client*

На цьому перший етап підготовки закінчений, в тому числі і для користувачів Windows. З огляду на природу Raspberry Pi і той факт, що OS Raspbian – це фактично ще одна версія Linux, в командному рядку нам доведеться працювати досить багато. Для когось це може здатися незвичним, але повірте, нічого складного або невиправного в цьому немає, так що будьте сміливішими. Все вдасться.

Крок 2

Тепер необхідно зробити так, щоб в локальній мережі ваша Raspberry Pi завжди отримувала одну і ту ж внутрішню IP-адресу. Найпростіше це зробити в налаштуваннях роутера.

Я використовую трикомпонентну MESH-систему  ASUS ZenWiFi Mini зі стандартним веб-інтерфейсом будь-якого роутера цієї компанії. Для зв’язування MAC- і IP-адрес потрібно вибрати пристрій зі списку підключених, і у спливаючому вікні просто вказати потрібний IP. У моєму випадку я вибрав 192.168.50.10 просто для зручності запам’ятовування.

У роутерах інших виробників пункт меню може називатися інакше, але суть його буде незмінною – видача статичних локальних IP підключеним пристроям.

Крок 3

Запускаємо на вашому комп’ютері Термінал (командний рядок, PowerShell і т.д.) зі стандартного комплекту macOS, Linux або Windows.

Вбиваємо команду

ssh pi@<ip address of your server>

(де замість <ip address of your server> вставляємо IP «малинки» з попереднього кроку) і бачимо приблизно таку картину:

Тут потрібно вбити пароль від вашої Raspberry Pi, яку ви вказали при первинному налаштуванні.

Важливо! У процесі введення пароль не буде відображатися на екрані. І «зірочки»  теж не будуть відображатися. Вам потрібно ввести пароль буквально «наосліп» і  натиснути Enter.

При правильному введенні пароля результат буде приблизно таким:

Вітаю, ви всередині вашої Raspberry Pi. Welcome! Можна приступати до налаштувань окремих сервісів. І почнемо ми з самого простого.

Установка і налаштування AdGuard Home на Raspberry Pi

AdGuard Home, згідно зі свідченнями розробника – «потужний мережевий інструмент проти реклами і трекінгу. З посиленням ролі інтернету речей стає все більш і більш важливим управляти всією вашою мережею. Після налаштування, AdGuard Home буде охоплювати ВСІ ваші домашні пристрої, і для цього вам не знадобиться програмне забезпечення на стороні клієнта».

Говорячи простою мовою, це фільтр реклами, що працює не у вигляді окремих застосунків або плагінів до браузеру на кожному вашому пристрої, а універсальне рішення, яке покриває фільтрами всю вашу домашню локальну мережу.

Повернемося у вікно Терміналу (домовимося, що Windows PowerShell і інші оболонки для введення команд, далі по тексту я буду просто називати Терміналом, добре?), Вбиваємо наступні команди, які завантажать і розпакують архів AdGuard Home:

cd $HOME
wget https://static.adguard.com/adguardhome/release/AdGuardHome_linux_armv6.tar.gz
tar xvf AdGuardHome_linux_armv6.tar.gz

Залишається тільки встановити сервіс і запустити його:

cd AdGuardHome
sudo ./AdGuardHome -s install

Результат буде виглядати приблизно так:

AdGuard Home вже встановлено! Це було просто, чи не так?

Тепер потрібно відвідати веб-інтерфейс свіжовстановленого сервісу. Запустіть браузер (Safari, Chrome, Firefox або що там у вас – неважливо) і в адресному рядку вбийте https://<ip address of your server>:3000. У моєму випадку це, як ми пам’ятаємо, https://192.168.50.10:3000.

Ви побачите покроковий майстер первинного налаштування. Якщо вам зручніше інтерфейс іншою мовою, можна відразу переключитися на потрібний. У списку, крім інших, є український, польський та російський.

На третьому кроці вам буде запропоновано створити користувача AdGuard Home і придумати йому пароль. На четвертому буде роз’яснено, що IP-адресу Raspberry Pi (ту саму 192.168.50.10 в моєму випадку) потрібно прописати в якості DNS у відповідному розділі налаштувань роутера. Зробіть це:

У роутерах інших виробників потрібний пункт налаштувань буде перебувати приблизно на цьому ж шляху.

Далі переходимо до налаштувань самого AdGuard Home, поки ще невинно чистого.

Якщо у вас є Smart TV Samsung, LG, або аналогічний, зайдіть в меню «Фільтри – Додати чорний список» і там «Вибрати зі списку». Активуйте відповідний Blocklist.

Тепер потрібно додати російсько/україномовні фільтри реклами вручну. Знову натисніть «Додати чорний список», а потім «Додати свій список» і послідовно вбийте наступні значення у відповідних полях:

Ім’я URL-адреса
AdGuard Base filter https://filters.adtidy.org/extension/chromium/filters/2.txt
AdGuard Russian filter https://filters.adtidy.org/extension/chromium/filters/1.txt
AdGuard Tracking Protection filter https://filters.adtidy.org/extension/chromium/filters/3.txt

Для початку цих фільтрів цілком достатньо.

Для порівняння я зазвичай використовую напханий класичними банерами сайт exler.ru. Ліворуч – до, праворуч – після застосування фільтрів.

Оновлення AdGuard Home відбувається в ручному режимі, але запускається буквально однією кнопкою і займає кілька секунд, не вимагаючи втручання.

На цьому, взагалі-то, все. З цього моменту всі ваші домашні пристрої практично не піддаються рекламному впливу. Неприємним винятком тут є клієнтська програма YouTube на приставках Apple TV, але тут вступають в силу обмеження архітектури tvOS, тому AdGuard в цьому випадку безсилий.

Установка і налаштування Time Machine на Raspberry Pi

Згідно з Вікіпедією, Time Machine – система резервного копіювання, розроблена Apple і вбудована в Mac OS X Leopard і більш пізні версії macOS, а також однойменна програма, що дозволяє переглядати вміст резервних копій і відновлювати як окремі файли, так і операційну систему цілком.

Попросту кажучи, це система щогодинних бекапів, вбудована в macOS, і яка вимагає наявності сумісного файлового сервера. Саме на такий сервер можна перетворити Raspberry Pi, якщо підключити до нього зовнішній USB HDD.

Для коректної роботи Time Machine підходить тільки Raspberry Pi 4 або новіше, з портами USB 3.0 (в попередніх моделях порти більш повільні) і відповідний HDD об’ємом 1-3 терабайта (із зовнішнім живленням, якщо це диск на 3,5 дюйма).

Важливо! Є два мережевих протоколу, за якими macOS може складувати дані Time Machine в локальній мережі. Застарілий Netatalk, або більш сучасна Samba. Використовувати для задач Time Machine, в принципі, можна будь-який з них. Інтернет повний інструкцій по організації процесу саме через Netatalk, причому всі ці інструкції різного ступеню химерності, але моє завдання – дати найпростіший, гарантовано робочий варіант. А ваше завдання – вибрати зручний для себе. Так що в статті розглянемо обидва.

Підготовка HDD

Підключаємо HDD в порт USB 3.0 нашої Raspberry Pi, заходимо на неї в Терміналі по SSH і запускаємо команду lsblk, яка виведе в консолі список підключених дисків. Звертаємо увагу на розмір диска, щоб точно переконатися, з яким з них будемо працювати, на його ім’я і точку монтування, в моєму випадку це просто sda, у вашому буде ще точка монтування, швидше за все /dev/sda‌. Вона то нам і потрібна.

Вводимо команду sudo fdisk /dev/sda (або з будь-якої іншою точкою монтування, актуальною у вашому випадку), потім натискаємо на клавіатурі m, щоб побачити повний список команд. Можете навіть скопіювати його в окремий текстовий файл (або скористатися підказкою нижче).

GPT
M   enter protective/hybrid MBR

Generic
d   delete a partition
F   list free unpartitioned space
l   list known partition types
n   add a new partition
p   print the partition table
t   change a partition type
v   verify the partition table
i   print information about a partition

Misc
m   print this menu
x   extra functionality (experts only)

Script
I   load disk layout from sfdisk script file
O   dump disk layout to sfdisk script file

Save & Exit
w   write table to disk and exit
q   quit without saving changes

Create a new label
g   create a new empty GPT partition table
G   create a new empty SGI (IRIX) partition table
o   create a new empty DOS partition table
s   create a new empty Sun partition table

Наша задача зробити delete a partition стільки разів, скільки знадобиться для повного очищення диска від розділів, а потім створити один новий за допомогою add a new partition. Не забуваємо записати зміни, тобто write table to disk and exit. Впоралися? Відмінно.

Тепер створюємо на диску файлову систему. Звичайної ext4 цілком достатньо, незважаючи на розмаїття думок в мережі, що диск повинен бути обов’язково відформатований в одну з файлових систем Apple. У реальності це тільки ускладнює процес підготовки, не приносячи ніякої користі взагалі.

Вводимо команду sudo mkfs.ext4 /dev/sda1. Готово.

Тепер потрібно дізнатися UUID нашого нового розділу.
Вводимо ls -lha /dev/disk/by-uuid і бачимо щось таке:

Копіюємо UUID від нашого sda1 в окремий текстовий файл, якщо ви не користуєтеся розширеним буфером обміну з історією.

Тепер потрібно створити папку, в яку ми будемо монтувати наш диск, і дати їй відповідні права доступу.

sudo mkdir /mnt/tm && sudo chmod -R 777 /mnt/tm && sudo chown pi:pi /mnt/tm

Монтуємо диск. Для цього редактуемо файл конфігурації командой

sudo nano /etc/fstab

nano в даному випадку – назва встановленого в системі редактора, яким я вважаю за краще користуватися.

Внесіть зміни у відкрившийся файл, додавши в нього рядок виду

UUID=b32c00d8-0aa8-4ec4-b01f-18cbade45e7c /mnt/tm ext4 nofail,defaults 0 2

але з вашим UUID з попереднього кроку. Має вийти так:

Збережіть зміни, натиснувши Ctrl+O і Enter, а потім вийдіть з редактора, натиснувши Ctrl+X.

Перезавантажте Rarspberry Pi командою sudo reboot і після перезавантаження знову увійдіть на неї по SSH.

Вбийте команду df -h і переконайтеся, що диск підмонтований до системи в точці /mnt/tm.

Відмінно, диск підготовлений до роботи.


Установка і налаштування NETATALK (варіант 1)

Встановлюваємо:

sudo apt-get install netatalk -y

Конфігуруємо все в тому ж редакторі nano:

sudo nano /etc/netatalk/afp.conf

І робимо вміст файлу конфігурації в точності ось таким:

‌;
; Netatalk 3.x configuration file
;

[Global]
; Global server settings
  mimic model = TimeCapsule6,106

[Time Machine]
  path = /mnt/tm
  time machine = yes
  valid users = pi

; [Homes]
; basedir regex = /xxxx

; [My AFP Volume]
; path = /path/to/volume

; [My Time Machine Volume]
; path = /path/to/backup
; time machine = yes`

Не забуваємо зберегти результат за допомогою Ctrl+O → Enter → Ctrl+X

Теперь відредактуєто файл nsswitch.conf, додавши в конці рядку hosts: додаткові значення mdns4 mdns.

sudo nano /etc/nsswitch.conf

Результат повинен виглядати так:

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         files
group:          files
shadow:         files
gshadow:        files

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4 mdns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

Знову зберігаємо зміни через Ctrl+O → Enter → Ctrl+X

Далі залишається тільки запустити сервіси:

sudo service avahi-daemon start
sudo service netatalk start

І перевірити їх працездатність командами:

sudo service netatalk status

та

sudo service avahi-daemon status

Результат повинен виглядати так:

Залишається тільки зайти в Налаштування macOS, вибрати розділ Time Machine і побачити в доступних дисках нашу Raspberry Pi.

В якості логіна вказуємо pi, в якості пароля – той, який використовували для доступу по SSH.

Готово, загальноприйнятий варіант через Netatalk налаштований. Тепер кожен раз, коли ваш Mac виявиться в одній локальній Wi-Fi-мережі з Raspberry Pi, резервні копії будуть автоматично складуватися на ваш диск.

Тепер розглянемо альтернативу у вигляді протоколу Samba, який вважається більш надійним.

Установка і налаштування SAMBA (вариант 2)

Встановлюємо Samba:

‌sudo apt-get install samba

Задаємо пароль користувача (для все того ж користувача pi) і редагуємо конфігурацію. Спочатку пароль:

‌sudo smbpasswd -a pi (можна використовувати той же, що і для SSH).

І потім конфігурацію Samba все в тому ж редакторі nano:

‌sudo nano /etc/samba/smb.conf

Вміст блока [global] повинно у підсумку виглядати так:

[global]
security = user
encrypt passwords = true
map to guest = bad user
guest account = nobody

У самий кінець файлу конфігурації додаємо новий блок:

[TimeCapsule]
comment = Time Capsule
path = /mnt/tm
browseable = yes
writeable = yes
create mask = 0600
directory mask = 0700
spotlight = no
vfs objects = catia fruit streams_xattr
fruit:aapl = yes
fruit:time machine = yes

І зберегаємо результат: Ctrl+O, Enter, Ctrl+X.

Перезапускаємо сервис:

‌sudo systemctl restart smb.service

Готово. Залишається, як і в випадку з Netatalk, знайти диск у списку представлених в панелі налаштувань Time Machine.

Установка і налаштування Homebridge на Raspberry Pi

Що ж, ми успішно дісталися до самого масивного блоку статті.

Homebridge – це сервер на основі NodeJS, і який використовує API Homekit для інтеграції пристроїв без сертифікації та початкової підтримки роботи з Apple HomeKit.

Складність налаштування Homebridge в тому, що його плагіни підтримують найрізноманітніші протоколи і пристрої, роблячи їх видимими і керованими з Apple HomeKit. Відповідно, кожен плагін налаштовується по-своєму, часто абсолютно не так, як його побратим для іншого пристрою.

Почнемо. Як завжди, заходимо на Raspberry Pi по SSH і виконуємо кілька кроків.

Установка Node.js

Ви маєте можливість копіювати і вставити в Термінал весь блок коду цілком. В абсолютній більшості випадків цього достатньо. Але якщо так вийшло, що на якомусь етапі установка дала збій, то введіть команди з блоку, які залишилися,  по одній.

# setup repo
curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -

# install Node.js
sudo apt install -y nodejs gcc g++ make python net-tools

# test node is working
node -v

# upgrade npm (version 6.13.4 has issues with git dependencies)
sudo npm install -g npm

Установка Homebridge і Homebridge Config UI X

Для початку встановимо основу наступною командою…

‌sudo npm install -g --unsafe-perm homebridge homebridge-config-ui-x

…і запустимо в якості системного сервісу.

‌sudo hb-service install --user homebridge

Налаштування Homebridge через веб-інтерфейс

У браузері на комп’ютері перейдіть за адресою http://<ip address of your server>:8581 де замість <ip address of your server> все той же IP з самого початку статті, в моєму випадку

Дефолтні значення користувача і пароля однакові: admin

Рекомендую відразу ж перейти до пункту меню «Користувачі» і змінити там дефолтні значення на більш безпечні.

Зробили? Відмінно, далі будемо налаштовувати плагіни.

Наявність різноманітного обладнання вдома диктує нам, які саме плагіни потрібно встановлювати. Цілком можливо, що у вашому випадку набір плагінів буде дещо іншим, але на прикладі моєї конфігурації можна скласти уявлення, з якими нюансами можна зіткнутися в процесі їх налаштування.

Мій комплект плагінів на момент написання статті:

  • Homebridge UI (входить в базову комплектацію і власних налаштувань не має)
  • Hue (для управління освітренням Philips Hue)
  • Apple TV Remote (для управління приставками Apple TV)
  • Mqttthing (для управління лампою Гайвера з прошивкою від Whilser)
  • Samsung Tizen (для управління Smart TV Samsung з Tizen OS)
  • Weather Plus (для автоматизації розумного будинка в залежності від погодних умов)
  • Yeelight WiFi (для управління лампами Xiaomi Yeelight)

Підем по черзі.

Налаштування плагіна Hue

Для установки будь-якого плагіна в Homebridge достатньо перейти на відповідну вкладку веб-інтерфейсу, вбити в рядок пошуку назву потрібної залізяки і вибрати плагін зі списку доступних. Рекомендую звертати увагу на мітку «🛡Verified», версію і дату оновлення плагіна (якщо автор його вже пару років не оновлював, великі шанси, що і працювати він не буде) і обов’язково відкривати посилання на домашню сторінку плагіна, де зазвичай докладно описаний процес установки.

Натискаємо кнопку «Встановити» на плашці потрібного плагіна і чекаємо хвилину-другу, поки плагін не встановиться.

Плагін Homebridge Hue доволі простий в налаштуваннях. Потрібно всього лише задати дефолтне ім’я, яке буде відображатися в логах Homebridge, і вибрати, який тип сумісних пристроїв буде оброблятися плагіном. У моєму випадку це тільки освітлення Philips Hue, причому ще перша версія хаба, кругла.

Заповнивши дані і обов’язково зберігши результат, потрібно тільки натиснути центральну кнопку на хабі Philips Hue і почекати секунд 15, поки плагін розпізнає хаб. Готово!

Залишається тільки взяти в руки iPhone, навести його камеру на QR-код, розташований на вкладці «Статус» веб-інтерфейсу Homebridge, і додати його в якості моста в ваш HomeKit.

Якщо HomeKit як такий у вас вже був заздалегідь налаштований (обрана Apple TV або iPad в якості основного хаба, додані кімнати і т. Д.), то покроковий майстер відразу ж запропонує розподілити всі знайдені освітлювальні прилади Hue за відповідними кімнатами і дати кожному приладу якесь ім’я. У мене у вітальні, наприклад, є лампочки «Стеля 1», «Стеля 2» і «Стеля 3», але засобами самого HomeKit на iPhone (пункт «Об’єднати з іншими пристроями») я об’єднав їх в логічну групу «Верхнє світло» , мені так зручніше. При цьому в тій же вітальні у мене є «Торшер» і «Нічник» – окремі пристрої, але Siri без будь-якого додаткового навчання прекрасно розуміє найрізноманітніші команди:

  • «Включи світло у вітальні (загоряються всі лампи у вітальні)»
  • «Включи торшер»
  • «Яскравість нічника двадцять відсотків»
  • «Включи нічник»
  • «Вимкни верхнє світло»
  • «Синій колір на торшер»
  • «Вимкни світло у вітальні (вимикає всі лампочки в вітальні)»
  • «Вимкни все світло (вимикає освітлення по всій квартирі)»

І так далі. Якщо у вас грамотно налаштована Apple-сім’я, відповідні і абсолютно логічні команди автоматично стають доступними всім учасникам з внесеними у вашу сім’ю Apple ID.

Налаштування плагіна Apple TV Remote

Цей плагін я використовую з однією єдиною метою: створити додатковий вимикач для приставки Apple TV. Справа в тому, що в Apple HomeKit є можливість запрограмувати, наприклад, включення відтворення альбому або плейлиста за заздалегідь заданою умовою, на кшталт «Коли я приходжу додому». І все б добре, але, якщо приставка в цей час спить, то наявність такого сценарію не в змозі її розбудити. А ось додатковий віртуальний вимикач – може. Поїхали:

Крок 1. Встановлюємо сервіс для підхоплення облікових даних Apple TV

sudo npm install -g node-appletv-x

Крок 2. Шукаємо доступні в локальній мережі приставки Apple TV

sudo appletv pair

Крок 3. Створюємо пару з потрібною приставкою. У виводі консолі це буде виглядати приблизно так:

% appletv pair        
✔ Connecting to Living Room
✔ Initiating Pairing
? Enter the 4-digit pin that's currently being displayed on Living Room

На кроці ‌? Enter the 4-digit pin that's currently being displayed on... на екрані вашої обраної приставки Apple TV з’явиться стандартний код з чотирьох цифр для сполучення з пультом (у нашому прикладі це буде 1234), який потрібно вбити прямо там же в консолі.

% appletv pair
✔ Connecting to Living Room
✔ Initiating Pairing
? Enter the 4-digit pin that's currently being displayed on Living Room 1234
✔ Completing Pairing Credentials: 77346115-ED48-46A8-A288-<snip>

Замість <snip> буде кілька рядків мішанини з букв і цифр, їх потрібно скопіювати в окремий текстовий файл цілком, починаючи від першої цифри в рядку Credentials:. Трохи пізніше ці самі credentials нам дуже знадобляться.

Крок 4. Додаємо на вкладці «Конфігурація» веб-інтефейс Homebridge ось такий блок в розділ конфіга "platforms": [

{
   "platform": "AppleTvPlatform",
   "name": "Apple TV Platform",
   "devices": [
      {
         "name": "Гостиная",
         "credentials": "77346115-ED48-46A8-A288-<snip>",
         "isOnOffSwitchEnabled": true,
         "onOffSwitchName": "Apple TV"
      }
   ]
},

…і в рядок "credentials": як раз і вставляємо повний вміст текстового файлу з попереднього кроку.

Ім’я для приставки вибираємо будь-яке, «Гостиная» тут тільки для прикладу.

Крок 5. Встановлюємо сам плагін.

На вкладці «Модулі» веб-інтерфейсу Homebridge вбиваємо в рядок пошуку  Apple TV Remote і натискаємо кнопку «Встановити». Після встановлення плагіну буде запропоновано перезавантажити Homebridge, це робиться натисканням на відповідну кнопку.

Готово, на iPhone в HomeKit з’явився новий вимикач, який тепер можна додати в усі сценарії, де потрібно автоматичне включення приставки.

Голосові команди, на кшталт «Siri, включи Apple TV» або «Siri, вимкни Apple TV» також автоматично підтримуються. Причому, якщо налаштувати декілька приставок в різних кімнатах, то Siri також автоматично почне розуміти вимогу вимкнути Apple TV в конкретній кімнаті або ж все відразу.

Насправді, плагін цей стрімко розвивається, вже вміє розпізнавати Bundle ID для запущених на приставці застосунків і втручатися в їх роботу, наприклад, ставити на паузу фільм в Netflix. Але з цим ви вже розберетеся самостійно, якщо буде бажання.

Налаштування плагіна Mqttthing

Цей плагін я використовую зі згадуваною вище лампою Гайвера – саморобним світильником з платою Arduino і матрицею адресних світлодіодів 16×16. У саму лампу повинна бути залита прошивка від Whilser. Нехай сила буде з тобою!

Крок 1. Установка MQTT брокера

Виконуємо ряд команд. Пакетно вони не працюють, тому вводимо їх в консоль по одній.

sudo wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key
sudo apt-key add mosquitto-repo.gpg.key
cd /etc/apt/sources.list.d/
sudo wget 
sudo apt update
sudo apt install mosquitto mosquitto-clients
sudo /etc/init.d/mosquitto stop
sudo nano /etc/mosquitto/mosquitto.conf

Остання команда запускає вже знайомий нам редактор nano, в якому ми замінюємо вміст  файлу, що відкрився, на таке:

# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example

# pid_file /var/run/mosquitto.pid

allow_anonymous true
listener 1883

persistence true
persistence_location /var/lib/mosquitto/

log_dest topic

log_type error
log_type warning
log_type notice
log_type information

connection_messages true
log_timestamp true

include_dir /etc/mosquitto/conf.d

Як зазвичай, Ctrl+O, Enter, Ctrl+X, а потім перезапускаємо брокер командою

‌sudo /etc/init.d/mosquitto start

MQTT брокер встановлений.

Крок 2. Установка плагіна Mqttthing

Звично йдемо на вкладку «Модулі» в веб-інтерфейсі Homebridge, шукаємо Mqttthing і натискаємо «Встановити».

Крок 3. Конфігурація плагіна Mqttthing

Кожна лампа Гайвера має власний ID чіпа ESP. Наприклад, ESP-3bd20b. Якщо ви виготовляли і прошивали лампу самі, то прекрасно про це поінформовані, якщо ні, то переведіть лампу в режим сполучення, і при підключенні до вашої Wi-Fi мережі у відповідному діалоговому вікні на iPhone відобразиться потрібний ID. Запишіть його.

  1. Вимкніть живлення лампи;
  2. Вимкніть роутер;
  3. Увімкніть живлення лампи;
  4. На iPhone зайдіть в «Налаштування → WiFi»
  5. Виберіть незахищену мережу з SSID на кшталт «ESP12345678», і в діалоговому вікні натисніть «Configure WiFi»
  6. У самому низу вікна конфігурації буде потрібний Chip ID

Якщо лампа вже була налаштована раніше, можна просто її відключити, включити роутер і знову включити лампу – старі налаштування підхватяться. Якщо це перше підключення лампи, включіть роутер і виберіть у списку налаштувань свою мережу, а потім вбийте всі необхідні дані, на кшталт пароля домашнього Wi-FI і IP адреси Raspberry Pi.

Відкрийте вкладку «Конфігурація» веб-інтерфейсу Homebridge і в розділ "accessories": [ внесіть ось такий величезний шматок коду, замінивши попередньо ID з ESP-3bd20b на свій власний:

{
    "accessory": "mqttthing",
    "type": "lightbulb",
    "name": "Ночник",
    "url": "http://127.0.0.1:1883",
    "mqttPubOptions": {
        "retain": false
    },
    "topics": {
        "getOn": "homeassistant/light/ESP-3bd20b/status",
        "setOn": "homeassistant/light/ESP-3bd20b/switch",
        "getBrightness": "homeassistant/light/ESP-3bd20b/brightness/status",
        "setBrightness": "homeassistant/light/ESP-3bd20b/brightness/set",
        "getRGB": "homeassistant/light/ESP-3bd20b/rgb/status",
        "setRGB": "homeassistant/light/ESP-3bd20b/rgb/set"
    },
    "onValue": "ON",
    "offValue": "OFF"
},
{
    "accessory": "mqttthing",
    "type": "television",
    "name": "Эффекты ночника",
    "url": "http://127.0.0.1:1883",
    "topics": {
        "setActive": "homeassistant/light/ESP-3bd20b/switch",
        "getActive": "homeassistant/light/ESP-3bd20b/status",
        "setActiveInput": "homeassistant/light/ESP-3bd20b/effect/set",
        "getActiveInput": "homeassistant/light/ESP-3bd20b/effect/status"
    },
    "inputs": [
        {
            "name": "Конфетти",
            "value": "Конфетти"
        },
        {
            "name": "Огонь",
            "value": "Огонь"
        },
        {
            "name": "Радуга верт.",
            "value": "Радуга верт."
        },
        {
            "name": "Радуга гориз.",
            "value": "Радуга гориз."
        },
        {
            "name": "Смена цвета",
            "value": "Смена цвета"
        },
        {
            "name": "Безумие 3D",
            "value": "Безумие 3D"
        },
        {
            "name": "Облака 3D",
            "value": "Облака 3D"
        },
        {
            "name": "Лава 3D",
            "value": "Лава 3D"
        },
        {
            "name": "Плазма 3D",
            "value": "Плазма 3D"
        },
        {
            "name": "Радуга 3D",
            "value": "Радуга 3D"
        },
        {
            "name": "Павлин 3D",
            "value": "Павлин 3D"
        },
        {
            "name": "Зебра 3D",
            "value": "Зебра 3D"
        },
            {
            "name": "Лес 3D",
            "value": "Лес 3D"
            },
        {
            "name": "Океан 3D",
            "value": "Океан 3D"
        },
        {
            "name": "Снегопад",
            "value": "Снегопад"
        },
        {
            "name": "Матрица",
            "value": "Матрица"
        },
        {
            "name": "Светлячки",
            "value": "Светлячки"
        },
            {
            "name": "Аквариум",
            "value": "Аквариум"
        },
        {
            "name": "Звездопад",
            "value": "Звездопад"
        },
        {
            "name": "Пейнтбол",
            "value": "Пейнтбол"
        },
        {
            "name": "Спираль",
            "value": "Спираль"
        },
        {
            "name": "Теплый свет",
            "value": "Теплый свет"
        },
        {
            "name": "Маятник",
            "value": "Маятник"
        },
        {
            "name": "Мерцание",
            "value": "Мерцание"
        },
        {
            "name": "Полицейская сирена",
            "value": "Полицейская сирена"
        },
        {
            "name": "Дрейф",
            "value": "Дрейф"
        },
        {
            "name": "Стая",
            "value": "Стая"
        }
    ],
    "onValue": "ON",
    "offValue": "OFF"
}

Готово. В Apple HomeKit з’явилося два нових пристрою, лампа «Нічник» і «Ефекти нічника». Вони взаємопов’язані і їх призначення цілком зрозуміло. При бажанні можна перейменувати їх в конфігі.

На жаль, автор прошивки прописав параметри російською, тому з такою конфігурацією звертатися до Siri доведеться також російською. Але, якщо ви спілкуєтеся з Siri англійською мовою, можна підправити кожен пункт коду ось таким чином:

{
    "name": "Fire",
    "value": "Огонь"
},

Тоді результат на iOS виглядатиме так:

Налаштування плагіна Samsung Tizen

Крок 1. Перевірка телевізора на сумісність

В панелі управління роутером надайте телевізору статичний локальний IP, як робили це для Raspberry Pi на самому початку. Наприклад, в моєму випадку це 192.168.50.100.

У браузері на комп’ютері перейдіть за адресою  http://TV_IP:8001/api/v2, що в моєму випадку означає http://192.168.50.100:8001/api/v2/

Якщо ви побачите сторінку з купою службової інформації приблизно такого вигляду…

{"device":{"FrameTVSupport":"false","GamePadSupport":"true","ImeSyncedSupport":"true","OS":"Tizen","TokenAuthSupport":"true","VoiceSupport":"false","countryCode":"UA","description":"Samsung DTV RCR","developerIP":"0.0.0.0","developerMode":"0","duid": ......

…то це означає, що шанси на успіх є. Але потрібно розуміти, що не всі моделі телевізорів Samsung сумісні з плагіном. Наприклад, ті, що вимагають ідентифікації через PIN, працювати не будуть.

Скопіюйте зі службової сторінки значення поля"wifiMac": і приготуйте пульт від телевізора, нехай буде під рукою.

Крок 2. Установка плагіна

Нічого нового, шукаємо плагін за запитом Samsung Tizen, вибираємо потрібний (авторства @tavicu) і встановлюємо.

Після запуску йдемо в налаштування і прописуємо там такі значення:

Назви «Телевізор» цілком достатньо, тому що Siri прекрасно розуміє прохання включити телевізор у вітальні, в якій у вас навряд чи 2 телевізори. Так само прекрасно вона розуміє команду «включи телевізор у спальні”, не смикаючи телек у вітальні зайвий раз.

Крок 3. Сполучення з телевізором

Тут все просто: візьміть в руки пульт від телевізора і дочекайтеся появи на екрані контекстного меню з попередженням про спробу якогось пристрою взяти контроль над телевізором. Телевізор, звичайно, повинен бути включений. Коли у верхньому правому куті екрану з’явиться відповідний запит, пультом від ТВ виберіть кнопку Allow. Готово.

Крок 4. Додаємо телевізор в Apple HomeKit

Так-так, на відміну від попередніх випадків, телевізор не з’явиться чарівним способом у списку пристроїв вашого будинку. Тому беремо в руки iPhone і крок за кроком:

  1. Запустіть Home app і на головній сторінці натисніть + у верхньому правому куті;
  2. Виберіть «Додати аксесуар»;
  3. Внизу екрана натисніть «Немає коду чи немає можливості сканувати»;
  4. На наступному екрані виберіть ваш ТВ;
  5. На пропозицію введення коду налаштування HomeKit натисніть «Використовувати камеру»;
  6. Наведіть камеру на QR-код на вкладці «Статус» Homebridge.

Крок 5. Налаштування плагіна

Глибоко покопавшись в документації до плагіну, можна змусити Siri запускати на телевізорі конкретні програми зі списку встановлених, ставити їх на паузу і так далі. Ми ж зараз в якості тренування змінимо функціональність однієї єдиної кнопки в віртуальному пульті Apple Remote, вбудованому в «шторку» Пункту управління iOS.

Це кнопка ℹ︎ (information), за замовчуванням виводить у верхній частині екрану ТВ інформацію про поточний режим зображення. При цьому дістатися з пульта Apple Remote до списку встановлених в телевізорі програм немає ніякої можливості. І ми це зараз виправимо.

Заходимо в налаштування плагіна, розділ «Key Mapping», шукаємо поле «INFORMATION» і міняємо його значення на KEY_HOME. Перезапуск Homebridge і вуаля – кнопочка ℹ︎ в віртуальному пульті викликає основне меню застосунків! Віртуальний пульт отримав сенс.

Налаштування плагіна Weather Plus

Крок 1. Створення облікового запису OpenWeather

Йдемо на сайт https://home.openweathermap.org і реєструємо собі обліковий запис, благо це безкоштовно.

Крок 2. Генерація ключів API

Перейдіть до потрібної закладки особистого кабінету OpenWeather і, задавши ім’я ключу, натисніть кнопку «Generate».

Крок 3. Установка і налаштування плагіна Weather Plus

Вже звичним методом шукаємо і встановлюємо потрібний плагін, а потім переходимо в його налаштування. Результат повинен виглядати приблизно так:

У прогнозі мене особисто цікавлять тільки значення на найближчу годину, тому інші просто відключені:

А щоб зайві віртуальні датчики погоди не дратували непотрібними спрацьовуваннями, відключаємо їх у відповідному розділі Hide Values. Відключити бажано:

  • Air Pressure
  • Cloud Cover
  • Dew Point
  • Temperature Apparent
  • Wind Direction
  • UV Index
  • Wind Speed
  • Wind Speed Max

І натиснути «Зберегти» в самому низу вікна налаштувань.

В результаті в інтерфейсі Apple HomeKit з’являться значення температури і вологості на найближчу годину, а заодно два віртуальних датчика «Сніг» і «Дощ», які можна використовувати в різноманітних сценаріях. Наприклад, у мене запрограмована автоматизація HomeKit, в якій, при появі в прогнозі на найближчий час дощу або снігу, лампа Гайвера протягом хвилини демонструє відповідний ефект калюжі або падаючих сніжинок. При цьому включиться ефект тільки в проміжку з 8:00 до 23:00 і тільки в тому випадку, якщо хтось є вдома. В інший час попередження взяти парасольку або одягнутися в непромокальний одяг навряд чи знадобляться.

Налаштування плагіна Yeelight WiFi

За запитом Yeelight Homebridge пропонує до установки масу плагінів, в тому числі один верифікований. Але я вважаю за краще інший, в якому переходи між станами зроблені максимально плавно, а не в стилі «на табір обрушилася ніч». Крім того, він підтримує адаптивне освіщення від Apple, а ось стандартний застосунок Xiaomi цьому так і не навчився за рік з моменту появи цієї можливості в HomeKit.

Важливо! Залиште включеною тільки одну лампочку Xiaomi, щоб уникнути плутанини спочатку. З нею і будемо працювати.

Після встановлення плагіну перезавантажте Homebridge і в лозі знайдіть приблизно такий рядок: ‌[Yeelight] Received advertisement from ab1234. Ось це умовне ab1234 і є ваша лампочка. Можливо, значення буде color-ab1234, тоді будете працювати з ним.

Зайдіть в налаштування плагіна і вставте туди ось такий шматок коду:

{
    "platform": "yeelight",
    "name": "Yeelight",
    "transitions": {
        "power": 400,
        "brightness": 400,
        "color": 1500,
        "temperature": 1500
    },
    "multicast": {
        "interface": "0.0.0.0"
    },
    "defaultValue": {
        "color-ab1234": {
            "name": "Торшер",
            "blacklist": [
                "set_hsv"
            ]
        }
    }
}

Де замість color-ab1234 має бути значення з вашого лога, а замість ‌"name": "Торшер" будь-яка назва, що відображає місце вкрутки лампи: Нічник, Бра, Стеля і т. д.

Збережіть вставлений код, натиснувши на кнопку «Зберегти», і перезавантажте Homebridge. Готово, лампочка з’явилася в HomeKit під обраною вами назвою. Решта лампочок Yeelight додаються по одній натисканням кнопки «+ ADD PLATFORM» там же в налаштуваннях плагіна точно таким же способом.

Оновлення Homebridge і Node.JS на Raspberry Pi

Оновлення (і відкат версії) самого Homebridge досить просте: потрібно клікнути по номеру поточної версії в веб-інтерфейсі і в діалоговому вікні вибрати зі списку бажану версію.

А ось з оновленням Node.JS і NPM, які рано чи пізно будуть потрібні при установці оновлення якогось плагіна, не так просто. Точніше, команди не зовсім ті, що описані в стандартних інструкціях.

Node.JS оновлюється командою:

sudo hb-service update-node

А NPM аж двома послідовними:

sudo npm cache clean -f
sudo npm install -g npm

На жаль, ані сам Homebridge, ані його плагіни, ані «рейки», на яких він їде, не вміють оновлюватися автоматично. А заходити кожен день в панель управління і перевіряти, чи немає чого нового, рано чи пізно набридає. Так що для автоматизації процесу придумали спеціальний віджет під iOS 14, який відстежує стан всіх вузлів Homebridge і вміє візуально і PUSH-повідомленнями сигналізувати про наявність оновлень, або якихось проблем.

Установка віджета Homebridge Status

Як бачите, віджет показує масу потрібної і не дуже інформації про ваш Homebridge, але найцінніше в ньому – це інформація про стан самого Homebridge, його плагінів і Node.JS.

Для отримання самого віджета спочатку нам знадобиться його материнський застосунок. Встановіть його на iPhone з App Store.

Developer: Simon B. Støvring
Price: Free+

А тепер починається досить тривалий, але захоплюючий процес установки віджета. Встановлювати ми його будемо за допомоги ще одного скрипта з назвою ScriptDude всередині програми Scriptable. ScriptDude хороший тим, що відстежує зміни в коді маси скриптів, розташованих в галереї за адресою scriptables.net. Можливо, ви знайдете там для себе ще щось корисне, але зараз у нас одне завдання, його і будемо вирішувати.

Крок 1. Встановлюємо Scriptable.app з App Store.

Крок 2. Відкриваємо в браузері на iPhone сайт scriptdu.de і натискаємо кнопку Install ScriptDude.

Крок 3. На сторінці, що відкрилась, натискаємо на кнопку Copy Installer і, отримавши повідомлення про код скрипта в нашому буфері обміну, натискаємо кнопку Open Scriptable.

Крок 4. У порожнє поле з заголовком Untitled Script вставляємо вміст буфера обміну і натискаємо кнопку Play ▶️.

Крок 5. На екрані, що відкрився, натискаємо посилання Browse scriptables.net і на наступній сторінці тапаємо по тегу (technology). Ура, скрипт Homebridge Status – перший в списку! Сміливо тиснемо на кнопку Download with ScriptDude.

Крок 6. Натискаємо Install і, погодившись аж з двома попередженнями, бачимо в списку Installed жаданий скрипт. Головний екран Scriptables тепер виглядає так, як на четвертому скріншоті нижче, а ми натискаємо на три крапки в плашці Homebridge Status і переходимо до редагування параметрів.

Крок 7. В першу чергу змінюємо значення overwritePersistedConfig з false на true

overwritePersistedConfig = true

щоб зберегти параметри скрипта в iCloud.

Крок 8. Спустившись трохи нижче, редагуємо три поля: IP-адресу і порт Homebridge (пам’ятаєте, це вже згадуваний http://<ip address of your server>:8581 де замість <ip address of your server> все той же IP з самого початку статті, в моєму випадку ) і погоджуємося з попередженням про пошук пристроїв у локальній мережі. Ура, скрипт працює!

Залишається тільки додати віджет на екран iOS 14 так само, як і будь-який інший. Після додавання потрібно зайти в налаштування віджету (довгий тап на ньому) і вказати ряд параметрів: вибрати потрібний скрипт, вказати, що робити при взаємодії з ним, і в поле Parameter внести таке значення

USE_CONFIG:purple.json

Після цього не забудьте повернутися в код скрипта і повернути значення

overwritePersistedConfig = false

На цьому все. Віджет працює, а при появі оновлень Node.JS, Homebridge, або його плагінів, ви будете отримувати PUSH-повідомлення з відповідним вмістом.

Висновок

Можливості Apple HomeKit для мене зросли у багато разів. Я придумав купу сценаріїв і автоматизацій, які полегшують життя мені і моїм близьким.

Наприклад, у темний час доби першого члена сім’ї, який повертається додому, наше житло зустріне включеним освітленням ззовні, в передпокої, вітальні і санвузлі – і ось вже не потрібно бігати до вимикачів з немитими руками.

При виході з будинку останнього члена сім’ї HomeKit дбайливо вимкне телевізори, освітлення і взагалі все, що тільки можна вимкнути. А якщо вдома є хоча б одна людина, з настанням сутінків включиться зовнішнє освітлення і деякі лампи всередині.

Знову ж, Siri може управляти всіма підключеними пристроями за допомогою абсолютно логічних команд, слово в слово таких же, з якими ви звернулися б до когось із домашніх, коли потрібно включити або виключити щось у конкретному приміщенні. Тільки бігати в це приміщення вже нікому не потрібно.

Працюють ранкові та вечірні музичні мікси від Apple, до яких прив’язані світлові ефекти лампи Гайвера. Можна і інше освітлення змусити працювати світломузикою, але я не в захваті від ефекту.

Загалом, сценарії застосування залежать тільки від вашої фантазії і не сильно напружать гаманець, так як товари з міткою «Works with Apple HomeKit» більше не є єдино доступним вибором.

У наступній статті циклу ми з вами трохи порозважаємося: навчимо нашу Raspberry Pi качати торренти, перетворимо на потужний медіацентр і ігрову ретро-консоль.

Stay tuned!

Share
Yuri Stanislavsky

SwiftUI розробник. Колекціоную вініл. Іноді журналіст. Власник Nota Record Store.

Leave a Reply

Your email address will not be published. Required fields are marked*