Некоторое время назад я приобрел одноплатный мини-компьютер 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
Нужно заметить, что ранние ревизии 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
. Если вы изготавливали и прошивали лампу сами, то прекрасно об этом осведомлены, если нет, то переведите лампу в режим сопряжения и при подключении к вашей WiFi сети в соответствующем диалоговом окне на iPhone отобразится искомый ID. Запишите его.
- Отключите питание лампы;
- Отключите роутер;
- Включите питание лампы;
- На iPhone зайдите в «Настройки → WiFi»
- Выберите незащищенную сеть с SSID вроде «ESP12345678» и в открывшемся диалоговом окне нажмите «Configure WiFi»
- В самом низу окна конфигурации будет искомый Chip ID
Если лампа уже была сконфигурирована раньше, можно просто её отключить, включить роутер и снова включить лампу — старые настройки подхватятся. Если это первое подключение лампы, включите роутер и выберите в списке настроек свою сеть, а затем вбейте все необходимые данные, вроде пароля домашнего WiFI и 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 появилось два новых устройства, лампа «Ночник» и «Эффекты ночника». Они взаимосвязаны и их предназначение вполне понятно. При желании можно переименовать их в конфиге.
Настройка плагина 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 и пошагово:
- Запустите Home app и на главной странице нажмите + в верхнем правом углу;
- Выберите «Добавить аксессуар»;
- Внизу экрана нажмите «Нет кода или нет возможности сканировать»;
- На следующем экране выберите ваш ТВ;
- На предложение ввода кода настройки HomeKit нажмите «Использовать камеру»;
- Наведите камеру на 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.
А теперь начинается довольно длительный, но увлекательный процесс установки виджета. Устанавливать мы его будем с помощью еще одного скрипта с названием 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!