Skip to content

Repository files navigation

Tion MagicAir — интеграция для Home Assistant

Бризеры Tion и станции MagicAir через облако api2.magicair.tion.ru. Собственный асинхронный клиент, без внешних зависимостей.

Что появляется в Home Assistant

Одно устройство-хаб на локацию аккаунта и по устройству на каждый бризер и станцию. Комната подсказывается из имени зоны в облаке.

Бризер

Сущность Что показывает
climate режим (выключен / продув / нагрев), скорость, целевая температура
sensor «Температура на входе» воздух до бризера (t_in)
sensor «Температура на выходе» воздух после бризера (t_out)
sensor «Скорость» текущая скорость вентилятора
sensor «Производительность» приток в м³/ч
sensor «Ресурс фильтра» сколько дней фильтру осталось
sensor «Наработка» часы работы, диагностический
sensor «Уровень сигнала» диагностический
sensor «Код ошибки» диагностический
binary_sensor «Вентилятор» работает или нет
binary_sensor «Требуется замена фильтра» ресурс исчерпан
binary_sensor «Связь» устройство на связи с облаком
number «Минимальная/максимальная скорость в авто» границы для автоматики зоны
number «Порог CO2» уровень, по которому облако ведёт зону
select «Источник воздуха» улица / помещение / смешанный — только у моделей с заслонкой

MagicAir

Сущность Что показывает
sensor «CO2» углекислый газ, ppm
sensor «Температура» / «Влажность» климат комнаты
sensor «PM1» / «PM2.5» / «PM10» пыль — только у моделей, которые её измеряют
sensor «Сигнал Wi-Fi» диагностический
binary_sensor «Связь» станция на связи с облаком

Сущности, за которыми в конкретной модели нет датчика, не создаются: облако отдаёт для них NaN, и интеграция это отличает от нуля.

Скорость и режим зоны

Облако Tion управляет зоной, а не отдельным бризером. У climate-сущности скорость auto означает, что зону ведёт облако по уровню CO₂; выбор конкретной скорости или off переводит зону в ручной режим. Режим зоны, её имя и порог CO₂ видны в атрибутах zone_mode, zone_name, zone_target_co2.

Список скоростей строится по speed_limit устройства: у O₂ это 1–4, у S3/S4 — 1–6.

Порог CO₂ и границы скорости — свойства зоны, а сущности живут на бризере. Если в одной зоне стоит несколько бризеров, их одноимённые настройки показывают и меняют одно и то же значение.

Устройство кода

aiohttp-сессия Home Assistant
        ↓
TionApiClient (api.py) — про HA ничего не знает
        ↓
TionDataUpdateCoordinator
        ↓
сущности

api.py — самостоятельный клиент: сессию получает снаружи, состояние отдаёт дата-классами, ошибки поднимает своими типами (TionAuthError, TionConnectionError, TionCommandError). Его можно дёргать из обычного скрипта без Home Assistant.

Токен доступа лежит в .storage/tion_magicair.<entry_id> и переживает перезапуск, поэтому логин не тратится на каждый старт. Протухший токен клиент обновляет сам, ровно одна повторная попытка на запрос.

Требования

Home Assistant 2026.7.0 или новее. Ограничение жёсткое: интеграция использует UnitOfRatio и UnitOfDensity, появившиеся в ядре именно в этой версии. Проверялась на 2026.8.3.

Установка

Через HACS

  1. HACS → в меню сверху справа Custom repositories.
  2. Вставить https://github.com/badigit/tion-homeassistant, тип — Integration.
  3. Найти в списке Tion MagicAir, нажать Download.
  4. Перезапустить Home Assistant.

Вручную

  1. Скопировать каталог custom_components/tion_magicair в custom_components своего Home Assistant.
  2. Перезапустить Home Assistant.
  3. Настройки → Устройства и службы → Добавить интеграцию → Tion MagicAir.

Параметры установки

Поле Что это Обязательно
Электронная почта логин учётной записи MagicAir — та же, что в мобильном приложении Tion да
Пароль пароль от этой учётной записи да

