Статья

Управление бризером Tion из Home Assistant

Предисловие

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

Для чего все это нужно

Собственно, заниматься всем этим безобразием меня вынудил сам бризер, т.к. уровень шума, который он создает в "свободном плавании" (управление по уровню CO2 от Magic Air), просто невыносим для нас с супругой. Благодаря реверс-инжинирингу протокола обмена Magic Air с облаком мне удалось следующее:

  • Получать показания всех датчиков бризера (скорость, температура входящего\выходящего воздуха, режим и т.д.) и Magic Air (уровень CO2, температура, влажность).
  • Управлять бризером как в ручном режиме (скорость), так и в автоматическом (при помощи задачи минимальной\максимальной скоростей).

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

Что потребуется

Потребуются, в общем, сущие пустяки:

Бризер Tion (у меня 3S)MagicAir Home Assistant

Установка компонента

  • Качаем по ссылке выше zip архив с компонентом.
  • Содержимое архива (а конкретнее, папки tion_home_assistant-master) кладем себе на сервер с Home Assistant в папку config/custom_components/tion.
  • Добавляем в configuration.yaml этот фрагмент.
  • Вставляем в secrets.yaml строчки с tion_email:  и tion_password: 
  • Перезапускаем Home Assistant.

Использование

После перезагрузки, у вас должны появиться следующие устройства:

Бризер
     Датчики MagicAir

Бризером можем управлять тремя способами:

Через информацию в разделе states (нельзя задавать диапазон скоростей для автоматического режима).

Через карточку Lovelace (вообще нельзя управлять скоростью).

Через службы (можно все).

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

climate.set_fan_mode

Управляем скоростью бризера через значение параметра fan_mode:

  • off, 0 - выключение;
  • 1..6 - включить в ручном режиме на заданной скорости:
  • auto - автоматическое управление по уровню CO2 в диапазоне скоростей;
  • 0-6, 2-4, 1-3, 4-6... и т.д - автоматическое управление в заданном диапазоне скоростей.

climate.set_hvac_mode

Управляем обогревателем входящего воздуха бризера (если есть), используя параметр hvac_mode:

  • heat - обогреватель включен;
  • fan_only - обогреватель выключен.

climate.set_temperature

Задаем целевую температуру для нагревателя через параметр temperature.

Примеры автоматизаций

Собственно, каким образом это все можно использовать? Ниже я опишу сценарии, в которых я использую бризер:

  • Если все ушли, а температура на улице ниже 10 - выключаю бризер, чтобы сохранить тепло. Летом включаю проветривание (шестая скорость) на 15 минут, а потом оставляю первую скорость до прихода людей.
  • Минимальная скорость в автоматическом режиме зависит от числа людей дома: один человек - первая скорость, два - вторая, гости дома - четвертая.
  • Если включен телевизор, работают стиральная машина, посудомойка или робот-пылесос , выставляю минимальную скорость на 1-2 больше, чем обычно, т.к. шум бризера перекроется шумом других девайсов.
  • Ночью скорость бризера выставляется на диапазон 1-3 в автоматическом режиме, независимо от количества людей (если, конечно, кто-то есть дома).
  • Если скорость больше четвертой, либо CO2 выше нормы - включаю вытяжку в ванной, чтобы "помочь" бризеру.

Если что-то не завелось - смотрите логи, а чтобы они написались "качественно", добавьте в configuration.yaml фрагмент.


Спасибо за компонент! Думаю многим будет полезен!

Если на рекомендуете Тион, то какой рекомендуете и почему? А то как раз планирую 2 штуки приобретать.

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

Пользуюсь Xiaomi без подогрева и в осеннее время когда еще не дали отопление, остужает квартиру весьма сильно, поэтому как было сказано ранее лучше приобретать конечно вариант с подогревом. В  данный момент когда на улице -5; -10 и включенном отоплении разница между комнатами примерно в градус, при постоянно включенном приборе. Сам прибор работает необычайно тихо, прекрасно ориентируется по датчику СО2 и в зависимости от показателей автоматически выбирает скорость подаваемого воздуха

