Приветствую всех читателей Habr, сегодня хочу рассказать вам о моем новом интересном проекте для умного дома — многофункциональном датчике качества воздуха EFEKTA Smart Air Quality Box, работающем на протоколе Zigbee 3.0. Современные технологии умного дома активно развиваются, и одним из ключевых аспектов комфортной жизни становится контроль микроклимата. Качество воздуха в помещении напрямую влияет на здоровье, работоспособность и общее самочувствие. Если вам интересна тема контроля качества воздуха и вы хотите узнать чем закончилась эта разработка — добро пожаловать под кат.



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

  • Комплексный подход к мониторингу (CO₂, TVOC, PM2.5, температура/влажность, атмосферное давление)
  • Использование качественных сенсоров
  • Широкие функциональные возможности и гибкость настройки
  • Полноценная поддержка Zigbee 3.0 для интеграции в экосистемы умного дома


Свой выбор остановил на сенсорах компании Sensirion и Bosch.

Для измерения CO2 был выбран сенсор SCD40.

  • Компактный размер (11×11×6.5 мм) против крупногабаритных конкурентов
  • Низкое энергопотребление
  • Встроенная температурная компенсация
  • Точность: ±50 ppm + 5% на 1000ppm (MH-Z19 — ±75 ppm + 5%, CCS811 — ±150 ppm, SensAir S8 — ±70 ppm ±3%)
  • Автокалибровка с возможностью ручной калибровки
  • Минимальный дрейф показаний со временем
  • Цифровой интерфейс (I²C)



Для измерения ЛОС (летучие органические соединения) был выбран сенсор SGP40.

  • Компактный размер — самый маленький среди аналогов
  • Цифровая обработка сигнала непосредственно на чипе
  • Встроенный алгоритм компенсации влажности и температуры
  • Цифровой интерфейс (I²C)



Для измерения PM (твердых частиц) был выбран сенсор SPS30.

  • Лазерная дифракция + запатентованный алгоритм подавления ошибок от крупных частиц
  • Более точное разделение фракций PM1.0/PM2.5/PM4.0/PM10 (расширенный мультифракционный мониторинг)
  • Измерение преобладающего размера частиц
  • Минимальное влияние влажности на измерения
  • Стабильность показаний в широком диапазоне условий
  • Настраиваемый режим автоматической очистки
  • Самый тихий встроенный вентилятор среди аналогов
  • Цифровой интерфейс (I²C)



Для измерения атмосферного давления, температуры и влажности был выбран сенсор BME280.

  • Все три параметра (T/H/P) в одном корпусе
  • Высокая точность при компактных размерах
  • Высокая стабильность показаний во времени
  • Цифровой интерфейс (I²C)



В рамках проекта была реализована комплексная система визуализации и оповещения о качестве воздуха, включающая:

Многоцветную светодиодную интеллектуальную индикацию (на базе WS2812) для отображения уровней CO₂, TVOC и PM2.5 в реальном времени:

  • Голубой — отлично
  • Зеленый — норма
  • Желтый — приемлемо
  • Розовый — плохо
  • Красный — опасно


Звуковое оповещение при выходе параметров за допустимые пределы (на базе компактного зуммера):

  • C возможностью отключения сигнала при необходимости



Питание через USB Type-C с поддержкой:

  • От любых зарядных устройств (5V/250mA, PD, QC)


Профессиональный фабричный корпус (вместо 3D-печати):

  • Эстетичный и долговечный дизайн
  • Удобное крепление на стену или установка на стол




Функциональность



Датчик предназначен для работы в сетях Zigbee. работает на протоколе Zigbee3.0. Датчик является роутером сети. Поддерживает биндинг на исполнительные устройства в сети, конфигурирование отчетов.

В датчике реализован функционал автономного газостата. Датчик можно привязать к любым исполнительным устройствам в сети по кластеру OnOff, после привязки датчик будет управлять устройством напрямую по заданным порогам PM2.5, CO₂ и VOC, которые будут записаны в энергонезависимую память. Управление будет работать даже при временно неработающей сети Zigbee или отсутствии связи с умным домом. Работа триггеров реализована на интеллектуальном алгоритме, управление может осуществляться как по одному параметру (например, только CO₂), так и с использованием комбинированной логики (CO2 + PM2.5 + VOC).

Для более точных расчетов СO2 и VOC в датчике применены:



Коррекция по атмосферному давлению (для CO2)
  • Данные с сенсора атмосферного давления BME280 в реальном времени передаются в сенсор CO2, для максимально точного расчета углекислого газа.


Динамическая компенсация по рассчитанной абсолютной влажности воздуха (для VOC)
  • На основе данных с сенсоров температуры и относительной влажности воздуха BME280 рассчитывается абсолютная влажность воздуха и в реальном времени передается в сенсор VOC, благодаря этому сенсор VOC более точно рассчитывает индекс загрязнения воздуха летучими органическими соединениями (VOC)


Цветовая индикация

  • Светодиодный индикатор отображает визуально уровень PM2.5, СO2 и VOC, работает сразу со всеми тремя типами данных. Уровень яркости светодиода настраивается через zigbee сеть в диапазоне 0-100%, настройка по умолчанию 1% яркости. Светодиод можно отключить командой через zigbee сеть.




Основные данные передающиеся в сеть Zigbee:



CO2
Уровень углекислого газа

PM2.5
Уровень твердых частиц размером 2.5 мкм и менее

PM1
Уровень твердых частиц размером 1 мкм и менее

PM4
Уровень твердых частиц размером 4 мкм и менее

PM10
Уровень твердых частиц размером 10 мкм и менее

PM Size
Преобладающий размер частиц в измеряемом воздухе

Air Quality Index (AQI)
Индекс качества воздуха на основе PM2.5 (EPA)

VOC index
Индекс летучих органических соединений

Pressure
Измеренное значение атмосферного давления

Temperature
Измеренное значение с сенсора температуры

Humidity
Измеренное значение сенсора влажности воздуха

zigbee2mqtt


sprut.hub


SLS


Конфигурационные команды для настройки работы устройства:



Reading delay
Установка интервала считывания сенсоров. Установка времени в секундах, по умолчанию 10 секунд. Минимальный интервал 10 секунд, максимальный интервал 600 секунд.

Alarm
Активация звукового оповещения о критическом превышении уровней PM2.5, CO2, VOC

Light indicator
Включение или отключение RGB светодиода

Light indicator level
Регулировка яркости RGB светодиода, 0-100%, по умолчанию 1%

Temperature offset
Отрегулировать температуру внутреннего сенсора температуры, шаг 0.1 градус

Humidity offset
Отрегулировать влажность воздуха внутреннего сенсора влажности, шаг 1 процент

Auto clean interval
Когда датчик находится в режиме измерения, периодически запускается процедура автоматической очистки вентилятора с определенным интервалом очистки. Это позволяет разогнать вентилятор до максимальной скорости на 10 секунд, чтобы удалить пыль, скопившуюся внутри вентилятора. Измеренные значения не обновляются во время работы вентилятора. Интервал очистки по умолчанию установлен равным 7 дням. Интервал можно настроить с помощью внешней команды отправленной через zigbee сеть. Установив интервал равным 0, автоматическая очистка будет отключена. После установки интервал навсегда сохраняется в энергонезависимой памяти сенсора sps30.

Manual clean
Разовое включение очистки вентилятора сенсора PM. Вентилятор разгонится до максимальной скорости на 10 секунд, чтобы удалить пыль, скопившуюся внутри сенсора.

Forced_recalibration
Форсированная ручная калибровка №1. Это функционал сенсора SCD40 заложенный производителем сенсора, который реализован. Калибровка осуществляется на свежем воздухе, необходимо оставить датчик на чистом воздухе на 15 минут, по истечении этого времени отправить команду. Время калибровки примерно 5 секунд, после завершения калибровки точке соответствующей чистому воздуху будет задано значение в 450ppm. Датчик отправит команду «выключено» по завершению калибровки *1

Manual_forced_recalibration
Форсированная ручная калибровка №2. Это функционал сенсора SCD40 заложенный производителем сенсора, который реализован. Калибровка осуществляется по показаниям другого датчика СO2, показаниям которого вы доверяете. Необходимо оставить оба датчика рядом на 15 минут, наличие свежего воздуха не обязательное условие. По истечении этого времени, необходимо данные с датчика которому вы доверяете отправить на калибруемый датчик. Датчик вычтет разницу и будет в дальнейшем учитывать ее. *2

Automatic scal
Автоматическая само калибровка, цикл одна неделя, по умолчанию активирована.

Factory_reset_co2
Сброс сенсора углекислого газа к заводским настройкам. Это функционал сенсора SCD40 заложенный производителем сенсора, который реализован.

