Я уже описывал свой дом, который построил в 2019 году. Сейчас сын вырос, живет отдельно, в съемной квартире. Понятно, что у папы руки чешутся… А компания Wiren Board, в которой я работаю, всячески поощряет изобретательство у своих сотрудников, особенно основанное на нашей продукции: оборудование для экспериментов предоставляет бесплатно, дает большие скидки на оборудование для личного пользования. Поэтому и эта съемная квартира стала обзаводиться устройствами Wiren Board.
Первыми появились контроллер Wiren Board 7 с модулем WBE2R-R-ZIGBEE и комбинированные беспроводные датчики WB-MSW-ZIGBEE v.4. Сами понимаете, квартира съемная – новые кабели нормально не проложить, а ненормально не хочется. Ну и сразу стало ясно, что с закрытыми окнами воздух внутри квартиры быстро становился непригодным для дыхания – рос уровень CO₂ и VOC до ненормальных значений. При открытии окна в режим проветривания качество воздуха быстро приходило в норму, но только в холодный период года. В теплый период – по разному, в зависимости от силы и направления ветра, ну и температуры воздуха.
Открытые окна создавали новые проблемы:
-
Дом высотный, зимой тяга естественной вентиляции приличная, поэтому быстро становилось холодно. Да и холодный воздух стелется по полу, ноги мерзнут.
-
Центр города, и шум здесь не стихает никогда, хотя окна выходят во двор. Да еще рядом стройка (высотный дом с монолитным каркасом), а это и бесконечный стук металла по металлу при сборке/разборке опалубки, и шум работающего крана. А гул от бетононасоса и вой вибраторов при заливке этих монолитных конструкций – это вообще отдельная песня. Но надо сказать честно, и без стройки шума более чем достаточно.
-
Пыль. Через сутки после влажной уборки не остается даже намеков, что уборка была.
Было очевидно, что так жить нельзя. Правда, это только мне было очевидно, взрослый сын считал, что и так все Ок. Отцы – люди неугомонные. Особенно если есть возможность настроить по своему разумению жизнь взрослому ребенку. И задумался я о механической вентиляции этой квартиры. Вентиляция вообще близкая мне тема, я даже ролики в свое время записывал на эту тему.
Варианты реализации
Главная сложность заключалась в том, что квартира чужая. Хозяин категорически не хотел никаких вентустановок и дырок в стенах, даже минимальных. И засчитывать потраченные на это деньги в качестве квартплаты тоже не хотел. Мои доводы о том, что вентиляция повысит потребительские качества квартиры, разбивались его доводами о том, что никто, кроме меня, этого не оценит, и квартиру с вентиляцией дороже не сдашь.
Первой идеей было поставить оконные приводы Drivent, о которых мы писали статью.