А интегригуется в HA?

То есть Тион в спальню не рассматривать совсем из-за шума?

Как ни парадоксально, но в спальню - можно. Нам с женой во сне хватает первой скорости, а её не слышно вообще. С тионом проблемы возникают больше днем, когда активности всякие и скорость 2+

Спасибо за ответ про спальню!

Еще подскажите, я правильно понимаю, что Тион надо ставить в каждую комнату в квартире? 

Или есть варианты съэкономить? 

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





Возьмите 2 Xiaomi лучше, вместо одного тиона, не нужно себе наживать лишнюю головную боль) 

Имеете в виду бризер от Xiaomi? A какую модель рекомендуете?

У меня не Xiaomi, поэтому советовать могу только НЕ брать Tion

Про "не брать Тион" давно понятно. Интересна лучшая альтернатива.

Промышленная приточка (нужно делать ремонт и потолки высокие), либо Xiaomi, больше вариантов особо не наблюдается 

Вот и интересует конкретная модель от Xiaomi.

Нашел, похоже, лучший вариант это XIAOMI Mijia MJXFJ-150-A1


В умный дом без шлюза xiaomi можно добавить?

Сам бы хотел знать. Не думаю, что z2m уже его поддерживает.

Если зигби можно сдампить, и отдать ребятам. Напишут враппер

Девайс только-только на али появился, мало кто еще успел купить.

Пока нету обзоров и тестов, чтобы сравнить по-взрослому.

Вроде там толщина меньше, где-то видел 185мм, это жирный плюс, а то из штор выпирать будет.

А так надо ждать тестов режимов и шума, если она при 120-150м2 будет выдавать около 30dB, то надо брать, жаль эти пошли после НГ будут....

Сейчас озадачился данным вопросом. Есть ещё вентмашина сателлит 2, но стоит...

Исходя из собственного опыта, при нахождении двух человек в 2-х комнатной квартире с закрытыми окнами везде, одного Xiaomi хватает, датчик СО2 показывает в районе от 620-800, что в целом не превышает норму в 1000 и поэтому очиститель работает на минимальной скорости и даже когда спать ложусь в ночной режим не перевожу. Если в квартире человека 4, то тут с подачей свежого воздуха один очиститель не справляется и постоянно работает на повышенной (шумной) скорости дабы понизить показатель ниже 1000. Планирую весной переместить обычный очиститель в детскую, а в зал поставить с подогревом, у него как раз и производительность по площади повыше. Так что берите 2 очистителя и будет Вам счастье)

А у Xiaomi датчик тоже выносной? Откуда вы знаете, что, к примеру, ночью в спальне(бризер же у вас в гостиной?), где два человека и при закрытой двери, нормальный уровень CO2? 

Из-за того, что в квартире комнат всего две, в ночное время гостиная превращается в спальню)) Уровень СО2 замеряется встроенным в бризер датчиком СО2. Выносного датчика  во второй комнате (детской) нет, но по внутренним ощущениям качество воздуха сопоставимо с гостиной 

А, ну тогда ничего там не нормально, 100%. Датчик встроенный в бризер совершенно не имеет смысла по той же причине, что и датчик влажности в увлажнителе. Поток воздуха движется строго от приточки к вытяжке, в комнату вашу детскую ему "заходить" незачем, поэтому крайне рекомендую открыть ребенку окно хотя бы на микропроветривание. Уровень CO2 человек не ощущает ровно до того момента, пока задыхаться не начинает, а этот уровень в сотни раз выше "плохого" (когда находиться в помещении вредно), поэтому "внутренним ощущениям" советую не доверять в этом вопросе.

P.S У Тиона датчик выносной, поэтому я знаю о чем говорю - проверено на себе