Enable_co2
Включение функционала газостата. Управление реле к которому привязан датчик по уровням CO2. Для работы данного функционала необходимо сделать привязку к исполнительному устройству(реле, розетки)*3

High_co2
Верхний порог углекислого газа

Low_co2
Нижний порог углекислого газа

Enable_PM
Включение функционала газостата. Управление реле к которому привязан датчик по уровням PM2.5. Для работы данного функционала необходимо сделать привязку к исполнительному устройству(реле, розетки)*4

High_PM
Верхний порог PM2.5

Low_PM
Нижний порог PM2.5

Enable_voc
Включение функционала газостата. Управление реле к которому привязан датчик по уровням VOC. Для работы данного функционала необходимо сделать привязку к исполнительному устройству(реле, розетки)*5

High_voc
Верхний порог летучих органических соединений

Low_voc
Нижний порог летучих органических соединений

*1,*2 Ручная форсированная калибровка не является обязательной и не рекомендуется для нового датчика. В сенсоре в фоновом режиме включена автоматическая калибровка, с интервалом подстройка 1 раз в неделю. Но попробовать не возбраняется, вывести из строя сенсор невозможно, и в любой момент можно сделать сброс к заводским настройкам.

*3,*4,*5 Одномоментно может работать как один тип, так и все сразу (PM2.5, CO2, VOC).


zigbee2mqtt


sprut.hub


SLS


**Интересный факт, ...
когда-то меня часто критиковали за прямой биндинг, за наличие конфигурационных свойств в моих устройствах, таких как «High_voc», «Enable_co2», «Temperature offset», «Reading interval» и так далее. И критиковали часто не около-zigbee-шный народ, а другие разработчики zigbee устройств. А сейчас я вижу как один за другим эти же самые разработчики копируют этот функционал в свои проекты :).


Ввод датчика в сеть, выход из сети


(на примере zigbee2mqtt, далее z2m)

Для джойна (вход в сеть), достаточно включить на контроллере джойн (join), подать питание, подключив датчик к кабелю usb type c. Если датчик уже работает в режиме без сети, то для того что бы добавить его в zigbee сеть нужно зажать кнопку джойстик сбоку на 5-7 секунд, при начале входа в сеть системный индикатор потухнет (находится под разъемом питания).

Если после входа в сеть на вкладке свойства нет всех значений конфигурационных атрибутов (пустые поля, переключатели в неопределенном состоянии) или на вкладке отчеты нет заполненных строк о типах данных со2, voc, температуре и т.д., то скорее всего конфигурация, которая следует сразу за интервью, не была пройдена до конца.

Для повторного прохождения конфигурации, нужно перейти на главную страницу z2m, найти строку датчика и справа нажать на кнопку — реконфигурация (желтая кнопка) и после этого несколько раз нажать кнопку на датчике. Это вызовет отправку всех основных и конфигурационных данных. При успешном прохождении конфигурации, в вэб интерфейсе z2m должно появится «всплывающее» сообщение об успешно пройдённой реконфигурации. В разделе датчика, на вкладке свойства должны появится значения и установки всех конфигурационных свойств, на странице отчеты должны появится строки с конфигурационными настройками отчетов.



Когда датчик в сети, то короткое нажатие на кнопку вызывает процедуру чтения всех сенсоров не по расписанию и отправку данных не в режиме настроенных отчетов.

Для выхода из сети (leave) нужно зажать кнопку на 10 секунд, системный индикатор начнет мигать (находится под разъемом питания), когда индикатор перестанет мигать (примерно 10 секунд), кнопку можно отпустить. Датчик отправит сообщение о выходе из сети, сотрет у себя все настройки в памяти. Так же выйти из сети можно удалив датчик из з2м без опции форс ремув.

Конфигурация отчетов


(на примере zigbee2mqtt, далее z2m)

Для конфигурации отчетов необходимо перейти на вкладку «Отчеты», и внести изменение в поля «Мин. интервал отчетов», «Макс. интервал отчетов», «Мин. интервал отчетов при изменении».

Мин. интервал отчетов — время, через которое будет отправлен новый отчет, при условии что новые значение изменилось в любую сторону, на величину указанную в поле «Мин. интервал отчетов при изменении», в сравнении с предыдущими значениями. Указывается время в секундах.