Одна учётная запись заводится один раз: повторная попытка с той же почтой прервётся, регистр в ней значения не имеет. Пароль хранится только внутри записи конфигурации; токен доступа интеграция получает сама и держит его в .storage. Если облако перестанет принимать пароль, Home Assistant покажет починку «Требуется повторная аутентификация» — почту вводить заново не нужно, только новый пароль.

Параметры настройки

Меняются в Настройки → Устройства и службы → Tion MagicAir → Настроить.

Параметр Что делает По умолчанию Допустимо
Интервал опроса как часто читать состояние из облака, в секундах 60 10–3600

Чаще 10 секунд смысла нет: облако само обновляет телеметрию примерно раз в минуту. После изменения запись перечитывается автоматически, перезапуск Home Assistant не нужен.

Значок интеграции

Лежит в custom_components/tion_magicair/brand/ — начиная с Home Assistant 2026.3 кастомные компоненты несут значок с собой, и локальные файлы имеют приоритет над CDN brands.home-assistant.io. Подавать PR в репозиторий home-assistant/brands не нужно, папка custom_integrations там объявлена устаревшей.

Используется официальный знак Tion, без изменений — так же, как это делают интеграции Dreame, Tapo, LG и прочие. Правила brands прямо говорят, что изображения служат только для опознания продукта и не означают одобрения; видоизменять чужой знак не нужно и вредно, получилось бы похожее до смешения производное вместо честной ссылки на оригинал. Элементов фирменного стиля самого Home Assistant в значке нет — это правилами запрещено.

Пересобрать из источника: uv run python scripts/make_brand.py.

icon@2x.png не выпускается: изображения крупнее 300 пикселей Tion не публикует, а растянутая до 512 картинка была бы hDPI-версией без единой лишней детали. Home Assistant в этом случае обходится одним icon.png.

Удаление

  1. Настройки → Устройства и службы → Tion MagicAir, в меню записи выбрать Удалить. Вместе с записью пропадут её устройства и сущности, а сохранённый токен доступа сотрётся из .storage.
  2. Удалить каталог custom_components/tion_magicair.
  3. Перезапустить Home Assistant.

Учётные данные интеграция хранит только внутри записи конфигурации, поэтому после шага 1 в системе от неё ничего не остаётся.

Тесты

uv sync --group dev
uv run pytest

115 тестов, 100% покрытия по всем модулям. Кроме диалога настройки покрыты: разбор ответа облака для моделей, которых нет физически (3S, 4S, Lite и незнакомая новая), транспорт с обновлением протухшего токена, все команды climate, number и select, недоступность устройства и отказы облака.

На Windows тесты не запускаются, и дело не в них: Home Assistant импортирует fcntl, а это модуль только для POSIX. Гонять нужно на Linux или в контейнере, например тем же образом ядра, на котором интеграция работает:

docker run --rm -v "$PWD:/src" -w /src --entrypoint sh \
  ghcr.io/home-assistant/home-assistant:2026.8.3 \
  -c "pip install -q --break-system-packages pytest-homeassistant-custom-component==0.13.357 pytest-timeout && python -m pytest -q"

Версия pytest-homeassistant-custom-component пиньтся под конкретную версию ядра — 0.13.357 соответствует 2026.8.3.

Что проверено вживую

Аккаунт с одним бризером Tion O₂ Rf (tionO2Rf) и одной станцией MagicAir (co2mb): чтение всех величин, смена температуры, скорости и режима зоны.

Код для S3, S4 и Lite написан по протоколу, но на железе не проверялся: у этих моделей есть заслонка и другой потолок скоростей, а у 4S — отдельная логика нагрева. Отзывы приветствуются.

Правовая оговорка

Проект неофициальный и никак не связан с ООО «Тион». «Tion» и «MagicAir» — товарные знаки их правообладателя; знак и название используются только чтобы указать, с каким оборудованием работает интеграция, и не означают одобрения или поддержки с его стороны.

About

Интеграция Home Assistant для бризеров Tion и станций MagicAir: свой async-клиент облака, без внешних зависимостей

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages