В статье описывается личный опыт интеграции вентиляционной установки в умный дом Home Assistant и управление ей голосом через Алису.

1. Железо
Вентиляционная установка Minibox Home 350 с автоматикой GTC и интернет‑модулем GTC Ethernet EM-LAN. Данный модуль подключается сетевым кабелем к роутеру. В моём случае сразу при монтаже было настроено управление установкой через родное приложение GTC Remote Access 2.0 со смартфона
Home Assistant OS — это операционная система для управления умным домом, которую можно запустить практически на чём угодно: одноплатные ПК (Raspberry Pi), мини‑ПК, NAS (Synology), старый ноутбук или виртуальная машина. А ещё в Home Assistant можно сделать управление умными устройствами из любых экосистем (Яндекс, Xiaomi, Aqara и пр.). Я использовал сетевое хранилище NAS Synology DS920+.
Любая колонка с Алисой. У меня 1.5 года работала старая JBL Link Portable, сейчас обновился до Яндекс Станции 3.
2. Запуск Home Assistant
Подробные описания установки и настройки Home Assistant можно найти тут. Ниже опишу очень кратко свой вариант. Совет: не устанавливайте Home Assistant через Docker, нам нужен Home Assistant OS
Создаётся виртуальная машина в Synology NAS
На официальном сайте Home Assistant скачивается образ.ova (~360 Мб) и импортируется в виртуальную машину
Всё. Дальше просто по ссылке будет открываться в браузере домашняя страница вашего умного дома. Можно скачать отдельное приложение на телефон (iOS, Android и пр.). Для управления вентиляцией через Алису этого шага достаточно.
Прямой доступ к умному дому Home Assistant по умолчанию будет только из локальной сети, то есть когда смартфон подключен к домашнему Wi‑Fi. Для настройки удалённого доступа есть неплохие бесплатные варианты, рекомендую, например, Dataplicity или Tailscale. Я в итоге докупил у провайдера белый IP и настроил прямой доступ ко всему NAS и в том числе к умному дому. Для меня это оказался самый удобный вариант, так как нет ограничений скорости для работы с домашним облаком.
3. Подключение автоматики GTC к Home Assistant
Спасибо Роману Громову за статью, которая когда‑то очень помогла с настройкой мне.
Сенсоры
Первичная настройка подключения происходит через редактор файлов Home Assistant. Для его запуска перейдите в Настройки > Дополнения > Магазин дополнений. Найдите «File Editor» и нажмите Установить. Включите опцию «Показывать в боковой панели» и нажмите Запустить.
Через File Editor открываем файл configuration.yaml и дописываем код:
modbus:
- name: GTC
type: tcp
host: 192.168.1.49
port: 502
delay: 5
timeout: 30
sensors:
- name: minibox_target_temp(sensor)
unique_id: minibox_target_temp(sensor)
unit_of_measurement: °C
slave: 1
address: 31
precision: 1
scale: 0.1
data_type: int16
- name: minibox_target_fs(sensor)
unique_id: minibox_target_fs(sensor)
slave: 1
address: 32
data_type: int16
- name: minibox_current_temp(sensor)
unique_id: minibox_current_temp(sensor)
unit_of_measurement: °C
slave: 1
address: 7
input_type: input
precision: 1
scale: 0.1
data_type: int16
- name: minibox_current_fs(sensor)
unique_id: minibox_current_fs(sensor)
slave: 1
address: 25
input_type: input
data_type: int16
Этот код подключает интеграцию modbus и создаёт 4 переменные (сенсора) в системе Home Assistant, которые будут постоянно считывать свои значения с установки. Для управления через Алису достаточно только первых двух (minibox_target_temp(sensor) и minibox_target_fs(sensor)), но для контроля состояния удобно иметь все 4.
«minibox_target_temp(sensor)» — это целевая температура
«minibox_target_fs(sensor)» — целевая скорость вентилятора
«minibox_current_temp(sensor)» — фактическая температура
«minibox_current_fs(sensor)» — фактическая скорость вентилятора
У каждого сенсора в коде выше есть параметр address. Значение его можно найти в документации к автоматике (я её нашёл на форуме по названию «Список регистров Оазис v.5», правда там все адреса указаны на единицу больше). Таким образом можно в принципе получить значения и других сенсоров установки.
В коде измените 192.168.1.49 на IP адрес вашей установки. Следите за числом пробелов в начале строк, — это важно. Синтаксис modbus может поменяться со временем, с исправлениями кода отлично помогает СhatGPT.

Далее надо перезагрузить Home Assistant и зайти в Настройки > Устройства и службы > вкладка Объекты. Там по названию можно найти наши созданные сенсоры и проверить считывают ли они значения. Моя установка сейчас выключена, поэтому сенсор температуры показывает просто температуру на улице.
Скрипты для включения/выключения установки
Для включения и выключения установки в Home Assistant идём в настройки — скрипты и создаём два скрипта:
С названием «Включить вентиляцию». Справа сверху нажимаем три точки — текстовый редактор и вставляем код:
data_template:
hub: GTC
unit: 1
address: 2
value: "1"
action: modbus.write_register
«Выключить вентиляцию» с кодом также в режиме текстового редактора:
data_template:
hub: GTC
unit: 1
address: 2
value: 0
action: modbus.write_register
Кавычки там стоят неслучайно, помню какое‑то время помучался, без них не работало. Скрипты можно выполнить сразу после создания и проверить, что они работают.
4. Автоматизация для двухсторонней связи Home Assistant с пультом
Для управления установкой нам потребуется создать 2 вспомогательных числа. Идём Настройки > Устройства и службы > Вспомогательное > Создать вспомогательный объект > Число:
«minibox_target_fs» — переменная для изменения и хранения целевой скорости вентилятора (значения от 1 до 10)
«minibox_target_temp» — переменная для изменения и хранения целевой температуры (значения от 5 до 30)
Теперь создадим автоматизацию. Логика работы простая: если кто‑то поменял значение скорости на пульте, то изменится значение «minibox_target_fs(sensor)», и это значение надо переписать во вспомогательную переменную «minibox_target_fs», которая и будет основным отображаемым параметром. Если же мы внутри Home Assistant изменим вспомогательную переменную «minibox_target_fs», то нужно отправить команду на вентиляционную установку для смены скорости. С температурой аналогично.
Идём Настройки > Автоматизации и сцены > Создать автоматизацию. Справа сверху нажимаем три точки — текстовый редактор, вставляем следующий код:
Скрытый текст
alias: Взаимодействие с minibox
description: ""
triggers:
- entity_id:
- input_number.minibox_target_fs
trigger: state
id: minibox_target_fs изменяется
for:
hours: 0
minutes: 0
seconds: 4
- entity_id:
- input_number.minibox_target_temp
trigger: state
id: minibox_target_temp изменяется
for:
hours: 0
minutes: 0
seconds: 6
- entity_id:
- sensor.minibox_target_fs_sensor
trigger: state
id: minibox_target_fs(sensor) изменяется
- entity_id:
- sensor.minibox_target_temp_sensor
trigger: state
id: minibox_target_temp(sensor)
conditions: []
actions:
- choose:
- conditions:
- condition: trigger
id:
- minibox_target_fs изменяется
sequence:
- data_template:
hub: GTC
unit: 1
address: 32
value: "{{ (states('input_number.minibox_target_fs'))|int }}"
action: modbus.write_register
- conditions:
- condition: trigger
id:
- minibox_target_temp изменяется
sequence:
- data_template:
hub: GTC
unit: 1
address: 31
value: >-
{{ (((states('input_number.minibox_target_temp'))|float)*10)|int
}}
action: modbus.write_register
- conditions:
- condition: trigger
id:
- minibox_target_fs(sensor) изменяется
sequence:
- if:
- condition: not
conditions:
- condition: state
entity_id: sensor.minibox_target_fs_sensor
state: unavailable
- condition: not
conditions:
- condition: state
entity_id: sensor.minibox_target_fs_sensor
state: unknown
then:
- action: input_number.set_value
metadata: {}
data:
value: "{{ states('sensor.minibox_target_fs_sensor')|round(0) }}"
target:
entity_id: input_number.minibox_target_fs
- conditions:
- condition: trigger
id:
- minibox_target_temp(sensor)
sequence:
- if:
- condition: not
conditions:
- condition: state
entity_id: sensor.minibox_target_temp_sensor
state: unavailable
- condition: not
conditions:
- condition: state
entity_id: sensor.minibox_target_fs_sensor
state: unknown
then:
- action: input_number.set_value
metadata: {}
data:
value: "{{ states('sensor.minibox_target_temp_sensor')|int }}"
target:
entity_id: input_number.minibox_target_temp
mode: queued
max: 10Потом можно снова нажать три точки и вернуться в режим «форма ввода», так можно наглядно увидеть блоки кода. В автоматизации есть 4 триггера: это изменение «minibox_target_fs(sensor)» или «minibox_target_fs» и аналогично для температуры. Для каждого триггера стоит небольшая задержка. Это полезно, например, когда значение целевой скорости меняется несколько раз подряд. Автоматизация дождётся хотя бы 4 сек без изменений переменных и тогда отправит последнюю команду на установку. Задержка для температуры 6 сек, потому что, например перед сном (в другой автоматизации) мне удобно менять температуру и скорость одновременно, но на установку две команды всё равно придут последовательно (через 4 и 6 сек).
5. Интерфейс Home Assistant и проверка автоматизации