Макс. интервал отчетов — время, через которое будет отправлен новый отчет, при условии что значения не менялись на величину большую той которая указана в поле «Мин. интервал отчетов при изменении». Указывается время в секундах.

Мин. интервал отчетов при изменении — величина изменения данных. Для каждого типа данных указывается в своем формате, например для температуры 1 означает 0.01°C, так как данные передаются типом интегер16, например температура 22.54°C, будет передана датчиком так 2254.

zigbee2mqtt


sprut.hub


Привязка датчика EFEKTA Smart Air Quality Box к исполнительному устройству


(реле, розетки)
(на примере zigbee2mqtt, далее z2m)

Осуществляется на стороне датчика EFEKTA Smart Air Quality Box. Для привязки (биндинг) датчика EFEKTA Smart Air Quality Box к исполнительному устройству, для прямой передачи данных необходимо в веб интерфейсе контроллера перейти на страницу датчика EFEKTA Smart Air Quality Box и далее на вкладку «Связь».

В первом поле слева выбрать «1», в следующем поле, в выпадающем списке выбрать исполнительное устройство к которому необходимо сделать привязку, в следующем поле ввести номер кластера на реле. Правее выбрать кластер OnOff. Еще правее нужно нажать на кнопку «Связать».

zigbee2mqtt


sprut.hub


SLS


После привязки необходимо настроить пороги срабатывания и активировать отправку команд на привязанное устройство.

Это можно сделать в свойствах датчика.

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

На данный момент проект нативно поддерживается в zigbee2mqtt, в sprut.hub, в SLS

Не поддерживается напрямую через Yandex Zigbee Hub (возможна передача данных только через интеграции в УДЯ), в Smart Life (Tuya), в HOMEd.

В УДЯ через интеграцию в sprut.hub


Как мне кажется проект получился. А что Вы думаете по поводу данного проекта? Поделитесь своим мнением в комментариях!

Видео обзор датчика на канале «У Павла»


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

Призы достаточно стоящие, а шансы поймать удачу за хвост совсем не маленькие.

Так же приглашаю читателей обсудить это и любые другие устройства, прошивки и прочий софт, работающий с Zigbee, в самое большое русскоязычное сообщество в Телеграм (более 11000 участников) — Вокруг да около Zigbee.

Моя группа в телеграм DIY DEV. Тут можно пообщаться на тему разработки DIY устройств, рассказать о своих проектах, или поделится интересными открытыми проектами, узнать больше информации о других датчиках Efekta.



Спасибо за внимание, всем добра!

Комментарии (8)


  1. Etern0x
    17.05.2025 20:33

    Если это "DIY или Сделай сам", то где ссылки на схемы и прошивку? Если это "Я сдэлаль"©, то где тэг "я пиарюсь" ?


    1. Berkseo Автор
      17.05.2025 20:33

      Очень странное замечание, DIY не обязан быть с схемами и прошивками, а я пиарюсь это когда с ссылками на продажу. Я тут просто рассказываю о своем очередном проекте, ...видите сверху статьи тег - обзор?


      1. Ilya10991
        17.05.2025 20:33

        Так его можно где-то купить? Хочу себе такой же, но как я понимаю это не опенсорсный проект


        1. Barnaby
          17.05.2025 20:33

          Вообще не сложно все спаять навесом на esp и прошить в esphome, все равно он не автономный, и засунуть в какой-нибудь корпус. Народ на базе Vindriktning много всего собирал, когда их за 400 рублей продавали.


      1. ColdPhoenix
        17.05.2025 20:33

        При этом в телеграмме один из последних постов про продажу устройств.

        Плюс как бы реклама бренда.


  1. forgot10
    17.05.2025 20:33

    Здесь именно как в том меме:
    - вы рыбов продаёте?
    - нет, показываю
    - а повторить или пощупать можно?
    - тоже нет, подписывайтесь на мои каналы, смотрите мои соцсети, на меня смотрите, на мою лабу, мою фирму/сообщество и всё
    Ну это же буквально пиар и реклама. Ничего плохого, так и нужно раскручиваться, просто наверное стоит перестать позиционироваться как DIY. Это самая настоящая разработка и реклама, даже если некоммерческая.


  1. PwrUsr
    17.05.2025 20:33

    ну и где и почём эта прелесть?


  1. PetyaUmniy
    17.05.2025 20:33

    А в качестве MCU + zigbee приемопередатчика если не секрет что?