Страх и ненависть в HA Container (Jethome D1)
Сколько раз говорил себе не пытаться установить Home Assistant на старом или слабом железе. Прислали мне JetHome JetHub D1 и была очень простая задача - сделать пару датчиков температуры и влажности, пару герконов на вход и впн для связи с основным сервером. Как говорится, приключение на 20 минут. Поставить Home Assistant, настроить входы/выходы, но нет…
Раз на контроллере есть 1-wire, modbus и встроенный zigbee шлюз - почему бы и их не проверить. Вообще, такие наборы достаточно интересная штука, все на дин рейку, сразу тебе и входы/выходы и протоколы. Даже образ с готовым HA, брокером и zigbee есть на Supervised. Вот только спойлер - не вытянул контроллер Supervised, через некоторое время намертво вис.
Я давно хотел попробовать более сложные установки HA без аддонов - хотел - получил. Потренировался ставить HA Container , отдельно mqtt брокер, zigbee2mqtt, owserver и периферию JetHub в MQTT через mqtt-io. Только терминал, только хардкор.
В качестве тренировки работы с линуксом данный контроллер ок, а вот как стабильное и удобное устройство - я не уверен. Если мы конечно говорим про использование с Home Assistant.
Железо
Контроллер
Главный герой Linux контроллер JetHome JetHub D1 https://docs.jethome.ru/ru/controllers/linux/din_rail/d1.html .
- Четырехъядерный процессор Amlogic A113X (ARM Cortex-A53) с рабочей частотой до 1,4 ГГц.
- Оперативная память 1 ГБайт DDR3.
- Энергонезависимая память eMMC flash 16 ГБайт.
Все бы хорошо, но вот оперативной памяти сильно не хватает, да и на сайте Home Assistant указано что нужно минимум 2 Гб оперативки, а лучше 4 гб. Однако, в версии с контейнером может быть проще.
2 модбаса - что хорошо, так как можно настроить 2 линии связи с разными характеристиками.
Встроенный zigbee шлюз на CC2652P1
Для решения локальной задачи очень даже отлично.
Датчики и реле
Я подключил 2 датчика DS18B20 https://aliclick.shop/r/c/1sxnd293uqpxijo3?erid=2SDnjcLyXXs
Для тестирования модбаса взял свое реле Modbus-Rtu модуль реле 12V, RS485/TTL 1 канал. и датчки от wirenboard Температуры и влажности WB . Датчик от wb вообще улет, данных много, дизайн прикольный - есть даже Пищалка и очень громкая, если использовать в помещении то смело заменит пожарную сигнализацию. Я собрал возможные параметры под modbus для HA тут https://gist.github.com/smirnowegor/6f6fa8f1c5a3f1a728b3bf5287ec88d9
Забавно, как из нескольких датчиков + преобразователь rs 485 + пищалка получается устройство со стоимостью почти 4,5 тыс. … ну ладно.
Для теста взял умную лампу вроде такой https://aliclick.shop/r/c/1sxncysydc4eumb6?erid=2SDnjecv68d и площадку с кнопками 4х4 https://aliclick.shop/r/c/1sxnd61hszp2g74a?erid=2SDnjd8w9GZ. Кстати для тестов очень удобная площадка, компактно и понятно.
Быстро (не очень) действие и работоспособность.
HA в конетейнере конечно сильно легче чем supervised, даже на таком железе при подключенных устройствах система имеет запас.
Для сравнения с чистой системой после установки supervised - все забито под завязку.
- Главная проблема - острая нехватка оперативной памяти и постоянное использование Swap. Это приводит к тому, что система крайне медленная и нестабильная.
- Docker-демон (
dockerd
) сам по себе потребляет аномально много CPU и MEM. Это может быть связано с тем, что ему постоянно не хватает памяти для нормальной работы, или он пытается обработать множество контейнеров, которые борются за ресурсы. - Перенос
mqtt-io
в систему был успешным, но это не решило проблему с общей нехваткой памяти, так какhomeassistant
иdockerd
все еще доминируют.
Получалось так, что через определенное время на Supervised контроллер подвисал и не реагировал ни на кнопки ни на ssh. Отлючение аддонов типа zigbee2mqtt тоже не спасно положение, ведь память забита уже на старте была.
После перехода на HA container уже стало легче, хотя бы потому что перестал зависать.
У нас есть 4 входа которые подключены к 4х4 площадке, все четыре входа шустро реагирует и идут как бинарный сенсор. К ним можно прицепить как раз таки реле, которое катушкой на 220в будет подключена к розетке, а контакты в разрыв от Vout (20) и на Discrete inputs (16) как раз на вход. Замкнуто = есть электричество, размокнуто = нет элеткричества. Конечно сам контроллер и роутер должны быть на бесперебойнике. С герконами та же история, ставим в разрыв между 20 и 2м выходом (17). В Ha есть 4 входа + одна кнопка на самом контроллере
Контроллер имеет 3 независимых релейных выхода с типом контактов NO контакт. Максимальный коммутируемый переменный ток для резистивных нагрузок составляет 5A при напряжении до 250В. Механический ресурс реле - 10 000 000 переключений (о как!). Я подключил для теста 12в светодиоды пару штук. 3 реле выступают как переключатели + ещё можно отдельно включить зеленый и красный светодиоды на контроллере. Со светодиодами интересная идея, можно очень приблизительно вывести статус - если есть устройства не в сети = красным, но кто будет заглядывать в щиток а не в телеграм?
Датчики 1-wire подключаются к отдельному входу, можно собрать гирлянду из датчиков. На дальность и количество датчиков не проверял, подключил 2 для проверки. Все подключается красный +, черный -, а желтый данные. Работает через owserver который нужно отдельно установить в linux. Вот мне интересно, а как же такое устанавливается если есть Home Assistant OS. Странно что иногда отваливаются, приходится удалять и добавлять заново + перезагружать owserver.
Модбасов 2 и они отображаются как USB0 и USB1. Я подцепил реле тестовое, а к реле лампу что бы видеть как срабатывает. Хотя щелкает оно будь здоров. Работает очень шустро, может из-за короткой дистанции, но разницы со встроенным реле по скорости срабатывания я не обнаружил.
Для управления код очень простой … хотя чему тут быть сложному = вкл и выкл. Что интересно, через esphome можно намного сложнее управление сделать, вплоть до присвоения адреса, а в home assistant как то грустно. Подробнее про esphome для этого реле тут Modbus-Rtu модуль реле 12V, RS485/TTL 1 канал.
modbus: # Модуль на USB0 – оставляем без изменений (например, реле) - type: serial method: rtu name: "modbus_relay_hub" port: /dev/ttyUSB1 # Укажите правильный COM-порт для HA baudrate: 9600 stopbits: 1 bytesize: 8 parity: N # timeout: 5 # При необходимости # delay: 1 # При необходимости switches: - name: "Modbus Реле" slave: 1 address: 0x0000 write_type: coil
Зигби лампа по встроенному шлюзу через zigbee2mqtt который в отдельном приложении.
Добавил системный монитор и все … подключать ещё что-то из интеграций не рискнул. Думаю можно навесить ещё устройств по зигбии и модбасу и хватит)
Простенькие автоматизации для включения кнопок и выключить все долгим удержанием.
В качестве умного дома для “гаража” вполне хватит.
В качестве питания блок на 12в 2А.
Вывод, а потом скучная установка.
Да для этого контроллера есть готовый образ с Home Assistant и он запускается. В нем даже предустановлен брокер и прочее, нашел даже HACS и УД Яндекса. Вот только этот тюнинг не вывезло железо. Поэтому и пришлось через адок пройти с установками всего по отдельности.
Когда возишься с нормальным железом как-то забываешь о трудностях. Установил супервайзд и легко добавляешь аддоны - которые просто божественно интегрированы. Когда ресурсов мало, тогда конечно нужно крутиться.
Чего я вдруг взялся за слабое железо? Мне было интересно поднять Ха на таком железе и посмотреть что можно сделать. Я был очень удивлен, что разница в потреблении ресурсов такая огромная. Даже на таком слабом железе ХА нормально работает, а “аддоны” которые стоят отдельно шустро открываются. Тут я задумиался, а может и ок свой домашний сервер сделать без аддонов.
То что все отдельно не доставляет проблем - просто заходишь на отдельный адрес для zigbee2mqtt и там уже подключаешь устройства. Все прокидывается в ХА автоматически без проблем.
Зачем ХА для простой задачи? В нем удобнее делать автоматизации, возьмем даже блупринт для разных нажатий - скачал - настроил и работает. После терминального ада это как спасение.
Мало не самих ресурсов, а оперативной памяти. А так, все работает, хоть и пришлось помучиться.
Адовая установка
При попытке подключиться через remote ssh к контроллеру - он просто виснет. Я только в процессе вспомнил про этот инструмент, а так все через nano.
Расширение Remote SSH для VS Code позволяет работать с файлами и кодом, расположенным на удаленном сервере, предоставляя при этом полный функционал локальной интегрированной среды разработки (IDE). Забудьте о навигации по файлам в nano
, где каждое действие требует изучения мануала (помните Ctrl+O, Enter, Ctrl+X
для сохранения и выхода?). Или о загадке vim
, из которого, по слухам, можно выйти только после долгого и мучительного изучения (:wq!
или :q!
). Инструмент хороший, жаль что не работает на этом контроллере.
Установим образ
Качать образ с ха не надо - зря потраченное время. Аддоны хоть и предустановлены, но ими без суепрвайзд не воспользоваться.
А вот что нужно это чистая система https://fw.jethome.com/devices/jethome/D1/ В шапке можно заметить версию для SD, но нам нужна burning версия чуть ниже
И приложение USB Burning Tool v2.2.3 тоже нужно, оно где-то рядом. Его открываем и загружаем наш образ Import Image.
Для прошивки берем самый популярный прайдовский кабель USB-A USB-A, который мне пришлось заказывать отдельно.
Отключаем обязательно от постоянного питания
И удерживая кнопку boot с помошью иголки подключаем к USB.
В USB Burning Tool после загрузки образа нажимаем Старт, у себя я ничего не менял. Программа немного подвиснет на 99% но завершит нормально.
SSH и начинаем.
Я использую терминал из VS Code и так как romete ssh не работает то весь мануал идет через терминал.
Разные элементы можно повторить на любом контроллере на debian. Процесс установки все по отдельности - это то ещё испытание. Чат гпт конечно помогает, но очень часто уходит в галлюцинации.
А почему бы и не мануалы от производителя … любой мануал протухает, так и тут. Эти мануалы все равно помогают.
Ощущение от процесса установки:
Что будем делать? Можно пролистнуть ниже если не потребуется какой-то шаг.
1 Установим Owserver для датчиков 1-wire
2 Поставим брокер Mosquitto и Zigbee2mqtt. Если второй может и не пригодиться, то вот без первого не будут работать встроенные реле
3 Родное приложение по управлению входами и реле.
4 Ставим Home Assistant Container
5 Добавляем в конфигурацию управление через modbus и mqtt в Home Assistant
Датчики 1-wire
Если к любому контроллеру подключен порт с 1-wire мы можем его добавить в HA. Для этого нужен OWSERVER.
Переходим в терминал и устанавливаем.
sudo apt-get install owfs ow-shell
Найдите в нем и закомментируйте строку:
*# server: FAKE = DS18S20,DS2405*
Теперь в файле конфигурации должны присутствовать строки:
server: port = localhost:4304 server: w1
Перезапустите службу owserver:
sudo systemctl restart owserver
sudo systemctl enable owserver
Когда установим Home Assistant в разделе интеграций будет добавление датчиков 1-wire
Поставим брокер Mosquitto и Zigbee2mqtt как отдельные сервисы.
Не сразу удалось установить и подружить брокер с Zigbee2mqtt - самое веселое было определение правильного порта для zigbee. Официальная инструкция конечно же устарела, особенно много произошло после появления версии Zigbee2mqtt 2.0…
Установка необходимых компонентов (Node.js, npm, pnpm, Mosquitto)
Начнем с установки всего, что нужно для работы Zigbee2MQTT. Откройте терминал на вашем JetHub H1 и выполните команды для обновления списка пакетов и самой системы:
sudo apt update sudo apt upgrade -y
#Я у себя не делал апгрейд, на всякий случай.
Установка Node.js и npm. Zigbee2MQTT работает на Node.js. Установим его вместе с менеджером пакетов npm.
sudo apt install -y nodejs npm
Установка pnpm (рекомендуемый менеджер пакетов для Zigbee2MQTT). Zigbee2MQTT предпочитает использовать pnpm для управления зависимостями. Если его нет, Zigbee2MQTT может не запуститься.
Установка Mosquitto (MQTT-брокера). Mosquitto - это легковесный MQTT-брокер, который Zigbee2MQTT использует для обмена данными с Home Assistant и другими системами.
sudo apt install -y mosquitto mosquitto-clients
Настройка Mosquitto
Теперь настроим Mosquitto, чтобы он мог принимать соединения от Zigbee2MQTT. Откройте файл конфигурации Mosquitto.
sudo nano /etc/mosquitto/mosquitto.conf
Проверьте следующую конфигурацию в файле. Это ваша рабочая конфигурация Mosquitto, которая позволяет ему принимать соединения.
pid_file /run/mosquitto/mosquitto.pid persistence true
persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log include_dir /etc/mosquitto/conf.d
Сохраните и закройте файл. Нажмите Ctrl+O, затем Enter для сохранения, и Ctrl+X для выхода.
Перезапустите службу Mosquitto.
sudo systemctl restart mosquitto
Проверьте статус Mosquitto. Убедитесь, что Mosquitto запущен без ошибок. Ищите Active: active (running). sudo systemctl status mosquitto
Если есть ошибки, просмотрите логи: sudo journalctl -u mosquitto.service -f
.
Установка и настройка Zigbee2MQTT
Теперь установим и настроим саму службу Zigbee2MQTT.
Создайте директорию для Zigbee2MQTT и перейдите в нее от имени root
. sudo mkdir /opt/zigbee2mqtt cd /opt/zigbee2mqtt
Загрузите Zigbee2MQTT и установите зависимости.
sudo git clone <https://github.com/Koenkk/zigbee2mqtt.git> . sudo npm install
Это может занять некоторое время.
Создайте файл конфигурации configuration.yaml
.
sudo nano /opt/zigbee2mqtt/data/configuration.yam
Вставьте вашу рабочую конфигурацию, изменив IP-адрес на IP-адрес вашего Mosquitto-сервера (в нашем случае 192.168.2.41
).
homeassistant: true permit_join: true mqtt: base_topic: zigbee2mqtt server: mqtt://192.168.2.41 serial: port: /dev/ttyAML2 adapter: zstack advanced: channel: 15 pan_id: 0x1a62 network_key: [1, 3, 5, 7, 9, 11, 13, 15, 0, 2, 4, 6, 8, 10, 12, 13] frontend: enabled: true port: 8080 host: 0.0.0.0
Сохраните и закройте файл. Нажмите Ctrl+O, затем Enter для сохранения, и Ctrl+X для выхода.
Создание службы systemd для Zigbee2MQTT
Создадим службу, чтобы Zigbee2MQTT запускался автоматически и работал в фоновом режиме.
sudo nano /etc/systemd/system/zigbee2mqtt.service
Вставьте следующее содержимое.
[Unit]
Description=zigbee2mqtt
After=network.target mosquitto.service
[Service]
ExecStart=/usr/bin/npm start
WorkingDirectory=/opt/zigbee2mqtt
User=root
Group=root
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
Сохраните и закройте файл. Нажмите Ctrl+O, затем Enter для сохранения, и Ctrl+X для выхода.
Перезагрузите systemd, включите и запустите службу Zigbee2MQTT.
sudo systemctl enable zigbee2mqtt.service
sudo systemctl start zigbee2mqtt.service
Шаг 5: Проверка и доступ к Zigbee2MQTT
Последний, но очень важный шаг!
sudo systemctl status zigbee2mqtt.service
Убедитесь, что служба активна (Active: active (running)
).
sudo journalctl -u zigbee2mqtt.service -f
Вы должны увидеть сообщения об успешном подключении к Zigbee-адаптеру и к MQTT-брокеру, а затем строку: info: z2m: Zigbee2MQTT started!
.
Откройте веб-интерфейс Zigbee2MQTT: Например: http://192.168.2.41:8080
`http://<IP-адрес_вашего_JetHub_H1>:8080`
Узнайте IP-адрес вашего JetHub H1. Найдите IP-адрес (например, 192.168.x.x
).
Откройте веб-браузер на вашем компьютере и введите адрес:
Теперь вы должны увидеть веб-интерфейс Zigbee2MQTT, где вы сможете начать сопряжение своих Zigbee-устройств, нажимая на кнопку "Permit join (All)".
Абсолютно такой же как и аддон, только работает шустрее.
Родное приложение по управлению входами и реле.
С этим я возился дольше всего, постоянно ругался на занятые порты. Помогла частично официальная иснтрукция.
Подготовка системы и установка mqtt-io (без виртуальной среды)
Обновите список пакетов и установите необходимые утилиты:
sudo apt update sudo apt install python3-pip gpiod libgpiod-tools
Установите mqtt-io глобально (без виртуальной среды):
Этой командой mqtt-io будет установлен в системный интерпретатор Python3.
Проверьте, что утилиты gpiodetect
и gpioinfo
доступны: sudo gpiodetect sudo gpioinfo
Вы должны увидеть список обнаруженных GPIO-чипов и информации по линиям.
Анализ текущего состояния GPIO через sysfs
Проверьте содержимое каталога sysfs для GPIO:
Вы увидите, что там присутствуют ссылки, например, gpio522, gpio538, gpio539, gpio540, gpio541, gpio542, gpio548, gpio553, gpio555, gpio556, gpio557, gpio558
. Это означает, что соответствующие GPIO-линии уже экспортированы через sysfs и могут конфликтовать с работой mqtt-io через libgpiod.
Если таких экспортированных линий нет (т.е. если в каталоге присутствует только файл export и ссылки на gpiochip), то этап unexport можно пропустить. Но в данном случае они присутствуют.
Освобождение (Unexport) конфликтующих GPIO-линий
Чтобы mqtt-io мог корректно работать с GPIO, их нужно «разэкспортировать» из sysfs. Для этого можно выполнить команду unexport для каждого номера.
Проверка вручную (по одному номеру): Например, для gpio522 выполните:
sudo sh -c "echo 522 > /sys/class/gpio/unexport"
Затем аналогично для остальных:
sudo sh -c "echo 538 > /sys/class/gpio/unexport" sudo sh -c "echo 539 > /sys/class/gpio/unexport" sudo sh -c "echo 540 > /sys/class/gpio/unexport" sudo sh -c "echo 541 > /sys/class/gpio/unexport" sudo sh -c "echo 542 > /sys/class/gpio/unexport" sudo sh -c "echo 548 > /sys/class/gpio/unexport" sudo sh -c "echo 553 > /sys/class/gpio/unexport" sudo sh -c "echo 555 > /sys/class/gpio/unexport" sudo sh -c "echo 556 > /sys/class/gpio/unexport" sudo sh -c "echo 557 > /sys/class/gpio/unexport" sudo sh -c "echo 558 > /sys/class/gpio/unexport"
Если какая-либо команда возвращает ошибку «Недопустимый аргумент», значит для этого конкретного номера unexport не требуется (линия может быть неактивной).
Автоматизация через systemd (рекомендуется): Чтобы при каждом запуске mqtt-io конфликтующие GPIO-линии освобождались автоматически, встроим нужный цикл в unit-файл. Мы используем конструкцию, которая перебирает нужные номера и игнорирует ошибки: ExecStartPre=sh -c "for N in 522 538 539 540 541 542 548 553 555 556 557 558; do echo $N > /sys/class/gpio/unexport 2>/dev/null || true; done"
Эта строка будет выполняться перед запуском mqtt-io.
Настройка файла конфигурации mqtt-io
Создайте или отредактируйте файл /etc/mqtt-io.yaml
.
Пример содержимого (с подставленным MQTT‑брокером и нужными параметрами): ОТСТУПЫ ВАЖНЫ! (дзен может их искажать)
mqtt: host: 192.168.2.41 status_payload_running: available status_payload_stopped: unavailable status_payload_dead: unavailable ha_discovery: name: JetHub enabled: true # GPIO gpio_modules: - name: gpio module: gpiod chip: /dev/gpiochip0 digital_inputs: - name: jethub_front_button module: gpio pin: 10 # "UserButton": вход, active-low inverted: true poll_interval: 0.1 ha_discovery: component: binary_sensor name: JetHub Front Button - name: jethub_input_1 module: gpio pin: 46 # "Input1": вход, active-high poll_interval: 0.1 ha_discovery: component: binary_sensor name: JetHub Input 1 - name: jethub_input_2 module: gpio pin: 45 # "Input2": вход, active-high poll_interval: 0.1 ha_discovery: component: binary_sensor name: JetHub Input 2 - name: jethub_input_3 module: gpio pin: 44 # "Input3": вход, active-high poll_interval: 0.1 ha_discovery: component: binary_sensor name: JetHub Input 3 - name: jethub_input_4 module: gpio pin: 43 # "Input4": вход, active-high poll_interval: 0.1 ha_discovery: component: binary_sensor name: JetHub Input 4 digital_outputs: - name: stat_led_red module: gpio pin: 26 # "LedRed": выход, active-low inverted: true ha_discovery: component: switch name: JetHub stat LED red - name: stat_led_green module: gpio pin: 27 # "LedGreen": выход, active-low inverted: true ha_discovery: component: switch name: JetHub stat LED green - name: jethub_relay_1 module: gpio pin: 30 # "Output1": выход, active-high ha_discovery: component: switch name: JetHub Relay 1 - name: jethub_relay_2 module: gpio pin: 29 # "Output2": выход, active-high ha_discovery: component: switch name: JetHub Relay 2 - name: jethub_relay_3 module: gpio pin: 28 # "Output3": выход, active-high ha_discovery: component: switch name: JetHub Relay 3
Этот файл содержит настройки для подключения к MQTT‑брокеру (без полей user и password) и для управления GPIO.
Настройка и перезапуск unit-файла systemd для mqtt-io
Откройте unit-файл /etc/systemd/system/mqtt-io.service
для редактирования:
sudo nano /etc/systemd/system/mqtt-io.service
Вставьте или отредактируйте содержимое unit-файла, включив ExecStartPre с циклом unexport:
[Unit]
Description=mqtt-io
After=network.target
[Service]
ExecStartPre=sh -c "for N in 522 538 539 540 541 542 548 553 555 556 557 558; do echo $N > /sys/class/gpio/unexport 2>/dev/null || true; done"
ExecStart=python3 -m mqtt_io /etc/mqtt-io.yaml
StandardOutput=inherit
StandardError=inherit
Restart=always
User=root
[Install]
WantedBy=multi-user.target
Сохраните изменения и выйдите (Ctrl+O, Enter, затем Ctrl+X).
Запустите (или перезапустите) сервис mqtt-io:
sudo systemctl restart mqtt-io
Если статус — active (running), переходите к следующему шагу.
В логах должны появляться сообщения вида «Subscribed to topic…», что свидетельствует об успешном подключении к MQTT-брокеру, а ошибки «Device or resource busy» больше не должны возникать.
Функциональное тестирование
Проверка MQTT-подключения: Подпишитесь на все топики, используя, например, mosquitto_sub:
mosquitto_sub -h 192.168.2.41 -t '#' -v
Если mqtt-io публикует сообщения о состояниях GPIO (или статусы «available», «unavailable»), вы увидите вывод.
Проверка через Home Assistant (если используется): При включённом MQTT discovery в файле конфигурации должны автоматически появиться устройства с именами из поля ha_discovery (например, «JetHub Front Button», «JetHub Input 1» и т.д.).
Физическая проверка: Если у вас имеется доступ к панели устройства, попробуйте нажать кнопку или изменить состояние входа/выхода и проверьте, поступают ли соответствующие изменения через MQTT.
Установка Home Assistant Container на JetHome D1 (Armbian)
Оказалось даже проще чем я думал. Сам ХА мне показалось что работает даже быстрее чем Supervised.
Установив ”аддоны” по отдельности у нас все работает так:
Установка Docker Engine
Теперь мы установим Docker, который будет управлять контейнером Home Assistant.
Установите необходимые пакеты для установки Docker через HTTPS.
sudo apt install ca-certificates curl gnupg lsb-release -y
Добавьте официальный GPG ключ Docker.
sudo mkdir -m 0755 -p /etc/apt/keyrings curl -fsSL <https://download.docker.com/linux/debian/gpg> | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Добавьте репозиторий Docker в APT источники: Эта команда автоматически определит архитектуру вашей системы (arm64
) и версию Armbian/Debian.
echo \\ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] <https://download.docker.com/linux/debian> \\ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Снова обновите список пакетов (теперь он будет включать Docker репозиторий).
Установите Docker Engine, containerd и Docker Compose.
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
Проверьте, что Docker установлен и работает. Вывод должен показать Active: active (running)
. sudo systemctl status docker
Подготовка к запуску Home Assistant в Docker
Эти шаги необходимы для удобной работы с Docker и правильного хранения данных Home Assistant.
Добавьте вашего пользователя в группу docker (рекомендовано). Это позволит вам запускать команды docker без sudo. Замените ваш_основной_пользователь на имя пользователя, под которым вы входите на JetHome D1 (например, jethome или user или root). sudo usermod -aG docker ваш_основной_пользователь
ВАЖНО: После выполнения этой команды выйдите из вашей SSH-сессии и зайдите ЗАНОВО, чтобы изменения вступили в силу. Если вы планируете работать только под root
, этот шаг можно пропустить, но это не рекомендуется для повседневной работы.
Создайте каталог для данных Home Assistant. Это место на вашей хост-системе, где Home Assistant будет хранить всю свою конфигурацию, базу данных и логи. Ваши данные сохранятся, даже если вы обновите или пересоздадите Docker-контейнер.
sudo mkdir /opt/homeassistant sudo chown -R 1000:1000 /opt/homeassistant
Мы используем /opt/homeassistant
как стандартное место для сторонних приложений.
Права 1000:1000
(UID:GID) соответствуют внутреннему пользователю Home Assistant в контейнере.
Запуск Home Assistant Container
Теперь самый главный шаг — запуск Home Assistant в Docker-контейнере.
Запустите Home Assistant. Скопируйте и вставьте следующую команду целиком. Обязательно измените Europe/Chisinau на вашу реальную временную зону! (Список можно посмотреть командой timedatectl list-timezones на Linux).
docker run -d \\ --name homeassistant \\ --privileged \\ --restart unless-stopped \\ -e TZ=Europe/Chisinau \\ -v /opt/homeassistant:/config \\ --network host \\ ghcr.io/home-assistant/home-assistant:stable
d
: Запускает контейнер в фоновом режиме.
-name homeassistant
: Присваивает контейнеру легко узнаваемое имя.
-privileged
: Предоставляет контейнеру расширенные привилегии. Это критично для доступа к USB-устройствам (например, Zigbee-стику) и Bluetooth.
-restart unless-stopped
: Контейнер будет автоматически запускаться при старте системы, если он не был остановлен вручную.
e TZ=Europe/Chisinau
: Устанавливает временную зону.
v /opt/homeassistant:/config
: Монтирует каталог /opt/homeassistant
на вашей хост-системе в каталог /config
внутри контейнера.
-network host
: Контейнер использует сетевой стек хост-системы. Это упрощает обнаружение устройств в локальной сети.
ghcr.io/home-assistant/home-assistant:stable
: Указывает Docker загрузить официальный стабильный образ Home Assistant.
Дождитесь загрузки образа и запуска контейнера. Первый запуск займет некоторое время, так как Docker будет загружать образ Home Assistant (он довольно большой).
Проверьте статус Docker-контейнера Home Assistant.
Вы должны увидеть контейнер homeassistant
со статусом Up ... seconds/minutes
.
Чтобы посмотреть логи запуска Home Assistant:
Вы увидите вывод логов. Когда Home Assistant будет готов, вы увидите сообщения о запуске веб-сервера. Нажмите Ctrl+C
, чтобы выйти из логов.
Доступ к Home Assistant и дальнейшие шаги
Доступ к веб-интерфейсу Home Assistant: После того как Home Assistant полностью запустится, откройте веб-браузер и перейдите по адресу: http://<IP_адрес_Jethome_D1>:8123 Вы должны увидеть страницу приветствия Home Assistant, где вам будет предложено создать первого пользователя (администратора).
Восстановление конфигурации (если есть):
ВАЖНО: Не пытайтесь использовать прямые бэкапы от Home Assistant Supervised (файлы .tar
), так как они несовместимы с Home Assistant Container.
Вам нужно будет вручную скопировать ваши конфигурационные YAML-файлы (например, configuration.yaml
, automations.yaml
, scripts.yaml
, secrets.yaml
) из ваших бэкапов в каталог /opt/homeassistant
на JetHome D1.
После копирования файлов, перезапустите контейнер Home Assistant. docker restart homeassistant
Доступ к Home Assistant configuration
Привычная конфигурация в неудобном терминальном виде:
Добавляем в конфигурацию управление через modbus и mqtt в Home Assistant
После первичной настройки HA можно перейти в Устройства и службы и добавить интеграцию. Адрес используем нашего HA. Все автоматически подключажется.
С модбас чуть сложнее, так как у нас нет редактора нормального в качестве аддона мы идем в терминал и там настраиваем конфигурацию.
У меня тестовое реле и датчик температуры, поэтому конфигурация будет тестовой - но тоже рабочей. Я выбрал наиболее оптимальные параметры для датчика температуры, а дополнительные можно посмотреть на гите https://gist.github.com/smirnowegor/6f6fa8f1c5a3f1a728b3bf5287ec88d9
# Модуль на USB0 – оставляем без изменений (например, реле) - type: serial method: rtu name: "modbus_relay_hub" port: /dev/ttyUSB1 # Укажите правильный COM-порт для HA baudrate: 9600 stopbits: 1 bytesize: 8 parity: N # timeout: 5 # При необходимости # delay: 1 # При необходимости switches: - name: "Modbus Реле" slave: 1 address: 0x0000 write_type: coil # Модуль на USB1 для датчика WB‑MSW v.4 (Modbus-адрес 191) - type: serial method: rtu name: "modbus_msw_sensor_hub" port: /dev/ttyUSB0 # Укажите корректный порт для WB-MSW v.4 baudrate: 9600 stopbits: 1 bytesize: 8 parity: N # timeout: 5 # При необходимости # delay: 1 # При необходимости sensors: - name: "Modbus Адрес" slave: 191 address: 128 input_type: holding data_type: uint16 unique_id: "msw_modbus_address_191" - name: "Влажность (0.01)" slave: 191 address: 5 input_type: input data_type: int16 precision: 2 scale: 0.01 unit_of_measurement: "%" device_class: humidity unique_id: "msw_hum_0_01_191" - name: "Влажность (0.1)" slave: 191 address: 1 input_type: input data_type: int16 precision: 2 scale: 0.1 unit_of_measurement: "%" device_class: humidity unique_id: "msw_hum_0_1_191" - name: "Влажность Сырая" slave: 191 address: 285 input_type: input data_type: int16 precision: 2 scale: 0.01 unit_of_measurement: "%" device_class: humidity unique_id: "msw_raw_hum_191" - name: "Внутренняя Температура МК" slave: 191 address: 124 input_type: input data_type: int16 precision: 2 scale: 0.1 unit_of_measurement: "°C" device_class: temperature unique_id: "msw_internal_temp_mcu_191" - name: "Напряжение Питания МК" slave: 191 address: 123 input_type: input data_type: uint16 unit_of_measurement: "mV" device_class: voltage unique_id: "msw_voltage_mcu_191" - name: "Текущее Напряжение Питания" slave: 191 address: 121 input_type: input data_type: uint16 unit_of_measurement: "mV" device_class: voltage unique_id: "msw_supply_voltage_191" - name: "Текущее Напряжение Питания (до усреднения)" slave: 191 address: 125 input_type: input data_type: uint16 unit_of_measurement: "mV" device_class: voltage unique_id: "msw_supply_voltage_raw_191" - name: "Темп. Компенсация Самонагрева T/H" slave: 191 address: 245 input_type: holding data_type: int16 scale: 0.01 unit_of_measurement: "°C" unique_id: "msw_selfheat_comp_191" - name: "Температура (0.01)" slave: 191 address: 4 input_type: input data_type: int16 scale: 0.01 precision: 2 unit_of_measurement: "°C" device_class: temperature unique_id: "msw_temp_0_01_191" - name: "Температура (0.1)" slave: 191 address: 0 input_type: input data_type: int16 scale: 0.1 precision: 2 unit_of_measurement: "°C" device_class: temperature unique_id: "msw_temp_0_1_191" - name: "Температура Сырая" slave: 191 address: 284 input_type: input data_type: int16 precision: 2 scale: 0.01 unit_of_measurement: "°C" device_class: temperature unique_id: "msw_raw_temp_191"
#сделайсам #обучение #настройка #планирование #wirenboard
Способ 1 Поддержать автора
Способ 2 https://donate.stream/yoomoney410013774736621
или через криптокошелёк (Только USDT) TCHekdJZFndXpDrHZGuTmqFNcqhWBTTzPr
Связаться со мной. (Консультации, проектирование и обучение)
Новый подход к электрике и дизайну помещений. Некоторые провода уже не нужно тянуть, какие-то решения можно принять после ремонта. Перенести выключатель, запустить кондиционер с телефона - возможно автоматизировать любую рутину.
Мой телеграм канал, там все быстрее обновляется телеграм.
Сайт smart4home.ru и альтернативный Умный дом на любом этапе
Соц сети: RuTube канал Удобный дом / You Tube канал Удобный дом Яндекс Дзен: Удобный дом / InGram
Платформы специалистов: Авито / Профи.ру / Яндекс Услуги https://uslugi.yandex.ru/profile/EgorSmirnov-2294380?from=telek