Деякий час назад я придбав одноплатний міні-комп’ютер Raspberry Pi 4 (він же «малинка» в середовищі любителів), не особливо розуміючи, як і для чого його можна використовувати в домашніх умовах. Швидше, це була чергова технологічна іграшка, причому за абсолютно прийнятні гроші, тому можна було дозволити собі поекспериментувати. Забігаючи вперед, можу сказати, що зараз у мене на RPi4 крутяться такі сервіси, як network-wide блокувальник реклами AdGuard Home, система зберігання бекапів Apple Time Machine, Homebridge для додавання несертифікованих пристроїв в екосистему Apple HomeKit, програма для скачування торрентів Transmission, медіасервер PLEX і ігрова ретро-консоль RetroPie. У планах проекспериментувати з self-hosted менеджером паролів Bitwarden, open source аналогом знаменитого 1Password. Не так уже й мало для такої крихітки розміром з пачку сигарет, вірно?
У цьому циклі з двох статей я постараюся максимально докладно розповісти, як я все це встановлював і налаштовував.
Перша стаття буде більше корисна маководам, оскільки торкається специфічних для екосистеми Apple моментів, хоча розділ, що стосується AdGuard, буде цікавий користувачам будь-якої настільної або мобільної операційної системи.
У другій статті розглянемо універсальні сервіси, які можуть бути корисними всім без винятку. А просуватися ми з вами будемо, як нормальні люди – від простого до складного.
Потрібно зауважити, що ранні ревізії Raspberry Pi були досить слабкими в апаратному плані, тому кожен розробник програмного забезпечення сприймав цей комп’ютер як однозадачну машину. Через це будь-який сервіс, який можна запустити на RPi, за замовчуванням пропонується завантажити у вигляді готового образу операційної системи. Скачав, записав на SD-картку, засунув в RPi і включив готовий комп’ютер з встановленим сервісом. Але наше завдання – запустити одночасно кілька сервісів, благо нинішня ревізія це дозволяє. Тому їх ми будемо встановлювати як застосунки.
Припустимо, що Raspberry Pi з «чистою» системою Raspbian ви вже підключили до локальної мережі. Якщо ви новачок і не знаєте, з чого взагалі почати, то почніть з офіціальної інструкції (за посиланням – чудовий покроковий майстер з масою інтерактивних ілюстрацій), а потім переходите до наступного етапу.
Перш за все, потрібно включити доступ по SSH до вашої Raspberry Pi. Для цього потрібно виконати кілька нескладних кроків:
Якщо у вас встановлена 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, в командному рядку нам доведеться працювати досить багато. Для когось це може здатися незвичним, але повірте, нічого складного або невиправного в цьому немає, так що будьте сміливішими. Все вдасться.
Тепер необхідно зробити так, щоб в локальній мережі ваша Raspberry Pi завжди отримувала одну і ту ж внутрішню IP-адресу. Найпростіше це зробити в налаштуваннях роутера.
Я використовую трикомпонентну MESH-систему ASUS ZenWiFi Mini зі стандартним веб-інтерфейсом будь-якого роутера цієї компанії. Для зв’язування MAC- і IP-адрес потрібно вибрати пристрій зі списку підключених, і у спливаючому вікні просто вказати потрібний IP. У моєму випадку я вибрав 192.168.50.10 просто для зручності запам’ятовування.
У роутерах інших виробників пункт меню може називатися інакше, але суть його буде незмінною – видача статичних локальних IP підключеним пристроям.
Запускаємо на вашому комп’ютері Термінал (командний рядок, PowerShell і т.д.) зі стандартного комплекту macOS, Linux або Windows.
Вбиваємо команду
ssh pi@<ip address of your server>
(де замість <ip address of your server>
вставляємо IP «малинки» з попереднього кроку) і бачимо приблизно таку картину:
Тут потрібно вбити пароль від вашої Raspberry Pi, яку ви вказали при первинному налаштуванні.
Важливо! У процесі введення пароль не буде відображатися на екрані. І «зірочки» теж не будуть відображатися. Вам потрібно ввести пароль буквально «наосліп» і натиснути Enter.
При правильному введенні пароля результат буде приблизно таким:
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, поки ще невинно чистого.
Якщо у вас є 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 – система резервного копіювання, розроблена 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 в порт 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
.
Відмінно, диск підготовлений до роботи.
Встановлюваємо:
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:
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 – це сервер на основі NodeJS, і який використовує API Homekit для інтеграції пристроїв без сертифікації та початкової підтримки роботи з Apple HomeKit.
Складність налаштування Homebridge в тому, що його плагіни підтримують найрізноманітніші протоколи і пристрої, роблячи їх видимими і керованими з Apple HomeKit. Відповідно, кожен плагін налаштовується по-своєму, часто абсолютно не так, як його побратим для іншого пристрою.
Почнемо. Як завжди, заходимо на Raspberry Pi по SSH і виконуємо кілька кроків.
Ви маєте можливість копіювати і вставити в Термінал весь блок коду цілком. В абсолютній більшості випадків цього достатньо. Але якщо так вийшло, що на якомусь етапі установка дала збій, то введіть команди з блоку, які залишилися, по одній.
# 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
Для початку встановимо основу наступною командою…
sudo npm install -g --unsafe-perm homebridge homebridge-config-ui-x
…і запустимо в якості системного сервісу.
sudo hb-service install --user homebridge
У браузері на комп’ютері перейдіть за адресою http://<ip address of your server>:8581
де замість <ip address of your server>
все той же IP з самого початку статті, в моєму випадку
Дефолтні значення користувача і пароля однакові: admin
Рекомендую відразу ж перейти до пункту меню «Користувачі» і змінити там дефолтні значення на більш безпечні.
Зробили? Відмінно, далі будемо налаштовувати плагіни.
Наявність різноманітного обладнання вдома диктує нам, які саме плагіни потрібно встановлювати. Цілком можливо, що у вашому випадку набір плагінів буде дещо іншим, але на прикладі моєї конфігурації можна скласти уявлення, з якими нюансами можна зіткнутися в процесі їх налаштування.
Мій комплект плагінів на момент написання статті:
Підем по черзі.
Для установки будь-якого плагіна в 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. Справа в тому, що в 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. Але з цим ви вже розберетеся самостійно, якщо буде бажання.
Цей плагін я використовую зі згадуваною вище лампою Гайвера – саморобним світильником з платою 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. Запишіть його.
Якщо лампа вже була налаштована раніше, можна просто її відключити, включити роутер і знову включити лампу – старі налаштування підхватяться. Якщо це перше підключення лампи, включіть роутер і виберіть у списку налаштувань свою мережу, а потім вбийте всі необхідні дані, на кшталт пароля домашнього 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 виглядатиме так:
Крок 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 і крок за кроком:
Крок 5. Налаштування плагіна
Глибоко покопавшись в документації до плагіну, можна змусити Siri запускати на телевізорі конкретні програми зі списку встановлених, ставити їх на паузу і так далі. Ми ж зараз в якості тренування змінимо функціональність однієї єдиної кнопки в віртуальному пульті Apple Remote, вбудованому в «шторку» Пункту управління iOS.
Це кнопка ℹ︎ (information), за замовчуванням виводить у верхній частині екрану ТВ інформацію про поточний режим зображення. При цьому дістатися з пульта Apple Remote до списку встановлених в телевізорі програм немає ніякої можливості. І ми це зараз виправимо.
Заходимо в налаштування плагіна, розділ «Key Mapping», шукаємо поле «INFORMATION» і міняємо його значення на KEY_HOME
. Перезапуск Homebridge і вуаля – кнопочка ℹ︎ в віртуальному пульті викликає основне меню застосунків! Віртуальний пульт отримав сенс.
Крок 1. Створення облікового запису OpenWeather
Йдемо на сайт https://home.openweathermap.org і реєструємо собі обліковий запис, благо це безкоштовно.
Крок 2. Генерація ключів API
Перейдіть до потрібної закладки особистого кабінету OpenWeather і, задавши ім’я ключу, натисніть кнопку «Generate».
Крок 3. Установка і налаштування плагіна Weather Plus
Вже звичним методом шукаємо і встановлюємо потрібний плагін, а потім переходимо в його налаштування. Результат повинен виглядати приблизно так:
У прогнозі мене особисто цікавлять тільки значення на найближчу годину, тому інші просто відключені:
А щоб зайві віртуальні датчики погоди не дратували непотрібними спрацьовуваннями, відключаємо їх у відповідному розділі Hide Values. Відключити бажано:
І натиснути «Зберегти» в самому низу вікна налаштувань.
В результаті в інтерфейсі Apple HomeKit з’являться значення температури і вологості на найближчу годину, а заодно два віртуальних датчика «Сніг» і «Дощ», які можна використовувати в різноманітних сценаріях. Наприклад, у мене запрограмована автоматизація HomeKit, в якій, при появі в прогнозі на найближчий час дощу або снігу, лампа Гайвера протягом хвилини демонструє відповідний ефект калюжі або падаючих сніжинок. При цьому включиться ефект тільки в проміжку з 8:00 до 23:00 і тільки в тому випадку, якщо хтось є вдома. В інший час попередження взяти парасольку або одягнутися в непромокальний одяг навряд чи знадобляться.
За запитом 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 і 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, але найцінніше в ньому – це інформація про стан самого Homebridge, його плагінів і Node.JS.
Для отримання самого віджета спочатку нам знадобиться його материнський застосунок. Встановіть його на iPhone з App Store.
А тепер починається досить тривалий, але захоплюючий процес установки віджета. Встановлювати ми його будемо за допомоги ще одного скрипта з назвою 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!
Leave a Reply