Root NationСофтІнструкціїRaspberry Pi в домашній екосистемі: Можливості та приклади (частина 1)

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. Не так уже й мало для такої крихітки розміром з пачку сигарет, вірно?

Raspberry Pi 4 with keyboard and mouse

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

Перша стаття буде більше корисна маководам, оскільки торкається специфічних для екосистеми 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 встановлений, то відповідь на команду буде приблизно такою:

Windows 10 OpenSSH installed

Якщо ж 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 просто для зручності запам’ятовування.

ASUS WiFi settings

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

Крок 3

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

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

ssh pi@<ip address of your server>

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

Raspberry Pi ssh password

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

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

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

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

AdGuard Home Logo

Установка і налаштування 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 installed

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

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

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

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

ASUS router DNS settings

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

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

Raspberry Pi AdGuard Home clean install

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

Raspberry Pi AdGuard Home TV filter

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

Ім’я 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 відбувається в ручному режимі, але запускається буквально однією кнопкою і займає кілька секунд, не вимагаючи втручання.

Raspberry Pi AdGuard Home update

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

Apple Time Machine Logo

Установка і налаштування 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‌. Вона то нам і потрібна.

Raspberry Pi HDD formatting

Вводимо команду 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 і бачимо щось таке:

Raspberry Pi HDD formatting

Копіюємо 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 з попереднього кроку. Має вийти так:

Raspberry Pi HDD formatting

Збережіть зміни, натиснувши 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

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

Netatatlk Status Message

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

Time Machine Netatalk

В якості логіна вказуємо 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 Logo

Установка і налаштування 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

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

Raspberry Pi Homebridge User Settings

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

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

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

  • 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», версію і дату оновлення плагіна (якщо автор його вже пару років не оновлював, великі шанси, що і працювати він не буде) і обов’язково відкривати посилання на домашню сторінку плагіна, де зазвичай докладно описаний процес установки.

Raspberry Pi Homebridge Hue

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

Плагін 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, це робиться натисканням на відповідну кнопку.

Raspberry Pi Homebridge restart button

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

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

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

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

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

Gyver Lamp with Grogu

Крок 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 виглядатиме так:

Gyver Lamp Siri Patched

Налаштування плагіна 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) і встановлюємо.

Raspberry Pi Samsung Tizen plugin

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

Raspberry Pi Samsung Tizen plugin settings

Назви «Телевізор» цілком достатньо, тому що 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 до списку встановлених в телевізорі програм немає ніякої можливості. І ми це зараз виправимо.

Apple iOS Remote for Samsung TV

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

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

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

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

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

OpenWeather

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

OpenWeather

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

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

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

Raspberry Pi OpenWeather forecast settings

А щоб зайві віртуальні датчики погоди не дратували непотрібними спрацьовуваннями, відключаємо їх у відповідному розділі 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.

Raspberry Pi Yeelight WiFi Plugin

Важливо! Залиште включеною тільки одну лампочку 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": "Торшер" будь-яка назва, що відображає місце вкрутки лампи: Нічник, Бра, Стеля і т. д.

Raspberry Pi Yeelight WiFi Plugin Settings

Збережіть вставлений код, натиснувши на кнопку «Зберегти», і перезавантажте 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

Raspberry Pi Homebridge Status Widget

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

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

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

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

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

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

scriptdu.de website

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

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

ScriptDude installation

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

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

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

overwritePersistedConfig = true

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

Raspberry Pi Homebridge Status Configuration

Крок 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!

Yuri Stanislavsky
Yuri Stanislavskyhttp://notarecords.com
SwiftUI розробник. Колекціоную вініл. Іноді журналіст. Власник Nota Record Store.
Subscribe
Notify of
guest

0 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
Підписатися на оновлення