Но было понятно, что это полумера – проблемы, перечисленные выше, несколько уменьшались, но не решались. Да и стоимость трех приводов была ощутимой. Еще было непонятно, что делать с отверстиями от саморезов на окнах, если при выезде из квартиры эти приводы снимать. Я поискал способы реставрации пластика, но в нашем случае он был с ламинацией, и нормального решения не нашлось.
Сделать так, как я сделал в своем доме – использовать оконные клапаны – тоже было плохим решением.
Клапаны шум бы снизили, но не сильно. И пыли бы меньше не стало. И цены сейчас на хорошие клапаны негуманные. Да и окна бы испортили, пришлось бы оставить клапаны хозяину при переезде.
Прикидывал я и вариант собрать модульную приточную вентустановку на балконе. Как в статье Олега Артамонова. С точки зрения качества воздуха решение отличное. Но громоздкое, снаружи выглядит… ну так себе (фото есть в статье). И требует нескольких отверстий в стене под воздуховоды, чего нам хозяин квартиры никогда не позволит.
О бризерах (корректнее – компактных приточных установках) я вообще не думал. Те цены, которые мне попадались на глаза, совсем не радовали. Но в процессе поиска решения наткнулся, на статью Виктора Борисова. Я уважаю этого автора, много лет его читаю, поэтому отнесся к написанному им со всей серьезностью. Он хвалил бризеры от BALLU, конкретно модель ONEAIR ASP-100. И всем ее рекомендовал. Так эта модель и запала мне в голову. И цена вполне доступная, сегодня ее можно купить в пределах 30 000 руб.
Но оставался вопрос с дырой в стене. Я был даже готов пробурить ее за свой счет, а потом восстановить все, как было. Но вдруг меня осенило – в квартире два выхода на балкон (из разных комнат), и оба они с пластиковыми дверьми. Верхняя часть двери – стеклопакет, но нижняя-то простой сэндвич! Почему не закрепить бризер на этот сэндвич?
Сходил на строительный рынок – продаются такие сэндвичи, и стоят копейки. Купил. Посмотрел ролики, как меняют стеклопакеты в пластиковых рамах – все легко решается острой стамеской, и следов на пластике не остается. Попробовал – получилось: штапики вынул, панель достал. Вот и решение! При смене квартиры вернем старый сэндвич на место, а бризер заберем с собой.
Еще для меня была важна возможность дистанционного управления устройством. С этим оказалось все в порядке – есть мобильное приложение. И я нашел обсуждение интеграции бризера в систему автоматизации дома – судя по нему сложности были, но люди их решили, а значит, и я решу.
Что получим
Заявленная производительность бризера по воздуху: 20-125 м³/ч. Это даже много для квартиры.
Согласно нормативным требованиями, воздухообмен в ней должен быть не менее 30 м³/ч на человека и с кратностью не менее ≈ 0.35 ч⁻¹. Проживающих тут двое, им нужно 60 м³/ч. Объем квартиры порядка 105 м3, минимальный воздухообмен по кратности – 37 м³/ч. Выбираем большее значение – 60 м³/ч.
И это примерно половина того, что может дать бризер, т.е. одного такого на квартиру более, чем достаточно. Да, межкомнатные двери должны быть открыты, иначе нормального распределения свежего воздуха не будет. Но они и так, как правило, открыты. А закрыть на часик-другой, если нужно, не проблема, за это время качество воздуха катастрофически не снизится. А при открытии двери – моментально восстановится.
Теперь про шум. У бризера 8 скоростей вентилятора: есть переключатель на 7 скоростей, и есть режим «Турбо» – это как раз 8 скорость. Со слов Виктора Борисова, на чью статью я ссылался выше, «...тихими являются первые три». С его же слов, производительность бризера на 3-ей скорости «...примерно 60 м³/ч». То есть все складывается как нельзя лучше – дежурная вентиляция на двух человек будет бесшумной, а при наличии гостей можно удвоить количество воздуха. Правда, при этом шум будет 47 дБ, но это сравнимо с шумом мощного игрового компьютера. А от гостей шума будет точно больше.
Осталось обсудить пыль. В бризере установлен HEPA-фильтр класса H13 – это лучшее, что может быть для бытовых устройств (H14 – это уже для чистых комнат, типа операционных). Можно сказать, что воздух на выходе будет идеален.
А что с энергетикой? Бризер оснащается электронагревателем воздуха (опция) мощностью в 1 кВт – этого достаточно, чтобы 60 м³/ч нагреть (грубо) на 50 °С. То есть, даже если на улице мороз в -30 °С, на выходе бризера будет около +20 °С (а гости пусть приходят, когда потеплеет).
Расход воздуха я проверил «в натуре», даже соорудил испытательный стенд, но об этом ниже. Спойлер – цифры отличаются.
Покупка
Бризер я купил на ОЗОН, в ценах мая 2025 его стоимость была 31 789 руб., это вместе с опциональным электронагревателем воздуха. Бонусом прилагался канальный тканевый фильтр Oxy F5.
Отдельной опцией можно приобрести датчик CO₂ – бризер умеет поддерживать требуемое значение уровня CO₂ в воздухе, управляя оборотами вентилятора. Но у меня уже есть три датчика качества воздуха, установленные в помещениях. Да и мне кажется сомнительным установка датчика воздуха в той же зоне, куда подается свежий воздух, пусть даже датчик устанавливается в нижней части бризера, а воздух подается вертикально вверх. Мои познания в физике позволяют заявлять, что неизбежное движение воздуха вниз вдоль холодной конструкции балконной двери будет подмешивать свежий воздух на вход датчика. А вот мои датчики WB-MSW-ZIGBEE установлены именно в той зоне, где дышит человек, и их показаниям я доверяю больше.
Скажу пару слов про бренд BALLU. Не знаю почему, но к технике BALLU я всегда относился как к чему-то дешевому и не качественному. Высокой оценке бризера, сделанной Виктором в статье, я удивился, но решил довериться. И не прогадал – бризер меня порадовал и качеством, и продуманностью. Смотрите сами.
Пластик жесткий, прочный. Не пахнет. Все собрано очень плотно, ничего не хлябает. Я всю жизнь имею дело с хорошей европейской техникой, и данное изделие вполне соответствует тому качеству, к которому я привык.
Для замены фильтров достаточно нажать клавишу сбоку бризера – корпус раскрывается, как книжка, никаких инструментов не нужно.
Есть фильтр грубой очистки (сеточка справа) – для фильтра выглядит сомнительно, но знали бы вы, сколько на ней оседает всякой дряни, если перед бризером никаких других фильтров не использовать. И есть основной HEPA-фильтр (белый слева). Достаются фильтры элементарно – сеточку надо повернуть против часовой стрелки, а основной фильтр плотно и без зазоров садится в посадочное место просто от руки. Также и достается – от руки.
Что забавно, если бризер оcтавить открытым (как на фото), или закрыть не плотно, то через некоторое время он начинает подавать звуковые сигналы, такие-же, какие подает автомобиль при незакрытой двери. Почему забавно – не знаю, но у меня этот звук внутри квартиры вызывает улыбку.
Есть в бризере и воздушная заслонка. Если бризер выключить – воздух через него поступать не будет, даже если дом высотный и вентканалы создают сильную тягу.
Ну и внешний вид – мне очень нравится.
Вот эта серая ткань на поверхности – она неожиданна, но очень облагораживает его вид. Я видел модель без ткани – точно проигрывает. Но это все, конечно, субъективно, оценивайте сами.
Монтаж
Первым делом надо установить электронагреватель внутри бризера. Напомню, он опционален, и его надо не забыть заказать. Приедет он в той же коробке, что и бризер, но установить его надо самостоятельно. Задерживаться на этой операции я не буду, она элементарна, и все необходимое есть в комплекте.
Как использовать бонусный фильтр я сразу не придумал, поэтому просто закрепил бризер на сэндвиче.
Снаружи это выглядит как отверстие с сеточкой (фото не сделал) – вполне ничего. Да и кто там это видит.
Сразу скажу про открывание двери балкона. В моем случае открывать ее не требуется – есть еще одна дверь. Но и с установленным бризером дверь открывается процентов на 70, и мое компактное тело туда легко проходит. Только надо быть аккуратным, чтобы не «бахнуть» бризером по откосу.
В таком виде бризер эксплуатировался примерно 4 месяца. Но через два месяца расход воздуха (по субъективным ощущениям) ощутимо снизился. Заменив пару HEPA-фильтров (примерно по 850 руб./шт.) я задумался про бонусный тканевый фильтр, который все это время лежал в шкафу. Стоит он примерно в два раза дешевле, чем HEPA-фильтр, но меня больше прельстила его существенно бОльшая площадь поверхности – это позволит реже его менять.
Взял я его с собой и пошел в строительный магазин – экспериментировать. Фильтр, как я выяснил, плотно вставлялся внутрь ПВХ-воздуховода диаметром 100 мм. И в фильтре есть кольцевая пружина, которая плотно прижимает головину фильтра к воздуховоду, дополнительно никак уплотнять не нужно.
Длина фильтра 330 мм, соответственно, нужен прямой участок воздуховода. Который со стороны бризера надо соединить с торчащим сетчатым предфильтром.
Это соединение должно быть плотным, без подсоса воздуха. Оказалось, что диаметр предфильтра почти идеально совпадает с внутренним диаметром вентиляционных фасонных частей (отводы, тройники…) – одно на другое садится очень плотно. И получилась у меня такая конструкция.
Прямой воздуховод на 500 мм + отвод на 90 гр. – вот и вся конструкция.
Обратите внимание, как я закрепил бризер – сэндвич не та конструкция, в которую можно вкручивать/выкручивать саморезы. А вот пробки от бутылок оказались идеальны из того, что было под рукой – и площадь поверхности оптимальна, и саморезы хоть завкручивайся. Я еще хотел заполнить пространство внутри пробки каким-нибудь герметиком (саморезы короче глубины пробки), но руки так и не дошли.
По прошествии 3 месяцев работы фильтр стал выглядеть страшненько.
Как-то еще дорабатывать конструкцию я не собирался. Но пришлось, об этом ниже.
Увлажнитель
Если вы наладите вентиляцию в квартире, будьте готовы к тому, что воздух зимой в ней станет совсем сухим. Для тех, кто забыл уроки физики, напомню, что относительная влажность воздуха (которую мы и воспринимаем как сухо/комфортно) сильно зависит от его температуры. Если уличный воздух с температурой -20 °С и относительной влажностью 100% нагреть до +20 °С, то влажность упадет ниже 5%. И неважно, нагреете вы воздух внутри бризера, или он сам нагреется от вашей системы отопления внутри помещения, результат будет одинаков.
Да, в квартире есть влаговыделения: посуду моем, пищу готовим, дышим… Но даже с учетом этого влажность в квартире будет ниже 20%, что очень плохо для кожи, слизистых и вообще для здоровья. А уж как все начинает электризоваться – искры во все стороны!
Кстати, истории, когда врачи советуют астматикам и прочим ЛОР-хроникам поменять климат, связан не с какой-то особенной целебностью приморского климата, а с банальной влажностью. Если у вас есть проблемы в этом плане – повышайте влажность, и вероятность того, что все пройдет, высока.
Итак, увлажнение необходимо. Мы эту проблему решили предельно просто: поставили рядом с бризером увлажнитель.
Теперь воздух, который подает бризер, сразу увлажняется.
Увлажнитель я тоже присмотрел от Ballu, взяли самый производительный – UHB-950 ET. Он способен испарять 400 мл/час воды и работает весь отопительный период круглосуточно с максимальной производительностью. Мало того, в ноябре – феврале и этого мало, влажность в квартире опускается ниже 30%, и мы купили второй такой же, ставим просто рядом в эти месяцы, и влажность уверенно держится выше 40%, что и является нормой.
Можно было поставить второй увлажнитель в спальной, а не в гостиной. Но это хуже – он хоть и тихий, но спать при работающем рядом увлажнителе некомфортно. А когда они оба в гостиной – нет проблем.
Кондиционер
А что летом, в жару? Нам повезло – кондиционер в квартире есть, правда, всего один. И висит в том же углу, что и бризер. Воздух, нагнетаемый бризером, сразу охлаждается и растекается по помещениям. Я специально зафиксировал: при +37 на улице холодильной мощности кондиционера хватало на охлаждение всей квартиры, и разница температур в помещениях была в пределах двух градусов.
А вот увлажнитель в летний период переносим подальше от кондиционера. Увлажнять воздух прямо под ним глупо. Кондиционер и воздух будет осушать изо всех сил, и приличную часть своей мощности потратит на это осушение.
Скажу еще про шум. Шум от бризера и увлажнителя просто теряется на фоне шума от внутреннего блока кондиционера.
Подключение
Тут вообще все просто – втыкай в розетку, и поехали.
Один нюанс – электронагреватель должен быть установлен перед первым включением, потому что при первом включении бризер определяет собственную конфигурацию. Можно, конечно, его и после установить, но тогда надо будет включать процедуру инициализации, манипулируя кнопками на панели.
Настройка
Если бы я собирался управлять бризером локально, с его панели, то здесь статью можно было бы и закончить. Одной кнопкой выбирай скорость вентилятора, второй – температуру воздуха на выходе (5/20/25 °С), третьей включай/выключай ночной режим, и все.
Но мне нужно и дистанционное управление, и интеграция в систему автоматизации квартиры. Поэтому движемся дальше.
Первым делом я установил рекомендуемое мобильное приложение Hommyn. При помощи этого приложения можно управлять разными устройствами, не только бризером. И там есть возможность добавлять устройства, группировать их по домам и комнатам.
Чтобы добавить бризер в приложение надо, чтобы и мобильное устройство с приложением, и бризер находились в одной сети. Для этого бризер «из коробки» идет с включенной точкой доступа Wi-Fi с именем «ONEAIR ASP-100». Подключаем мобильник к этой точке доступа, запускаем Hommyn, добавляем устройство из списка – это просто, и хорошо описано в инструкции. Внутри программы, в настройках бризера подключаем его, уже как клиента, к нашей домашней Wi-Fi сети с выходом в интернет. Отключаемся от точки доступа бризера, подключаем мобилку уже к любой сети. Если бризер и мобильное устройство, на котором работает приложение, находятся в одной сети, то они общаются между собой непосредственно. А если нет – общение идет через сервер rusklimat.ru.
Посмотрим на страничку бризера, сверху вниз.
Датчика CO₂ нет, поэтому прочерк вместо показаний.
Температура притока – это уже после нагревателя.
Ниже идут показания качества воздуха в том городе, где находится телефон, на котором установлено приложение, берутся они с какого-то погодного сервиса.
Еще ниже можно задать требуемые скорость вентилятора и целевую температуру воздуха.
Ниже уставок строка с кнопками предустановленных режимов. Вентиляция – это когда заслонка на бризере открыта, но вентилятор не включен. Если у вас в квартире сильная тяга, то этот режим может быть полезен (мне он бесполезен, но об этом ниже). Ночной режим – это работа на минимальных оборотах (настраивается) и отключение светодиодов. Турбо – работа на максимальной, 8-ой скорости, но только в течение 15 минут, после которых бризер снизит обороты до тех, которые были установлены до момента включения Турбо.
Значок календаря в самой нижней строке – возможность создать расписание: в какие дни недели и в какое время какая должна быть скорость вентилятора, и какая температура воздуха. Такая «автоматизация на минималках».
Мелодии – это тоже забавная фича, бризер может по кругу проигрывать сэмплы со звуками дождя, моря, леса, костра либо пения птиц. Качества звука я оцениваю на 3+, поэтому этой фичей не пользуемся.
Ну и зеленая кнопка включения/отключения.
В приложении есть возможность интеграции бризера с голосовыми помощниками «Алиса» и «Маруся». Я из любопытства подключил бризер к Алисе, но сами команды типа «Поставь 25 градусов на бризере в квартире» у меня вызывают улыбку. Не хочу я ничем командовать, хочу, чтобы само. А сценарии Алисы я не использую на том простом основании, что возможности там примитивны – мои алгоритмы существенно сложнее. Да и домашняя автоматика должна работать локально и не должна зависеть от наличия связи с серверами Яндекса. Поэтому идем дальше – будем «пилить» локальную интеграцию.
Скажу сразу – после подобной интеграции мобильное приложение Hommyn будет работать только в пределах одной сети, возможность работы через Интернет будет потеряна. Но я и не собирался использовать это приложение, у меня есть готовый интерфейс ко всей домашней автоматизации, а бризер будет только одним из ее компонентов.
Интеграция с контроллером Wiren Board
Идею, как интегрировать, я не придумал, взял готовую. Суть идеи в том, что бризер и мобильное приложение (когда они не в одной сети) общаются по протоколу MQTT, через брокер, работающий на mqtt.cloud.rusklimat.ru. И, если перенаправить бризер на наш собственный MQTT-брокер, то мы получим возможность взаимодействовать с бризером непосредственно. А на контроллере Wiren Board как раз работает брокер Mosquitto, и все программные компоненты общаются между собой через него. То есть бризер просто станет еще одним из устройств, и управлять им можно будет стандартными для контроллера способами.
Подменить адрес mqtt.cloud.rusklimat.ru на IP-адрес контроллера могут многие современные бытовые роутеры, это не проблема. На нашем это выглядит так.
Теперь бризер будет пытаться подключиться к MQTT-брокеру контроллера по TLS на порту 8883, используя логин и пароль.
MQTT-брокер на контроллерах WIren Board принимает подключения на стандартном порту 1883, без шифрования и без обязательной аутентификации. Можно дополнительно включить прослушивание порта 8883 для TLS-подключений, это буквально пара строчек в конфиг-файле. Но есть проблема – бризер не работает с mosquitto выше 1.5.11, а на Wiren Board как раз более поздняя версия. Я попытался подружить бризер со штатным брокером контроллера, но у меня не получилось – сразу после пакетов CONNECT и SUBSCRIBE от бризера к брокеру приходит некорректный (с точки зрения брокера) пакет, и брокер разрывает соединение.
Откатывать брокер контроллера на версию 1.5.11 и сложно, и глупо. Лучший вариант – установить еще один экземпляр mosquitto версии 1.5.11 (далее – интеграционный брокер), пусть слушает порт 8883. А на порту 1883 останется «родная» версия брокера (далее – системный брокер), которая будет обновляться. Это потребует совсем немного места на диске, и практически не скажется на нагрузке процессора – обрабатываемых данных то мизер. Если вы имели дело с командной строкой Linux, вам все будет очевидно.
Устанавливаем mosquitto-1.5.11
# Установим пакеты, необходимые для сборки Mosquitto из исходников:
apt install build-essential libssl-dev libc-ares-dev uuid-dev
# Cкачаем и разархивируем Mosquitto:
cd /usr/src
wget https://mosquitto.org/files/source/mosquitto-1.5.11.tar.gz
tar xzf mosquitto-1.5.11.tar.gz
# Соберем Mosquitto
cd mosquitto-1.5.11
make WITH_TLS=yes
make install DESTDIR=/opt/mosquitto-1.5.11
# Теперь бинарник Mosquitto-1.5.11 будет здесь:
/opt/mosquitto-1.5.11/usr/local/sbin/mosquitto
# Можно удалить все, что больше не нужно
apt remove build-essential libssl-dev libc-ares-dev uuid-dev
apt autoremove
rm -rf /usr/src/mosquitto-1.5.11
Теперь надо настроить аутентификацию в брокере, Точнее сделать так, чтобы брокер принимал анонимные соединения на правильном порту. Почему анонимные? Так проще. Внутри квартирной сети все узлы доверенные, защита от злоумышленников настроена на роутере, отделяющем внутреннюю сеть квартиры от внешней.
Настраиваем точку подключения брокера
# Создадим конфиг-файл /opt/mosquitto-1.5.11/etc/mosquitto/mosquitto.conf
nano /opt/mosquitto-1.5.11/etc/mosquitto/mosquitto.conf
# Вставим содержимое:
listener 8883
cafile /etc/mosquitto/certs/server.crt
certfile /etc/mosquitto/certs/server.crt
keyfile /etc/mosquitto/certs/server.key
allow_anonymous true
log_type all
# Последняя строчка нужна на момент отладки, потом можно будет понизить уровень логирования.
# Теперь сохраняемся и выходим.
Ctrl+O → Enter
Ctrl+X
# Чтобы Mosquitto мог принимать TLS-соединения, нужно создать сертификаты
openssl req -x509 -nodes -days 3650
-newkey rsa:2048
-keyout /etc/mosquitto/certs/server.key
-out /etc/mosquitto/certs/server.crt
-subj "/CN=localhost"
# Проверим, что файлы появились
ls -l /etc/mosquitto/certs/
# Должны быть файлы:
server.crt
server.key
Все готово. Проверяем, как работает.
Проверяем коннект с бризером
# Запускаем брокер в консоли
/opt/mosquitto-1.5.11/usr/local/sbin/mosquitto -c /opt/mosquitto-1.5.11/etc/mosquitto/mosquitto.conf -v
# Лог его работы выводится в консоль. Включаем бризер – в логе должно быть
# что-то типа:
1776522622: New connection from <ваш IP> on port 8883.
1776522623: New client connected from <ваш IP> as <ваш id>(c1, k20, u'rusclimate').
# И после этого должен появится топик /rusclimate с подтопиками
# (я смотрю в MQTT-Explorer):
Отлично, общаться с бризером получается. Теперь надо настроить запуск интеграционного брокера при старте операционки.
Настраиваем systemd
# Создаем systemd-сервис
nano /etc/systemd/system/mosquitto-1.5.11.service
# Содержимое:
[Unit]
Description=Mosquitto 1.5.11
After=network.target
[Service]
ExecStart=/opt/mosquitto-1.5.11/usr/local/sbin/mosquitto -c /opt/mosquitto-1.5.11/etc/mosquitto/mosquitto.conf
Restart=always
[Install]
WantedBy=multi-user.target
# Сохраняемся и выходим
Ctrl+O → Enter
Ctrl+X
# Регистрируем и запускаем интеграционный брокер
systemctl daemon-reload
systemctl enable mosquitto-1.5.11
systemctl start mosquitto-1.5.11
Интеграционный брокер настроен и работает. Но есть загвоздка – я собираюсь использовать веб-интерфейс контроллера и движок правил wb-rules. И то, и то умеет общаться только с одним брокером, а у нас теперь два. Значить, мне нужно настроить мост между интеграционным и системным брокерами. Это просто – брокеры такое умеют.
Настраиваем мост между брокерами
# В /opt/mosquitto-1.5.11/etc/mosquitto/mosquitto.conf надо добавить
# следующие строчки:
connection bridge_to_wb
address 127.0.0.1:1883
topic rusclimate/69/<ваш id>/control/mode in 1
topic rusclimate/69/<ваш id>/state/mode out 1
topic rusclimate/69/<ваш id>/state/sensor/temperature out 1
topic rusclimate/69/<ваш id>/state/speed out 1
topic rusclimate/69/<ваш id>/state/temperature out 1
topic rusclimate/69/<ваш id>/control/speed in 1
topic rusclimate/69/<ваш id>/control/temperature in 1
# Рестартуем брокер, чтобы он принял изменения
systemctl restart mosquitto-1.5.11
Теперь содержимое топиков интеграционного брокера с ключом out будут копироваться в одноименные топики системного брокера, а с ключом in – наоборот. И я пробрасываю между брокерами только те топики, которые мне нужны, вам могут понадобиться дополнительные. Еще у вас прошивка бризера может быть другой, и топики могут называться по другому – думаю, это не проблема, и вы сможете по образу и подобию создать собственные настройки.
Вот и все с настройками, теперь нужно все запрогать и вывести в интерфейс.
Программирование
Рассказывать, что такое wb-rules, я не буду, все есть в документации. Еще я писал статью про автоматизацию вентиляции, там подробно все расписывал. Давайте сразу к делу.
Напрямую топики бризера в виджетах я использовать не могу – они не соответствуют конвенции Wiren Board. Корректно переименовать топики настройками моста тоже невозможно, им можно только префикс добавить.
Проще всего в такой ситуации создать виртуальное устройство, контролы которого и вывести в интерфейс. В этом устройстве я предусмотрел контролы, с которыми будет взаимодействовать пользователь:
-
swAuto, для включения/выключения режима автоматического управления бризером;
-
swNightMode, для автоматического или ручного включения/выключения ночного режима;
-
mode, для переключения предустановленных режимов;
-
speed, для задания скорости вентилятора (я туда сразу подставил измеренные мной значения расходов для каждой скорости);
-
set_t_out, это уставка температуры воздуха;
-
t_out, измеренная температура воздуха.
Код создания виртуального устройства
defineVirtualDevice('vd_asp_100', {
title: 'vd_asp_100',
cells: {
mode: {
type: 'value',
title: 'Режим',
value: 1,
forceDefault: false,
readonly: false,
enum: {
0: { en: 'Off', ru: 'Выкл.' },
1: { en: 'Manual', ru: 'Ручной' },
// 2: { en: 'Auto', ru: 'Авто' }, //без датчика CO2 не работает
3: { en: 'Night', ru: 'Ночной' },
4: { en: 'Turbo', ru: 'Турбо' },
5: { en: 'Eco', ru: 'Эко' }
}
},
speed: {
type: 'value',
title: 'Скорость вентилятора',
value: 0,
readonly: false,
enum: {
1: { en: '1 - 22 m3/h', ru: '1 - 22 м³/ч' },
2: { en: '2 - 28 m3/h', ru: '2 - 28 м³/ч' },
3: { en: '3 - 44 m3/h', ru: '3 - 44 м³/ч' },
4: { en: '4 - 52 m3/h', ru: '4 - 52 м³/ч' },
5: { en: '5 - 65 m3/h', ru: '5 - 65 м³/ч' },
6: { en: '6 - 77 m3/h', ru: '6 - 77 м³/ч' },
7: { en: '7 - 88 m3/h', ru: '7 - 88 м³/ч' }
}
},
set_t_out: {
type: 'value',
units: 'deg C',
title: 'Уставка Твых.',
value: 5,
readonly: false,
forceDefault: false,
precision: 1
},
t_out: {
type: 'value',
units: 'deg C',
title: 'Твых.',
value: 0,
readonly: true,
forceDefault: true,
precision: 1
},
}
});
Теперь подумаем, какие события нам надо обработать. Их немного, в стационарном режиме вообще одно – изменение температуры воздуха на выходе бризера, ее надо скопировать в виртуальное устройство. Но поскольку бризером еще можно управлять и с его собственных кнопок, и из мобильного приложения, то надо обрабатывать и все приходящие оттуда данные: переключение режимов, изменение скорости и уставки температуры, изменение значения температуры. Напишем правила, которые будут вызываться при каждом изменении в топиках бризера.
Код правил
//эти флаги нужны, чтобы отличить внутренние команды от внешних
var isExtMode = false;
var isExtSpeed = false;
var isExtSetTout = false;
//при включении предустановленных режимов блокируем соотв. виджеты от изменения
function SetRO(modeNumber) {
switch (modeNumber) {
case 1:
getControl('vd_asp_100/speed').setReadonly(false);
getControl('vd_asp_100/set_t_out').setReadonly(false);
break;
case 3:
getControl('vd_asp_100/speed').setReadonly(true);
getControl('vd_asp_100/set_t_out').setReadonly(false);
break;
default:
getControl('vd_asp_100/speed').setReadonly(true);
getControl('vd_asp_100/set_t_out').setReadonly(true);
break;
}
}
//Обработаем данные, приходящие от бризера
//текущая температура на выходе бризера
trackMqtt('rusclimate/69/03e77925db2a70774263b83472a25fa6/state/sensor/temperature', function (message) {
dev['vd_asp_100']['t_out'] = Number(message.value);
});
//режим работы
trackMqtt('rusclimate/69/03e77925db2a70774263b83472a25fa6/state/mode', function (message) {
var modeNumber = Number(message.value);
if (dev['vd_asp_100']['mode'] != modeNumber) {
dev['vd_asp_100']['mode'] = modeNumber;
isExtMode = true;
SetRO(modeNumber);
}
});
//скорость вентилятора
trackMqtt('rusclimate/69/03e77925db2a70774263b83472a25fa6/state/speed', function (message) {
if (dev['vd_asp_100']['speed'] != Number(message.value)) {
dev['vd_asp_100']['speed'] = Number(message.value);
isExtSpeed = true;
}
});
//уставка температуры
trackMqtt('rusclimate/69/03e77925db2a70774263b83472a25fa6/state/temperature', function (message) {
if (dev['vd_asp_100']['set_t_out'] != Number(message.value)) {
dev['vd_asp_100']['set_t_out'] = Number(message.value);
isExtSetTout = true;
}
});
//Обработаем команды, поступающие от виджета
defineRule('vd_mode_trigger', {
whenChanged: 'vd_asp_100/mode',
then: function (newValue, devName, cellName) {
if (isExtMode) {
isExtMode = false;
return;
}
publish('rusclimate/69/03e77925db2a70774263b83472a25fa6/control/mode', String(newValue), 1);
SetRO(newValue);
}
});
defineRule('vd_speed_trigger', {
whenChanged: 'vd_asp_100/speed',
then: function (newValue, devName, cellName) {
if (isExtSpeed) {
isExtSpeed = false;
return;
}
if (dev['vd_asp_100']['mode'] == 1) {
publish('rusclimate/69/03e77925db2a70774263b83472a25fa6/control/speed', String(newValue), 1);
}
}
});
defineRule('vd_t_trigger', {
whenChanged: 'vd_asp_100/set_t_out',
then: function (newValue, devName, cellName) {
if (isExtSetTout) {
isExtSetTout = false;
return;
}
publish('rusclimate/69/03e77925db2a70774263b83472a25fa6/control/temperature', String(newValue), 1);
}
});
После сохранения файла с правилами wb-rules сразу его обработал, создал виртуальное устройство и теперь его контролы можно вывести в веб-интерфейс контроллера.
Программа минимум выполнена: из интерфейса контроллера управлять бризером можно. Но хочется то автоматически. А вот тут пришлось экспериментировать.
Эксперименты
Я не нашел в документации значений расхода воздуха, которые обеспечивает бризер при скоростях вентилятора 2-7. В паспорте заявлены только максимальный и минимальный. И опять же непонятно, в каких условиях определены эти расходы. Предполагаю, что с одним фильтром, заводской чистоты и без всяких внешних воздуховодов.
Все, что я нашел, это результаты экспериментов Алексея Надежина.
Результаты по расходу, конечно, супер, но я засомневался – значения сильно выше, чем заявляет производитель. Чутье старого инженера подсказывало, что цифры надо проверять.
Раз надо – проверим, дело это несложное. Тем более, что расход мне нужен не голого бризера, а с воздуховодом и предфильтром.
Идея эксперимента возникла сразу: калориметрический метод! Нам известна температура воздуха на выходе бризера. Если измерить температуру наружного воздуха и потребление эл. энергии воздухонагревателем бризера, то вычислить расход воздуха легче легкого. Вот формула:
Здесь:
Q – энергия, потребленная нагревателем воздуха за час, кВт*ч
ro – плотность наружного воздуха, кг/м3
tвх – температура наружного воздуха, °С
tвых – температура воздуха на выходе бризера, °С
Плотность наружного воздуха тоже будем считать:
Результат будет, конечно, с погрешностью, но с достаточной точностью, чтобы сделать выводы.
Следующая задача – как измерить, сколько потребляет эл. нагреватель. Для этого я собрал небольшой стенд из завалявшегося оборудования (не забывайте, что я – сотрудник Wiren Board).
Розетка, блок питания – это понятно. Непосредственно измерять потребление будет релейный модуль WB-MRWM2, он умеет это делать в диапазоне 10 … 4500 Вт.
Надо сказать, что в этом месте у меня возникли самые серьезные сомнения в корректности моих измерений. WB-MRWM2 измеряет мощность (а, соответственно, и потребление) с погрешность в 2% только в диапазоне от 900 Вт и выше. А мой стенд на всех режимах потреблять будет точно ниже, и погрешность будет выше, а насколько – непонятно. Хотел было я заказать измеритель WB-MAP, но мне на глаза попался паяльник, на котором было написано «220 В, 18 Вт». Воткнул его в измеритель и понаблюдал примерно в течение получаса – значения гуляли в диапазоне от 18.8 до 19.6 Вт. Что вполне соответствовало моим ожиданиям – при 230 В в моей розетке мощность паяльника должна была быть 18.8 Вт. Поэтому я успокоился.
Контроллер Wiren Board в квартире уже есть, для связи стенда с ним я использовал мультипротокольный шлюз WB-MGE v.3 – бросать кабель не хотелось, а при помощи шлюза можно связать их по Wi-Fi, что я и сделал. WB-MGE у меня работает в режиме «Прозрачный шлюз», то есть пакеты, полученные по Modbus RTU, отправляет через сеть контроллеру, и наоборот.
Для измерения наружной температуры я использовал датчик 1-Wire вместе с компактным преобразователем 1-Wire/Modbus WB-M1W2 – WB-MGE работать с 1-Wire непосредственно не умеет.
Настойку стенда скрою под спойлер.
Настройки стенда
Пара часов работы, и я готов вести измерения.
Первым делом хотелось определить потребление бризера без нагрева воздуха, только вентилятор + автоматика. Согласно паспорту это 24 Вт (видимо, на скорости 8). Соответственно, на других скоростях еще меньше. Тут опять упираемся в характеристики WB-MRWM2 – согласно документации он измеряет мощность от 10 Вт. Не проблема – параллельно с бризером я подключил уже известный вам паяльник, дождался его прогрева, провел измерения и вычислил мощности на всех скоростях. Мощность получилась от 3.7 Вт до 22.4 Вт. Еще заметил, что с увеличением сопротивления воздушного тракта мощность снижается – для вентиляторов такое характерно. Видимо, мои измеренные 22.4 Вт вместо паспортных 24 Вт объясняются именно этим.
Проведя измерения, я подумал, что занимаюсь ерундой. Потребление вентилятора в основном тратится на преодоление сопротивления двух фильтров, и нагревателя, и греет воздух. То есть мы эту энергию не теряем. В таблице ниже я цифры потребления тоже привел, но только для информации, вдруг вам интересно. В расчетах я их не учитываю.
Далее я посмотрел на график изменения мощности бризера при нагреве воздуха.
Вот такой там реализован алгоритм управления мощностью. Она очень быстро гуляет туда-сюда, и мгновенные значения расхода вычислять никакого смысла не имеет. Нужно смотреть на потребленную энергию за период. Тут возможны два подхода.
1. Период нам задает WB-MRWM2 – он публикует значения потребленной эл. энергии при каждом ее изменении на 1 Вт*ч. Остается засечь время между двумя публикациями и вычислить расход.
2. Зафиксировать период – каждые N минут вычислять и потребление, и расход.
Я использовал оба подхода – значения сопоставимы. По первому мощность гуляет, и значение расхода надо дополнительно усреднять. А вот по второму потребление усредняется автоматически, и результат гуляет меньше. Я пробовал разные длительности периода – 5 минут мне показалось удобнее всего.
Еще снижает точность измерения то, что бризер температуру воздуха на выходе отдает целыми числами. А эта температура гуляет вокруг уставки с неизвестным мне гистерезисом. Я предполагаю, что автоматика бризера поддерживает эту температуру вокруг уставки симметрично, с одинаковым гистерезисом в + и -. И если я проведу множество измерений и усредню результат, то нивелирую эту неточность измерения.
Измерял я, конечно, не вручную. Написал три функции и одно правило, если интересно – они под спойлером.
Код для измерений
В виртуальное устройство я добавил пару контролов, для хранения значений энергии и расхода воздуха:
…
power_w: {
type: 'value',
value: 0
},
air_flow_m3_h: {
type: 'value',
value: 0
}
…
//Расчет расхода воздуха
var prevEnergy = null;
//плотность воздуха
function ro(t) {
return 353 / (273.15 + t);
}
defineRule('calculateAirFlow', {
when: cron('@every 5m'),
then: function () {
var energy = dev['wb-mrwm2_74']['AP energy L1']; //кВт*ч
if ((prevEnergy === null) || (dev['vd_asp_100']['t_out'] != dev['vd_asp_100']['set_t_out'])) {
prevEnergy = energy;
return;
}
var diff = (energy - prevEnergy); //кВт*ч за 5 мин
prevEnergy = energy;
if (isNaN(diff) || diff < 0) {
return;
}
var power_W = diff * 12 * 1000;
dev['vd_asp_100']['power_w'] = Math.round(power_W);
var tIn = dev['wb-m1w2_86']['External Sensor 1'];
var tOut = dev['vd_asp_100']['t_out'];
var dT = tOut - tIn;
if (dT <= 0) {
dev['vd_asp_100']['air_flow_m3_h'] = 0;
return;
}
var cp = 1005; // Дж/(кг*K)
var flow_m3_s = power_W / (ro(tOut) * cp * dT);
var flow_m3_h = Math.round(flow_m3_s * 3600 * 10) / 10;
if (!isFinite(flow_m3_h) || flow_m3_h < 0) return;
dev['vd_asp_100']['air_flow_m3_h'] = flow_m3_h;
}
});
Сами измерения я проводил при температуре «за бортом» около +10 °С. Почему? Потому что мне нужно понимать, какой расход будет гарантированно. А при низких температурах вентилятору помогает тяга, создаваемая вентканалами в квартире, и расход будет завышен.
Давайте смотреть на результаты моих экспериментов. Я их свел в таблицу.
|
Скорость вентилятора |
Автоматика + вентилятор, Вт |
Расход воздуха, м³/ч |
|
|
без |
с предфильтром |
||
|
1 |
3.8 |
22 |
17 |
|
2 |
4.3 |
28 |
23 |
|
3 |
5.9 |
44 |
35 |
|
4 |
6.7 |
52 |
38 |
|
5 |
8.7 |
62 |
48 |
|
6 |
12 |
77 |
58 |
|
7 |
15.7 |
88 |
67 |
|
8 |
22.4 |
|
|
На скорости 8 бризер поддерживает на выходе фиксированную температуру +5 °С, поэтому замеры сделать не получилось.
Цифры мне кажутся похожими на правду. Без предфильтра и воздуховодов, в режиме «турбо», я бы получил цифру, близкую к паспортной. Еще предполагаю, что заявленные 125 м³/ч – это все таки без воздухонагревателя (он же опциональный). Ну и такие измерения я проводил несколько раз, при разных температурах на улице, и цифры совпадали.
А вообще результаты меня расстроили. Предфильтр сильно снижает производительность бризера. И это объяснимо – вентилятор хорошо «толкает» воздух и плохо «тянет», а тут мы ему такое сопротивление на входе создали. Получается, что если хотим сэкономить деньги на более дорогом HEPA-фильтре, придется мириться с бОльшим шумом. В нашем случае, чтобы обеспечить требуемый воздухообмен (~60 м³/ч), подходит 6 скорость, или выше, а это уже серьезный шум.
Полюбовался я на творение своих рук из воздуховода и предфильтра, погоревал… и демонтировал его. Мы готовы чаще менять HEPA-фильтр, лишь бы жить при меньшем шуме. А деньги за фильтры… да смешные это деньги, я на коньяк трачу кратно больше.
И, кстати, как часто придется менять HEPA-фильтр, если без предфильтра? Производитель рекомендует раз в полгода. Измерительный стенд держать постоянно на подоконнике не хочется – мешает. Поэтому я несколько раз измерял расходы воздуха в процессе эксплуатации, и убедился, что примерно через 3 месяца расход воздуха падает на 10-15%. Поэтому мы меняем HEPA-фильтр 4 раза в год.
А кому подходит конструкция с предфильтром? Тому, у кого несколько бризеров в квартире. Или тому, кто живет один в небольшой квартире. У них и шума не будет, и денег на фильтры меньше понадобится.
Попробовал я и режим «ЭКО-Проветривание», уже без предфильтра. В нем открывается воздушная заслонка, но вентилятор и воздухонагреватель не включаются. Т.е. движение воздуха обеспечивается только тягой в вентканалах квартиры. Раз электронагреватель не включается, то и расход воздуха не измерить. Но субъективно движение воздуха ощущается слабо, сильно меньше, чем на скорости 1. А при температуре воздуха ниже +5 гр., когда тяга становится заметной, этот режим вовсе блокируется автоматикой бризера. Зачем он вообще нужен – непонятно.
Итак, управление бризером налажено, расходы воздуха понятны, можно переходить к автоматизации.
Автоматизация
В моей голове роились самые замысловатые алгоритмы, на на деле все просто.
Теория
Я серьезно отношусь к рекомендациям из СП по вентиляции. Почему? Потому что всю жизнь занимался проектированием, и много общался с ведущими специалистами страны. В нулевые годы проводилось много мероприятий с авторскими коллективами, разрабатывающими своды правил (СП, раньше СНиПы). Легко можно было пообщаться лично. И на любой вопрос специалисты давали очень адекватные ответы. Хотя и признавали, что в СП глупостей хватает: когда то в этих глупых фразах был смысл, но со временем оказался утрачен – в программировании это называется legacy. Надо сказать, такого все же не много.
Повторюсь: по нормативам нам нужно обеспечить воздухообмен в 60 м³/ч «по людям» и 37 м³/ч по минимальной кратности. Принимается большее значение.
Еще на круглом столе в НИИ Сантехники, посвященном вопросам вентиляции именно квартир, говорили, что для человека в состоянии покоя 20 м³/ч вполне достаточно. Соответственно, в ночное время воздухообмен «по людям» можно снизить до 40 м³/ч.
А еще у нас есть датчики, измеряющие VOC и CO₂. И есть таблицы с их допустимыми концентрациями.
Пороги допустимой концентрации VOC от производителя сенсора VOC:
|
AQI |
Концентрация (ppb) |
Уровень |
Соотв. нормам |
Рекомендации |
Предельное время воздействия |
|
5 |
2200 – 5500 |
Опасно для здоровья |
Неприемлемо |
Подвергаться воздействию только в критических случаях / Необходимо интенсивное вентилирование |
часы |
|
4 |
660-2200 |
Неудовл. |
Серьезные претензии |
Необходимо интенсивное вентилирование или проветривание, требуется поиск источников загрязнения |
< 1 месяца |
|
3 |
220 – 660 |
Приемлемо |
Некоторые претензии |
Рекомендуется интенсивное вентилирование или проветривание, требуется поиск источников загрязнения |
< 12 месяцев |
|
2 |
65 – 220 |
Хорошо |
Без особых претензий |
Рекомендуется вентилирование или проветривание |
нет предела |
|
1 |
0-65 |
Отлично |
Без претензий |
Требуемое значение |
нет предела |
Таблица 4 из ГОСТ 30494-2011 – Классификация воздуха в помещениях:
|
Класс |
Качество воздуха в помещении |
Допустимое* содержание CO₂, |
|
|
Оптимальное |
Допустимое |
||
|
1 |
Высокое |
- |
400 и менее |
|
2 |
Среднее |
- |
400-600 |
|
3 |
- |
Допустимое |
600-1000 |
|
4 |
- |
Низкое |
1000 и более |
|
* Принимают сверх содержания CO₂ в наружном воздухе |
|||
Если мы контролируем CO₂ , то в дневное время можем определять требуемую скорость вентилятора по концентрации CO₂. Но не ниже 37 м³/ч.
Обратите внимание на примечание к Таблице 4. В наружном воздухе большого города содержание CO₂ – 400 ppm. Соответственно, показания датчика до 800 ppm – это высокое качество воздуха, до 1000 – среднее. Высокое значение и будем поддерживать в дневное время. А ночью? А ночью подъем CO2 свидетельствует о том, вентиляция не работает. Или что CO2 в квартиру «тащит» система вентиляции. Например, при пожаре. В обоих случаях надо не обороты вентилятора увеличивать, а человека будить – пусть разбирается, что случилось.
Сразу отвечу на популярный вопрос, почему не управлять только по датчикам CO₂ и VOC, и если показания в норме – вообще выключать вентиляцию. Я против такого подхода.
1. Вредности в воздухе только CO₂ и VOC не ограничиваются, там еще сложный комплекс всего. Поэтому нормативы содержат требование по минимальной кратности.
2. К VOC у меня вообще отношение осторожное – он очень сильно реагирует на продукты питания, например. Начинаешь резать зелень – сразу скачок до «Приемлемо». Бытовая химия или парфюмерия – «Неудовлетворительно». А уж как он реагирует на алкоголь – «Опасно для здоровья» после первой рюмки.
Я даже пытался по графику VOC вычислить, чем люди развлекались – виски от вина по форме кривой отличить точно можно. Так что управление вентиляцией по VOC – не мой вариант.
Что касается температуры приточного воздуха, то просится днем настроить комфортную температуру, а ночью ее снижать. Мы поигрались температурами, и убедились, что можно круглосуточно поддерживать +5 °С. Непосредственно рядом с бризером никто не находится, а уже в полуметре от него никакого холода не ощущаешь – холодный воздух направлен вертикально вверх, он прекрасно перемешивается с теплым воздухом комнаты, да еще и радиатор отопления рядом. Поэтому в автоматическом режиме уставка температуры всегда – +5°С.
Реализация
В итоге я реализовал такой вариант управления бризером.
-
Фиксируем минимальную скорость вентилятора – 3. И ниже не опускаемся. Ночью работаем на этой скорости, независимо от концентрации CO₂.
-
Днем начинаем анализировать концентрацию CO₂. Поскольку у нас остались скорости 4, 5, 6 и 7, заморачиваться с вычислением интегралов не будем. При концентрации 800…1000 включаем скорость 4, 1000 … 1200 – 5, 1200 … 1400 – 6, выше 1400 – 7.
-
При концентрации CO₂ выше 1400 отправляем СМС-сообщение об опасности. Вернется ниже 1000 – отправим сообщение, что все Ок.
-
Температурой приточного воздуха не управляем.
Что касается управления кондиционером, то мы используем встроенные в WB-MSW ИК-передатчик и датчик движения. С пульта кондиционера мы записали в контроллер команды управления, и воспроизводим нужные. Расписывать алгоритмы управления кондиционером я не буду – и так уже лонгрид получился.
В реализации ничего сложного, 4 функции и 8 правил. Для отправки СМС используем модуль уведомлений контроллера. Раньше отправляли уведомления в Телеграм, но молитвами РКН пришлось вернуться к СМС (в контроллере должен быть модем).
Код автоматического управления бризером
Предварительно добавим пару переключателей в vd_asp_100:
…
swAuto: {
type: 'switch',
value: true,
readonly: false,
forcedefault: false
},
swNightMode: {
type: 'switch',
value: false,
readonly: false,
forcedefault: true
},
…
//Автоматическое управление бризером
var SPEED_MIN = 3;
//Переключение ден/ночь
var NIGHT_MODE_START_H = 22; //часы начала ночного режима
var NIGHT_MODE_START_M = 0; //минуты начала ночного режима
var NIGHT_MODE_STOP_H = 6; //часы окончания ночного режима
var NIGHT_MODE_STOP_M = 0; //минуты окончания ночного режима
function isNightTime() {
var now = new Date();
var currentMinutes = now.getHours() * 60 + now.getMinutes();
var startMinutes = NIGHT_MODE_START_H * 60 + NIGHT_MODE_START_M;
var stopMinutes = NIGHT_MODE_STOP_H * 60 + NIGHT_MODE_STOP_M;
var isNight;
if (startMinutes > stopMinutes) {
// интервал через полночь
isNight = (currentMinutes >= startMinutes) || (currentMinutes < stopMinutes);
} else {
// обычный интервал
isNight = (currentMinutes >= startMinutes) && (currentMinutes < stopMinutes);
}
if (isNight) {
dev['vd_asp_100']['swNightMode'] = true;
} else {
dev['vd_asp_100']['swNightMode'] = false;
}
}
isNightTime();
defineRule('nightModeOn', {
when: cron('0 ' + NIGHT_MODE_START_M + ' ' + NIGHT_MODE_START_H + ' * * *'),
then: function () {
dev['vd_asp_100']['swNightMode'] = true;
}
});
defineRule('nightModeOff', {
when: cron('0 ' + NIGHT_MODE_STOP_M + ' ' + NIGHT_MODE_STOP_H + ' * * *'),
then: function () {
dev['vd_asp_100']['swNightMode'] = false;
}
});
//автоматическое управление по уровню CO2
var isAirGood = true;
function ConcentrationToAction(concentration) {
var targetSpeed = SPEED_MIN;
if (concentration > 1400) {
if (isAirGood) {
Notify.sendSMS('+7xxxxxxxxxx', 'Концентрация CO2 высокая: ' + concentration);
isAirGood = false;
}
} else {
if (concentration <= 1000) {
if (!isAirGood) {
Notify.sendSMS('+7xxxxxxxxxx', 'Концентрация CO2 в норме.');
isAirGood = true;
}
}
}
if (concentration > 1400) {
targetSpeed = 7;
} else if (concentration > 1200) {
targetSpeed = 6;
} else if (concentration > 1000) {
targetSpeed = 5;
} else if (concentration > 800) {
targetSpeed = 4;
}
if (dev['vd_asp_100']['speed'] != targetSpeed) {
dev['vd_asp_100']['speed'] = targetSpeed;
}
}
var airQualityRule = defineRule('co_trigger', {
whenChanged: 'wb-msw-lora-v4_89/CO2',
then: function (newValue, devName, cellName) {
ConcentrationToAction(newValue);
}
});
//при переходе день/ночь
var nightModeRule = defineRule('nightMode_trigger', {
whenChanged: 'vd_asp_100/swNightMode',
then: function (newValue, devName, cellName) {
if (newValue) {
disableRule(airQualityRule);
dev['vd_asp_100']['speed'] = SPEED_MIN;
} else {
enableRule(airQualityRule);
ConcentrationToAction(dev['wb-msw-lora-v4_89']['CO2']);
}
}
});
function SetAuto(isAuto) {
if (isAuto) {
getControl('vd_asp_100/mode').setReadonly(true);
getControl('vd_asp_100/speed').setReadonly(true);
getControl('vd_asp_100/set_t_out').setReadonly(true);
enableRule(nightModeRule);
enableRule(airQualityRule);
ConcentrationToAction(dev['wb-msw-lora-v4_89']['CO2']);
} else {
getControl('vd_asp_100/mode').setReadonly(false);
getControl('vd_asp_100/speed').setReadonly(false);
getControl('vd_asp_100/set_t_out').setReadonly(false);
disableRule(nightModeRule);
disableRule(airQualityRule);
}
}
//при переключении свитча "Авто"
defineRule('swAuto_trigger', {
whenChanged: 'vd_asp_100/swAuto',
then: function (newValue, devName, cellName) {
SetAuto(newValue);
}
});
SetAuto(dev['vd_asp_100']['swAuto']);
Так это все у нас и работает. А сам виджет выглядит так.
Заключение
В качестве заключения приведу свои выводы по опыту эксплуатации описанной системы в течение года.
-
Система получилась недорогой (~35 000 руб.), очень компактной, легко демонтируемой и переносимой. И очень простой в обслуживании.
-
Теперь качество воздуха по CO₂ и VOC всегда высокое. Свежий воздух распределяется по помещениям равномерно – датчики в комнатах показывают близкие значения.
-
Влажность (при использовании двух бытовых увлажнителей) круглый год держится в диапазоне 40% … 50%, что отлично.
-
Если раньше пыль приходилось вытирать раз в сутки, то теперь заметная пыль появляется спустя неделю.
-
Шум от бризера спать не мешает – мы его просто не слышим. А постоянно закрытые окна хорошо защищают от уличного шума.
Можно ли сделать лучше? Думаю, что можно. Дешевле? Не думаю. Точно можно сделать управление бризером более умным, но тут вам и карты в руки.
Автор: dust70