Воздух все таки движется не совсем по прямой, иначе бы в моей спальне уровень со2 не падал бы

https://blog.ifound.me/smarthome/obzor-brizer-xiaomi-mijia-fan-a1-mjxfj-150-a1/">https://blog.ifound.me/smartho...

Расскажите, не проще ли просто поставить привод на окно и открывать его по автоматизации с какого-нибудь датчика СО2? Я просто не в теме. Живу на севере, морозы на улице зимой бывают до 50-55 градусов, не хочется делать почти прямое отверстие на улицу.

Смысл бризера не просто в подаче свежего воздуха, а его очистка и подогрев,. 

Спасибо за компонент, всё завелось с первого раза, это просто праздник какой-то! 

Не планируете добавить поддержку HACS?

Не вижу смысла, данная статья третья в выдаче Яндекса. Кому будет нужно - найдёт и установит без проблем

У меня работает интеграция с HA без MagicAir (у меня его и нет). Вот тут брал https://github.com/m-pavel/go-tion">https://github.com/m-pavel/go-tion

Но под это дело придётся держать отдельный сервер, насколько я понимаю. С чем вы спаривали Тион и на чем код GO запускали?

да, у меня там рядом стоит raspberry, на которой заодно и датцик CO2

tion спаривается c raspberry - bluetoothctl pair <MAC>

 

А какой именно датчик СО2 Вы используете?

Спарить rassbery с тион без пробоем получилось? Какая у вас версия платы и ОС на ней?

У меня пока не получилось спарить Raspberry 3b с Raspbian и Tion 3s. Тион с платой успешно соединяются, но в конце процедуры вываливается фейл по таймауту.

А можно вкратце описать как запускается? А то уже замучался пробовать разные варианты, все равно не могу запустить

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

А в целом огромное вам спасибо, наконец то я решился купить magic air, а то уже столько лет шла болтовня об открытии api.

Там простой Rest Api, который я подслушал браузером и воспроизвёл. Не думаю, что производитель будет менять протокол, ведь у многих пользователей на телефонах стоит старая версия операционки, которая не позволит установить более новую версию приложения, да и MagicAir домохозяйки вряд-ли бросятся обновлять по первому зову. Если они на это пойдут, я лишний раз убежусь, что компания Tion - ***.

P.S купите лучше Xiaomi

Класс! но все же в тему обновления. Вот такой формат письма приходит: Когда планируем обновления
Четверг, 5 сентября в 9 утра по МСК.
Мы очень надеемся, что обновления никак не помешают вашей работе с системой MagicAir, однако, рекомендуем отключить звуковые оповещения, если в это время вы планируете отдыхать. Если вдруг вы заметите, что система работает в нештатном режиме, пожалуйста, сообщите нам на e-mail: service@tion.ru

т.е. исходя из формулировки, складывается мнение, что они делают обновление push, даже без согласия пользователя ну или хз.

Предлагаю решать проблемы по мере их появления.

Все настроил - все супер, спасибо огромное!

Валерий, а вы не поделитесь вашими автоматизациями. Не могу пока придумать, с чего начать :-|. Еще вам наверно уже сообщали, чт оесли выбирать ручной режим и скорость через карточку климат, то включается рециркуляция (у меня tion 3S )

  1. Вы внимательно статью читали? Там есть примеры автоматизаций. По рециркуляции исправлено в последних версиях библиотеки и компонента.