Для управления через Алису этот раздел неактуален, просто удобство.
Самое простое — на вкладке «обзор» — добавить наши вспомогательные переменные «minibox_target_fs» и «minibox_target_temp». Теперь при изменении их значений, должна запускаться автоматизация и менять значения на пульте. В обратную сторону аналогично: ручные изменения на пульте должны менять значения переменных.
Если хочется компактно, рекомендую карточки Mushroom (нужно установить дополнение). На скриншоте как раз они, установка выключена, поэтому значок фактической скорости показывает 0, а температура ниже заданной.
Код mushroom карточек со скрина:
Скрытый текст
Код mushroom карточки с вентилятором:
features:
- type: numeric-input
style: buttons
type: custom:mushroom-template-card
entity: input_number.minibox_target_fs
icon: mdi:fan
tap_action:
action: more-info
features_position: inline
badge_text: >-
{{ '?' if is_state('sensor.minibox_current_fs_sensor', 'unknown') else
states('sensor.minibox_current_fs_sensor') }}
grid_options:
columns: 6
rows: 1
color: >-
{{ 'grey' if is_state('sensor.minibox_current_fs_sensor', '0') else '#42a5f5'
}}
Карточка с нагревом:
features:
- type: numeric-input
style: buttons
type: custom:mushroom-template-card
entity: input_number.minibox_target_temp
icon: mdi:heating-coil
tap_action:
action: more-info
features_position: inline
badge_text: >-
{{ '?' if is_state('sensor.minibox_current_temp_sensor', 'unknown') else
states('sensor.minibox_current_temp_sensor') | float | round(0)}}
grid_options:
columns: 6
rows: 1
color: |2-
{% if (states('sensor.minibox_current_temp_sensor')|float>states('input_number.minibox_target_temp')|int+1) or is_state('sensor.minibox_current_fs_sensor', '0') %}
'grey'
{% else %} #FFA500 {% endif %}
6. Получение команд от Алисы в Home Assistant
Для получения команд через Алису потребуется интеграция yandex‑station‑intents. После её установки через File Editor открываем файл configuration.yaml и дописываем код:
yandex_station_intents:
intents:
вентиляция 1: готово 1
вентиляция 2: готово 2
вентиляция 3: готово 3
вентиляция 4: готово 4
вентиляция 5: готово 5
вентиляция 6: готово 6
вентиляция 7: готово 7
вентиляция 8: готово 8
вентиляция 9: готово 9
вентиляция 10: готово 10
выключи вентиляцию: выключаю
включи вентиляцию: включаю
До двоеточия — это голосовая команда, после двоеточия — ответ Алисы. Затем нужно перезагрузить Home Assistant. Я не стал здесь писать команды для управления температурой, они у меня реализованы аналогично скорости: нагрев 5, нагрев 6, …, нагрев 30. Громоздко, но работает. К сожалению, написать как‑то красиво с переменной, судя по всему, нельзя.
7. Автоматизация для управления Minibox через Алису
Осталось лишь создать автоматизацию, которая будет запускаться после получения команды Алисой и менять значения вспомогательных переменных вентиляции или запускать скрипты включения — выключения. Идём Настройки > Автоматизации и сцены > Создать автоматизацию. Код:
Скрытый текст
alias: Голосовое управление вент.
description: ""
triggers:
- event_type: yandex_intent
event_data:
text: вентиляция 1
id: вентиляция 1
trigger: event
alias: вентиляция 1
- event_type: yandex_intent
event_data:
text: вентиляция 2
id: вентиляция 2
trigger: event
alias: вентиляция 2
- event_type: yandex_intent
event_data:
text: вентиляция 3
id: вентиляция 3
trigger: event
alias: вентиляция 3
- event_type: yandex_intent
event_data:
text: вентиляция 4
id: вентиляция 4
trigger: event
alias: вентиляция 4
- event_type: yandex_intent
event_data:
text: вентиляция 5
id: вентиляция 5
trigger: event
alias: вентиляция 5
- event_type: yandex_intent
event_data:
text: вентиляция 6
id: вентиляция 6
trigger: event
alias: вентиляция 6
- event_type: yandex_intent
event_data:
text: вентиляция 7
id: вентиляция 7
trigger: event
alias: вентиляция 7
- event_type: yandex_intent
event_data:
text: вентиляция 8
id: вентиляция 8
trigger: event
alias: вентиляция 8
- event_type: yandex_intent
event_data:
text: вентиляция 9
id: вентиляция 9
trigger: event
alias: вентиляция 9
- event_type: yandex_intent
event_data:
text: вентиляция 10
id: вентиляция 10
trigger: event
alias: вентиляция 10
- event_type: yandex_intent
event_data:
text: выключи вентиляцию
id: выключи вентиляцию
trigger: event
alias: выключи вентиляцию
- event_type: yandex_intent
event_data:
text: включи вентиляцию
id: включи вентиляцию
trigger: event
alias: включи вентиляцию
actions:
- choose:
- conditions:
- condition: trigger
id:
- вентиляция 1
sequence:
- metadata: {}
data:
value: 1
target:
entity_id: input_number.minibox_target_fs
action: input_number.set_value
- conditions:
- condition: trigger
id:
- вентиляция 2
sequence:
- metadata: {}
data:
value: 2
target:
entity_id: input_number.minibox_target_fs
action: input_number.set_value
- conditions:
- condition: trigger
id:
- вентиляция 3
sequence:
- metadata: {}
data:
value: 3
target:
entity_id: input_number.minibox_target_fs
action: input_number.set_value
- conditions:
- condition: trigger
id:
- вентиляция 4
sequence:
- metadata: {}
data:
value: 4
target:
entity_id: input_number.minibox_target_fs
action: input_number.set_value
- conditions:
- condition: trigger
id:
- вентиляция 5
sequence:
- metadata: {}
data:
value: 5
target:
entity_id: input_number.minibox_target_fs
action: input_number.set_value
- conditions:
- condition: trigger
id:
- вентиляция 6
sequence:
- metadata: {}
data:
value: 6
target:
entity_id: input_number.minibox_target_fs
action: input_number.set_value
- conditions:
- condition: trigger
id:
- вентиляция 7
sequence:
- metadata: {}
data:
value: 7
target:
entity_id: input_number.minibox_target_fs
action: input_number.set_value
- conditions:
- condition: trigger
id:
- вентиляция 8
sequence:
- metadata: {}
data:
value: 8
target:
entity_id: input_number.minibox_target_fs
action: input_number.set_value
- conditions:
- condition: trigger
id:
- вентиляция 9
sequence:
- metadata: {}
data:
value: 9
target:
entity_id: input_number.minibox_target_fs
action: input_number.set_value
- conditions:
- condition: trigger
id:
- вентиляция 10
sequence:
- metadata: {}
data:
value: 10
target:
entity_id: input_number.minibox_target_fs
action: input_number.set_value
- conditions:
- condition: trigger
id:
- выключи вентиляцию
sequence:
- metadata: {}
data: {}
action: script.unknown
- conditions:
- condition: trigger
id:
- включи вентиляцию
sequence:
- metadata: {}
data: {}
action: script.unknown_2
mode: parallel
max: 10После сохранения, вернитесь в режим «форма ввода» и скорректируйте как минимум имена скриптов включения/выключения. У вас при создании их имена будут другими.
На этом всё. Теперь голосовая команда Алисе «вентиляция 5» активирует триггер последней автоматизации и она изменит значение вспомогательной переменной «minibox_target_fs». После 4 с ожидания на изменение переменной среагирует наша первая автоматизация и отправит команду на пульт.
Что дальше
Следующим важным шагом была доработка трёхскоростного вытяжного вентилятора и интеграция в Home Assistant. При монтаже мне поставили вытяжной вентилятор Soler&Palau TD 500/160 Silent. Вентилятор хороший, тихий, но как оказалось слишком мощный для приточной установки. Если мощность вытяжки превышала скорость приточки, то в квартиру начинало тянуть воздух из всех щелей: стен, окон и даже из канализации при чистке сифона, например. Проблема была решена питанием вентилятора через понижающий трансформатор с 220 В на 110 В. После этого каждая скорость вытяжки подходила для определённых скоростей приточки. Ещё одна автоматизация в Home Assistant взяла управление на себя: она регулирует скорость вытяжного вентилятора в зависимости от скорости приточки так, чтобы приточка всегда чуть опережала вытяжку. Это оказалось очень удобно, после настройки прошло уже 1.5 года и про управление вытяжкой мы просто забыли.
Когда дома появился датчик CO2, появились и новые автоматизации Home Assistant. Теперь, если пришли гости, и мы забыли увеличить скорость вентиляции, то она увеличится сама по датчику CO2. Если увеличивать уже некуда, то Алиса напомнит открыть окошки. Другая автоматизация делает проветривание перед сном, уменьшает скорость ночью, снова увеличивает утром, снова снижает когда нас нет дома, выключает установку, если нас нет дома больше суток и включает обратно, когда мы вернулись. С ростом числа автоматизаций, необходимость управления голосом снижается, но всё равно остаётся.