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 sshsudo 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 «малинки» из предыдущего шага) и видим примерно такую картину:

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 $HOMEwget https://static.adguard.com/adguardhome/release/AdGuardHome_linux_arm.tar.gztar xvf AdGuardHome_linux_arm.tar.gz

Остается только установить сервис и запустить его:



cd AdGuardHomesudo ./AdGuardHome -s install

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

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

Теперь нужно посетить веб-интерфейс свежеустановленного сервиса. Запустите браузер (Safari, Chrome, Firefox или что там у вас — неважно) и в адресной строке вбейте https://: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. Слева — до, справа — после применения фильтров.

Exler with bannersExler without bannersExler with bannersExler without banners

Обновление 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, чтобы увидеть полный список команд. Можете даже скопировать его в отдельный текстовый файл (или воспользоваться подсказкой ниже).



GPTM enter protective/hybrid MBRGenericd delete a partitionF list free unpartitioned spacel list known partition typesn add a new partitionp print the partition tablet change a partition typev verify the partition tablei print information about a partitionMiscm print this menux extra functionality (experts only)ScriptI load disk layout from sfdisk script fileO dump disk layout to sfdisk script fileSave & Exitw write table to disk and exitq quit without saving changesCreate a new labelg create a new empty GPT partition tableG create a new empty SGI (IRIX) partition tableo create a new empty DOS partition tables 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: filesgroup: filesshadow: filesgshadow: fileshosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 mdnsnetworks: filesprotocols: db filesservices: db filesethers: db filesrpc: db filesnetgroup: nis

Снова сохраняем изменения через Ctrl+O → Enter → Ctrl+X

Далее остается только запустить сервисы:



sudo service avahi-daemon startsudo 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 = userencrypt passwords = truemap to guest = bad userguest account = nobody

В самый конец файла конфигурации добавляем новый блок:



[TimeCapsule]comment = Time Capsulepath = /mnt/tmbrowseable = yeswriteable = yescreate mask = 0600directory mask = 0700spotlight = novfs objects = catia fruit streams_xattrfruit:aapl = yesfruit: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 repocurl -sL https://deb.nodesource.com/setup_14.x | sudo bash -# install Node.jssudo apt install -y nodejs gcc g++ make python net-tools# test node is workingnode -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://:8581 где вместо все тот же IP из самого начала статьи, в моем случае http://192.168.50.10:8581

Дефолтные значения пользователя и пароля одинаковые: 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, причем еще первая версия хаба, круглая.

Homebridge Hue Plugin SettingsHomebridge Hue Plugin Settings

Заполнив данные и обязательно сохранив результат, нужно только нажать центральную кнопку на хабе 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-

Вместо будет несколько строк мешанины из букв и цифр, их нужно скопировать в отдельный текстовый файл целиком, начиная от первой цифры в строке Credentials:. Чуть позже эти самые credentials нам очень пригодятся.

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



{ "platform": "AppleTvPlatform", "name": "Apple TV Platform", "devices": [ { "name": "Гостиная", "credentials": "77346115-ED48-46A8-A288-", "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 http://repo.mosquitto.org/debian/mosquitto-stretch.list

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.examplepid_file /var/run/mosquitto.pidpersistence truepersistence_location /var/lib/mosquitto/log_dest topiclog_type errorlog_type warninglog_type noticelog_type informationconnection_messages truelog_timestamp trueinclude_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

Gyver Lamp WiFi SettingsGyver Lamp 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) и устанавливаем.

Raspberry Pi Samsung Tizen plugin

После запуска идем в настройки и прописываем там следующие значения:

Raspberry Pi Samsung Tizen plugin settings

Названия «Телевизор» вполне достаточно, так как Siri прекрасно понимает просьбу включить телевизор в гостиной, в которой у вас вряд ли 2 телевизора. Так же прекрасно она понимает команду «включи телевизор в спальне», не дергая телек в гостиной лишний раз.

Шаг 3. Сопряжение с телевизором

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

Шаг 4. Добавляем телевизор в Apple HomeKit

Да-да, в отличие от предыдущих случаев, телевизор не появится волшебным способом в списке устройств вашего дома. Поэтому берем в руки iPhone и пошагово:



Запустите Home app и на главной странице нажмите + в верхнем правом углу;

Выберите «Добавить аксессуар»;

Внизу экрана нажмите «Нет кода или нет возможности сканировать»;

На следующем экране выберите ваш ТВ;

На предложение ввода кода настройки HomeKit нажмите «Использовать камеру»;

Наведите камеру на 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

Уже привычным методом ищем и устанавливаем нужный плагин, а затем переходим в его настройки. Результат должен выглядеть примерно так:

OpenWeather Plugin settingsOpenWeather Plugin settings

В прогнозе меня лично интересуют только значения на ближайший час, поэтому остальные попросту отключены:

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 довольно простое: нужно кликнуть по номеру текущей версии в веб-интерфейсе и в открывшемся диалоговом окне выбрать из выпадающего списка желаемую версию.

Homebridge updateHomebridge update

А вот с обновлением 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 (Free+, App Store) →

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

Шаг 1. Устанавливаем Scriptable.app из App Store.

Шаг 2. Открываем в браузере на iPhone сайт scriptdu.de и нажимаем кнопку Install ScriptDude.

scriptdu.de website

Шаг 3. На открывшейся странице нажимаем на кнопку Copy Installer и, получив уведомление о коде скрипта в нашем буфере обмена, нажимаем кнопку Open Scriptable.

ScriptDude installationScriptDude installation

Шаг 4. В пустое поле с заголовком Untitled Script вставляем содержимое буфера обмена и нажимаем кнопку Play ▶️.

ScriptDude installation

Шаг 5. На открывшемся экране нажимаем ссылку Browse scriptables.net и на следующей странице тапаем по тегу (technology). Ура, скрипт Homebridge Status — первый в списке! Смело жмем на кнопку Download with ScriptDude.

Homebridge Status InstallationHomebridge Status Installation

Шаг 6. Нажимаем Install и, согласившись аж с двумя предупреждениями, видим в списке Installed вожделенный скрипт. Главный экран Scriptables теперь выглядит так, как на четвертом скриншоте ниже, а мы нажимаем на троеточие в плашке Homebridge Status и переходим к редактированию параметров.

Homebridge Status InstallationHomebridge Status InstallationHomebridge Status InstallationHomebridge Status Installation

Шаг 7. В первую очередь меняем значение overwritePersistedConfig с false на true



overwritePersistedConfig = true

чтобы сохранить параметры скрипта в iCloud.

Raspberry Pi Homebridge Status Configuration

Шаг 8. Спустившись чуть ниже, редактируем три поля: IP адрес и порт Homebridge (помните, это уже упоминавшийся http://:8581 где вместо все тот же IP из самого начала статьи, в моем случае http://192.168.50.10:8581) и соглашаемся с предупреждением о поиске устройств в локальной сети. Ура, скрипт работает!

Homebridge Status ConfigurationHomebridge Status ConfigurationHomebridge Status ConfigurationHomebridge Status Configuration

Остается только добавить виджет на экран iOS 14 так же, как и любой другой. После добавления нужно зайти в настроки виджета (долгий тап на нём) и указать ряд параметров: выбрать нужный скрипт, указать, что делать при взаимодействии с ним, и в поле Parameter внести такое значение



USE_CONFIG:purple.json

Homebridge Status Widget SettingsHomebridge Status Widget SettingsHomebridge Status Widget SettingsHomebridge Status Widget Settings

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



overwritePersistedConfig = false

На этом всё. Виджет работает, а при появлении обновлений Node.JS, Homebridge или его плагинов, вы будете получать PUSH-уведомления с соответствующим содержимым.

Заключение

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

Например, в темное время суток первого члена семьи, возвращающегося домой, наше жилище встретит включенным освещением снаружи, в прихожей, гостиной и санузле — и вот уже не нужно бегать к выключателям с немытыми руками.

При выходе из дома последнего члена семьи HomeKit заботливо выключит телевизоры, освещение и вообще всё, что только можно выключить. А если дома есть хотя бы один человек, с наступлением сумерек включится наружное освещение и некоторые лампы внутри.

Опять же, Siri может управлять всеми подключенными устройствами при помощи совершенно логичных команд, слово в слово таких же, с какими вы обратились бы к кому-то из домашних, когда нужно включить или выключить что-то в конкретном помещении. Только бегать в это помещение уже никому не нужно.

Работают утренние и вечерние музыкальные миксы от Apple, к которым привязаны световые эффекты лампы Гайвера. Можно и остальное освещение заставить работать цветомузыкой, но я не в восторге от эффекта.

В общем, сценарии применения зависят только от вашей фантазии и не сильно напрягут кошелек, так как товары с меткой «Works with Apple HomeKit» больше не являются единственно доступным выбором.

В следующей статье цикла мы с вами немного поразвлекаемся: научим нашу Raspberry Pi качать торренты, превратим в мощный медиацентр и игровую ретро-консоль.

Stay tuned!

Пост Raspberry Pi в домашней экосистеме: Возможности и примеры (часть 1) опубликован на Root Nation.

Другие новости раздела: Кратко по миру

Кратко по миру

КАК ИИ ЗАХВАТИТ НАШУ ЖИЗНЬ | РАЗБОР

💸Получите шанс выиграть до 5 000 000 рублей со СберИнвестициями: 💰Нужны перемены? Рассчитайте кредитный потенциал для вашего бизнеса в СбербанкОнлайн и оформите кредит по сниженной на 3% ставке.

Кратко по миру

THE LINE — ГОРОД БУДУЩЕГО | РАЗБОР

💠Первая умная LED-одежда и аксессуары Cyberpix: По промокоду Droider скидка 15% 🤟Мы в телеграм) Все то, о чем еще несколько десятилетий назад писали фантасты, кажется, становится реальностью. Вот и

Кратко по миру

ЭЛЕКТРОМОБИЛЬ ОТ XIAOMI: TESLA НАПРЯГЛАСЬ? | РАЗБОР

📺Этот и другие QLED Телевизоры HYUNDAI на официальном сайте Реклама. ООО Мерлион. ИНН 7719269331. erid: 2Vtzqvm6aL2 Секретная империя XIAOMI: 🤟Мы в телеграм) Один из самых ожидаемых гаджетов года —

Кратко по миру

МЕТАЛИНЗЫ - ЭТО РЕВОЛЮЦИЯ | РАЗБОР

🌐Единое пространство для бизнес-коммуникации и совместной работы МТС Линк — 🤟Мы в телеграм) Сегодня мы поговорим о металинзах. Это абсолютно новая технология, которая может изменить мир мобильной

Похожие публикации

Android Smart TV BOX

Raspberry Pi 3 Model A+ — новый одноплатный компьютер стоимостью 25 долларов

Компания Raspberry Pi Foundation представила новый одноплатный ПК под названием Raspberry Pi 3 Model A+. Новинка весьма похожа на последнюю версию Model B+, хотя и лишена некоторых возможностей. В

Android Smart TV BOX

Huawei HiKey 970: мощный одноплатный ПК

На этой неделе был представлен одноплатный компьютер HiKey 970 от компании Huawei, который является преемником прошлогодней модели HiKey 960. Учитывая цену HiKey 960, которая составляла 239 долларов

Android Smart TV BOX

Одноплатный компьютер ODROID-C4 – конкурент Raspberry Pi 4

В полку одноплатных компьютеров для разработчиков прибыло: анонсировано решение ODROID-C4, которое уже доступно для заказа по ориентировочной цене 50 долларов США. Изделие может составить

Android Smart TV BOX

Raspberry Pi 4 перегревается

Представленный в прошлом месяце одноплатный компьютер Raspberry Pi 4 стал самым мощным в линейке, что позволяет ему обрабатывать видео в разрешении 4K. Оказалось, что из-за возросшей

Android Smart TV BOX

У Raspberry Pi 4 обнаружилась проблема с портом USB-Tipe C

Одноплатный ПК Raspberry Pi 4 вышел всего пару недель назад, удивив и производительностью, и набором портов. В частности, это первый ПК компании, оснащённый разъёмом USB-C. В данном случае он

Android Smart TV BOX

Raspberry Pi повышает цены из-за дефицита полупроводников

В связи с проблемами в цепочке поставок, особенно полупроводниковой продукции, многие производители повышают цены на свои устройства. Raspberry Pi не стала исключением и тоже подняла цены. Правда,

Android Smart TV BOX

Raspberry Pi Compute Module 4 — ещё меньше и быстрее

Одноплатный ПК Raspberry Pi 4 был представлен летом прошлого года. Сегодня компания выпустила модификацию Raspberry Pi Compute Module 4, которая сходна с Raspberry Pi 4 по основным параметрам, но

Кратко по миру

Raspberry Pi в домашней экосистеме: Возможности и примеры (часть 2)

В предыдущей статье цикла мы с вами разбирались с установкой на Raspberry Pi одновременно нескольких полезных сервисов: AdGuard Home, Time Machine и Homebridge с шестью различными плагинами. Но в