В настоящее время умные дома становятся все более популярными среди потребителей. Это связано с быстро развивающейся технологией, которая позволяет создавать устройства и системы, способные управлять различными аспектами жизни в доме, такими как освещение, отопление, кондиционирование воздуха, безопасность и развлечения. Кроме того, умные дома позволяют сократить расходы на энергию и повысить уровень комфорта и удобства жизни. В данной статье мы поговорим о том, как создать умный дом на платформе Home Assistant. Home Assistant - это бесплатная и открытая система управления домашними устройствами, которая позволяет интегрировать различные устройства и сервисы для автоматизации и управления жизнью в доме. Преимущества Home Assistant перед системами умных домов других производителей (Xiaomi,Tuya, и др.) заключается в возможности использовать устройства разных производителей с разными типами подключения (WiFi, MQTT, Zigbee, Bluetooth) без привязки к экосистеме определенного производителя. Если ваш компьютер или ноутбук имеет 64-битный процессор, установка Home Assistant значительно упрощается, так как подробная инструкция доступна на официальном сайте. Однако, если у вас есть устройство с 32-битным процессором и архитектурой i386, то установка аддонов для работы с внешними датчиками может быть сложной из-за отсутствия официальной поддержки. Однако, не отчаивайтесь, поскольку в этой статье мы рассмотрим способы установки на такие устройства. (Важно отметить, что эти методы также могут быть применены на 64-битных системах, но они сложнее официальных в реализации). Для сервера умного дома подойдет практически любой дистрибутив Linux, но рекомендуется Debian. В данной статье буду использовать сам Debian. Начнем с установки. Этот процесс одинаков практически для любой системы. Скачайте последнюю версию ISO.Я выбрал образ "Small", так как он включает большинство файлов в образ, что требует меньше загрузки в процессе установки. Скачайте Balena Etcher, инструмент для записи ISO-образов на USB-накопитель. Если вы работаете в системе linux, вместо этого можно использовать dd. Подключите загруженный USB-накопитель к системе и загрузитесь с USB. Следуйте процессу установки.Большая часть процесса - это следование настройкам по умолчанию и просто нажатие кнопки Continue. Не забудьте ввести учетные данные для пользователя root и пользователя, не являющегося администратором. Если вы планируете использовать компьютер только для умного дома, убедитесь, что вы не устанавливаете графический интерфейс пользователя (GUI), и обязательно установите SSH-сервер. После завершения установки войдите в систему по SSH, либо напрямую с пк, используя учетные данные обычного пользователя (не рут). Несмотря на то, что Docker и Docker engine официально не поддерживают 32-битные системы, его можно установить, воспользовавшись данным репозиторием на GitLab: Docker Compose можно установить командой: Portainer может пригодиться для более удобного управления будущими Docker-контейнерами. Для установки Portainer создадим конфигурационный файл docker-compose.yaml: Не забудьте обновить часовой пояс в конфигурации ниже. Кроме того, я храню весь свой конфиг Docker и тома в этой папке. Это облегчает резервное копирование. Эти тома будут хранить данные из образа Docker локально, чтобы данные не терялись при пересборке контейнера (например, при обновлении) /opt Здесь мы передаем файл, содержащий наши локальные настройки времени, чтобы Portainer знал, который сейчас час (для временных меток журнала), а также сокет, управляющий Docker, чтобы Portainer мог выполнять действия в Docker. Разрешения Мы также разрешим нашему пользователю, не являющемуся администратором, изменять этот файл. Опять же, чтобы немного облегчить нам жизнь. Проверьте конфигурацию Хотите убедиться, что вы не допустили ошибок в конфигурации? Выполните следующую команду, и Docker выведет вам то, что будет запущено, а также все ошибки в вашем конфиге и предупреждения. Запуск Запускаем, и Docker загрузит последний образ Portainer и все настроит. После этого мы сможем открыть веб-интерфейс Portainer, перейдя по адресу (вы получите предупреждение о самоподписанном сертификате) или (нешифрованное соединение). https://<ip компьютера>:9443  http://<ip компьютера>:9000   При первом посещении этого портала он попросит нас создать учетную запись пользователя. Если вы пропустили предыдущий пункт, то потребуется первоначальная настройка Docker Compose для работы: Далее записываем конфигурацию контейнера в файл(не забываем указать свой часовой пояс для правильного показа времени в интерфейсе и логах): Создадим папку для конфигурационных файлов Homeassistant и запустим его: Теперь Docker извлечет образ Home Assistant и все настроит. Настройка Home Assistant Теперь, когда контейнер запущен и работает, нам нужно настроить сам экземпляр Home Assistant. Откройте браузер и перейдите по адресу http://<ip компьютера>:8123 Начальная настройка Home Assistant Выберите имя пользователя и пароль для вашей учетной записи Home Assistant. Эта учетная запись также будет "администратором". Далее пройдите через настройку вашей домашней зоны. В процессе настройки Home Assistant даже покажет вам устройства, которые он уже обнаружил и которые вы можете интегрировать с самого начала. После завершения настройки вы окажетесь на информационной панели Home Assistant. Если вы настроили какие-либо устройства на предыдущем этапе, они будут отображаться на главном экране. Управление Portainer из Home Assistant Как только мы начнем добавлять дополнения, нам захочется довольно часто иметь возможность быстро просматривать их без необходимости открывать дополнительные окна браузера. Для этого мы воспользуемся панелью iframe. Эта интеграция добавит Portainer в боковую панель Home Assistant. Чтобы добавить iframe для Portainer, добавьте следующий код в файл configuration.yaml: В этой части мы добавим наше первое дополнение. Брокер Mosquitto MQTT позволит нам соединяться с широким спектром устройств, и я настоятельно рекомендую его к установке.   Обновим конфигурацию docker-compose.yaml: Мы добавили строки stdin_open и tty, чтобы впоследствии мы могли подключиться к терминалу контейнера для выполнения некоторых команд. Обратите внимание, что мы также добавили зависимость от контейнера mosquitto для нашего контейнера Home Assistant. Таким образом, наш брокер будет в сети до запуска Home Assistant, и мы можем быть уверены, что наше соединение не прервется. Файл конфигурации mosquitto.conf Когда мы запустим контейнер Mosquitto с помощью docker-compose up -d, в журналах появятся ошибки о невозможности открыть файл конфигурации /mosquitto/config/mosquitto.conf. Чтобы исправить это, мы можем загрузить файл конфигурации по умолчанию и сохранить его во вновь созданном каталоге config: Однако мы сделаем несколько изменений. Вы можете добавить следующие строки в конец конфигурационного файла, так как по умолчанию все настройки закомментированы (настройки по умолчанию). Пользователи Mosquitto Далее мы создадим пользователя в Home Assistant для соединения с брокером. В идеале мы позже создадим нового пользователя для каждого устройства (семейства). Например, одна учетная запись для устройств Shelly, одна для Zigbee2MQTT и т.д. Выполните следующую команду для создания пользователя с именем homeassistant. Обратите внимание, что параметр -c создаст новый файл паролей и перезапишет все существующие файлы. Поэтому отбросьте этот параметр, если вы хотите создать вторую учетную запись. Если теперь вы проверите содержимое только что созданного файла mqttuser, вы найдете свое имя пользователя и хэшированный пароль: Теперь мы можем перезапустить контейнер Mosquitto, чтобы он загрузил наши изменения: Логи должны показать, что контейнер Mosquitto запущен: Настройка MQTT в Home Assistant Теперь мы можем подключить Home Assistant к нашему брокеру MQTT, чтобы он мог начать подписываться на темы и отправлять сообщения. Поскольку пока нет других подключенных MQTT клиентов, Home Assistant пока не будет добавлять новые устройства. Мы добавляем новую интеграцию MQTT в Home Assistant и вводим учетные данные, которые мы установили минуту назад для аутентификации. Логи контейнера MQTT подтверждают успешное подключение Home Assistant: Для этого потребуется приобрести отдельный Zigbee-координатор, который подключается к компьютеру по USB. Я использовал этот в своей системе. Найти координатор Zigbee В конфигурации Docker compose нам нужно будет назначить координатор Zigbee, который будет подключен через USB, к контейнеру Docker. Подключите ваш координатор Zigbee (например, Conbee II, Sonof Zigbee 3.0 Plus, ...) к вашей машине. Затем выполните следующую команду, чтобы получить уникальный путь к устройству. Позже мы будем использовать этот уникальный путь by-id в нашей конфигурации вместо типичного /dev/ttyUSB0, потому что всегда есть риск, что устройство получит новый TTY после перезагрузки, особенно при подключении других устройств. Docker-compose Мы расширяем наш docker-compose.yaml конфигурацией для контейнера Zigbee2MQTT. Обратите внимание, что я изменил отображение портов для этого контейнера. Порт 8080 уже используется администратором, поэтому я изменил порт внешнего интерфейса Zigbee2MQTT на 8099 (см. ниже) и указал его в конфигурации Docker. Мы не будем пока запускать наш контейнер, так как сначала нам нужно настроить нашу конфигурацию. Создаем пользователя MQTT Когда мы настраивали MQTT-брокер Mosquitto, я говорил, что предпочитаю создавать MQTT-пользователя для каждого сервиса. Поэтому давайте создадим пользователя для нашего контейнера Z2M. Конфиг Zigbee2MQTT Чтобы получить копию стандартного конфига, запустите sudo wget https://raw.githubusercontent.com/Koenkk/zigbee2mqtt/master/data/configuration.yaml в папке, где будет храниться конфиг (/opt/zigbee2mqtt/data). Затем откройте и отредактируйте его с помощью sudo nano /opt/zigbee2mqtt/data/configuration.yaml. Мы укажем Z2M подключиться к нашему MQTT-брокеру, использовать синтаксис, который понимает Home Assistant для обнаружения устройств, настроить веб-сервер и позволить Z2M сгенерировать некоторые ключи, используемые для настройки сети Zigbee. Если вы проверите журналы через Portainer или docker-compose logs zigbee2mqtt, вы увидите, что наш контейнер прекрасно запустился:   Добавим Z2M на боковую панель Home Assistant:  Процесс аналогичен с добавлением Portainer: После перезапуска Home Assistant (docker-compose restart homeassistant) получим примерно следующее: В данном видеоролике подробно и наглядно показано как пользоваться Zigbee2MQTT. Если вы в первый раз работаете с ним, рекомендую к просмотру. Спасибо за внимание, есть еще немало дополнений, которые можно добавить, поэтому статья будет дополняться. Если возникнут вопросы или предложения - пишите в комментарии, рад любой активности. Студент, изучаю C, C#, Python, Haskell.