Извиняюсь, но я не могу понять что есть компонент и что есть библиотека :(. я расположил 5 файлов из https://github.com/airens/tion_home_assistant">https://github.com/airens/tion... в целевую: 

config/custom_components/tion и добавил конфигурацию в 

configuration.yaml.

при этом вызов службы climate.set_fan_mode с параметром 

fan_mode: 2. переключает режим забора из "С улицы" на "Из комнаты". Как в изначальной проблеме.

подскажите, пожалуйста нужно ли мне использовать еще что то из https://github.com/airens/tion">https://github.com/airens/tion

или что еще я делаю не так?

В файле manifest.json компонента должна быть версия библиотеки 0.71 и выше. Вы можете также использовать скорость 2-2, что даст тот же результат но режим будет автоматический, а значит 100% не рециркуляция

версия 

библиотеки 0.71, все так. Как вариант - ,пока, буду использовать передачу значения 6-6 для проветривания (да так я остаюсь в авто режиме).

А можно такое же счастье, но под DOMOTICZ? :(

Чего-то поломалось, не открывается странички с кодом, что в файл конфига ha вставить надо. Скиньте уто-нить сюда, плиз.

Перейдите по ссылке на GitHub вначале статьи, там все есть

точно, супер, спасибо! Ступил. )

Делаю все, как описано в инструкции, в логи плюет следующее


Logger: homeassistant.components.homeassistant
Source: components/homeassistant/__init__.py:112 
Integration: Home Assistant (https://www.home-assistant.io/integrations/homeassistant">documentation, https://github.com/home-assistant/home-assistant/issues?q=is%3Aissue+is%3Aopen+label%3A%22integration%3A+homeassistant%22">issues) 
First occurred: 18:34:37 (1 occurrences) 
Last logged: 18:34:37


Component error: tion - Integration 'tion' not found.


Хотя, как описано полохил папку tion в config/custom_components

Разобрался, но при установке плюется ошибкой

Logger: homeassistant.setup
Source: custom_components/tion/__init__.py:41 
First occurred: 22:28:27 (1 occurrences) 
Last logged: 22:28:27

Error during setup of component tion
Traceback (most recent call last):
File "/srv/homeassistant/lib/python3.7/site-packages/homeassistant/setup.py", line 175, in _async_setup_component
component.setup, hass, processed_config # type: ignore
File "/usr/local/lib/python3.7/concurrent/futures/thread.py", line 57, in run
result = self.fn(*self.args, **self.kwargs)
File "/home/hass/homeassistant/custom_components/tion/__init__.py", line 41, in setup
api = TionApi(config[DOMAIN][CONF_USERNAME], config[DOMAIN][CONF_PASSWORD], min_update_interval_sec=(config[DOMAIN][CONF_SCAN_INTERVAL]).seconds)
File "/srv/homeassistant/lib/python3.7/site-packages/tion/tion.py", line 418, in __init__
self._get_authorization()
File "/srv/homeassistant/lib/python3.7/site-packages/tion/tion.py", line 456, in _get_authorization
with open(TionApi.auth_fname, "w") as file:
PermissionError: [Errno 13] Permission denied: 'tion_auth'

Добрый день. Установил компоненты. При перезапуске HA у меня аналогичная ошибка в логе:

ERROR (MainThread) [homeassistant.setup] Error during setup of component tion
Traceback (most recent call last):
File "/srv/homeassistant/lib/python3.8/site-packages/homeassistant/setup.py", line 174, in _async_setup_component
result = await hass.async_add_executor_job(
File "/usr/lib/python3.8/concurrent/futures/thread.py", line 57, in run
result = self.fn(*self.args, **self.kwargs)
File "/home/homeassistant/.homeassistant/custom_components/tion/__init__.py", line 41, in setup
api = TionApi(config[DOMAIN][CONF_USERNAME], config[DOMAIN][CONF_PASSWORD], min_update_interval_sec=(config[DOMAIN][CONF_SCAN_INTERVAL]).seconds)
File "/srv/homeassistant/lib/python3.8/site-packages/tion/tion.py", line 418, in __init__
self._get_authorization()
File "/srv/homeassistant/lib/python3.8/site-packages/tion/tion.py", line 456, in _get_authorization
with open(TionApi.auth_fname, "w") as file:
PermissionError: [Errno 13] Permission denied: 'tion_auth'

Как я понял - не поддерживается какими-то из зависимостей. Я ставил HA, как плагин из репы freenas - с ним установились последние библиотеки.

Проблема решилась небольшой правкой библиотеки tion - заменой в файле

.../lib/python3.8/site-packages/tion/tion.py



строки 

class TionApi:
auth_fname = "tion_auth" 

на



class TionApi: auth_fname = "/tmp/tion_auth" 

Огонь! Все заработало! Увидет и модуть magicair и модуль co2!

А у вас climate.tion появился? Я вижу только сенсоры.

У меня объекты climate.<имя бризера> появились. Пока больше ничего не пробовал, возникла проблема, что у меня две базовые стации, а библитека рассчитана на то, что базовая станция только одна. Хотя вроде структура объектов позволяет работать с несколькими базовыми станциями без кардинальных изменений. В общем, сел читать учебник по питону :D.

Странно, почему у меня не появился объект климата. Возможно, что-то из-за того, что в инструментах разработчика о системе в интеграциях я не вижу интеграции climate. Я в HA новый - раньше домотикз стоял. Сейчас мигрирую.

UPD:

Не был установлен компонент climate. Поставил, обновил HA, но не знаю, как переинициализировать плагин управления тионом, что бы HA увидел climate помимо сенсоров magicair...

добавил в библиотеку возможность изменять папку хранения файла аутентификации, в конфиге компонента (тоже обновил) можете добавить строку file_path: "/tmp/tion_auth"

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

Файл homeassistant/lib/python3.8/site-packages/tion/tion.py


class TionApi - меняем


self._data: Tion = None
на
self._data: Tion = []


return f"TionApi({self.authorization}, data={'Tion()' if self._data else None})"
на
return f"TionApi({self.authorization}, data=[] ({len(self._data)} items)"



в методе get_data меняем


self._data = None
на
self._data = []


self._data: Tion = Tion(response.json()[0])
на
locations = response.json()
for location in locations:
    self._data.append(Tion(location))



в методе  _get_zones_data меняем


for zone in self._data.zones:
    if any([
        not name_part and not guid,
        guid and zone.guid == guid,
        name_part and name_part.lower() in zone.name.lower()
             ]):
        result.append(zone) 
на
    for location in self._data:
        for zone in location.zones:
            if any([
               not name_part and not guid,
               guid and zone.guid == guid,
               name_part and name_part.lower() in zone.name.lower()
                     ]):
               result.append(zone)



в методе  _get_devices_data меняем


        for zone in self._data.zones:
            for device in zone.devices:
                if any([
                        not name_part and not guid and not type,
                        guid and device.guid == guid,
                        name_part and name_part.lower() in device.name.lower(),
                        type and type.lower() in device.type.lower()
                       ]):
                   devices_data.append(device)
                   zones.append(zone)


на


    for location in self._data:
                for zone in location.zones:
                    for device in zone.devices:
                        if any([
                                not name_part and not guid and not type,
                                guid and device.guid == guid,
                                name_part and name_part.lower() in device.name.lower(),
                                type and type.lower() in device.type.lower()
                               ]):
                            devices_data.append(device)
                            zones.append(zone)


спасибо, добавил в библиотеку, обновил компонент

Спасибо, новый коммит накатил, но чето никак не находит дополнительные датчики Magicair(

Как можно переинициализировать компонент?

Друзья! Если у вас есть вопросы/пожелания/предложения - просьба обращаться ко мне в GitHub через Issues и Pull requests. Далее, вся поддержка от меня будет происходить только там.

Все поставил, теперь все завелось. Скажите, а режим авто - откуда берется целевое значение уровня СО2?

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

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

подскажите, а как менять режим работы (внутри, смешанный, с улицы)?

А куда написать чтобы в Sprut.hub такую интеграцию сделали?

Вернуться назад

Устройства


Tion

Тион MagicAir

(2 отзыва)
Заказать на:

Вернуться назад