Делаем датчик CO2 и добавляем его в HomeKit

1500 рублей, 30 минут своего времени и всё готово.

В наше время стало уже более-менее нормой следить за влажностью в квартире зимой, но уровень CO2 всё-таки зачастую остается за гранями нашего внимания. Хотя уровень CO2 также не мало важен и оказывает достаточно сильное влияние на жизнедеятельность человека.

И как раз одна из таких причин, что даже самые доступные датчики CO2 стоят не менее 5 000 рублей и не все из них можно сделать умными (а если и можно, то они будут зависеть от положения вашего компьютера/микрокомпьютера).

При этом на том же aliexpress достаточно предложений по датчикам за 1200-1500 рублей для DIY, но что с ними делать немногие знают.

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

Выбор датчика и покупка

И так, нам понадобится:

Девайсы

  • Датчик CO2
  • Микрокомпьютер на базе ESP8266
  • Коннекторы мама-мама
  • Стандартный micro-USB кабель для подключения платы к компьютеру или сети

Софт

  • macOS (для настройки) или Windows
  • поднятый ранее MQTT (описано здесь)
  • Home Assistant или HomeBridge (в общем-то подойдёт и любой другой центра автоматизации)

Датчик CO2

В качестве датчика CO2 мной был выбран MH-Z19B с уже припаянными коннекторами-папа — Aliexpress. В сети можно найти сравнение датчиков MH-Z19, MH-Z19B и Senseair. В этих сравнениях MH-Z19B и Senseair показывали приблизительно одинаковые результаты, но т.к. всевозможных инструкций и гайдов по MH-Z19(B) больше, то был выбран он.

Микрокомпьютер на базе ESP8266

В качестве ESP был выбран nodeMCU CP2102 — Aliexpress. У него есть свои минусы (перед тем же Wemos), но есть один большой плюс. Его можно просто подключить к компьютеру и достаточно просто прошить — в интернете полно гайдов, но ниже будет разобран (как по мне самый простой гайд для macOs — как обычно для них гайдов намного меньше)

Коннекторы мама-мама

Мной были куплены в ближайшем радио-магазине. Поэтому здесь просто первая рандомная ссылка по запросу «jumper diy» — Aliexpress.

Прошивка ESP

Первым делом нам понадобится наша плата, которую мы будем прошивать. Сразу предупрежу, что в зависимости от используемой ОС есть несколько вариантов прошивки — ниже будет рассмотрена (по-моему) наиболее простой способ для macOS (без установки Arduino IDE и тд). Инструкцию для Windows можно найти здесь.

  1. Подключаем нашу плату ESP к компьютеру с помощью microUSB кабеля
  2. Открываем терминал и вводим для того, чтобы определить имя порта, к которому мы подключили нашу ESP
    ls /dev/tty.*
  3. На выходе мы должны найти что-то типа /dev/tty.SLAB_USBtoUART или /dev/tty.usbserial-A1048DR2. Если подобная запись есть, то копируем её себе — она пригодится позже, и пропускаем следующий шаг.
  4. Если же вы видите только что-то типа /dev/tty.Bluetooth-Incoming-Port, то значит порт для подключенного устройства не появился, и нам необходимо поставить специальное ПО. Скачиваем его по этой ссылке (во время установки может потребовать дать доступ в системных настройках). После его установки повторяем шаг 2 и находим  /dev/tty.SLAB_USBtoUART.
  5. Теперь скачиваем прошивку с гитхаба (выбираем просто последнюю).
  6. Распаковываем скачанный архив, заходим в папку bin и находим там версию для 4096, она будет называться примерно так ESP_Easy_mega-20190116_normal_ESP8266_4096.bin
  7. Если вы распаковали архив в папку Downloads, то путь до нее должен быть приблизительно таким ~/Downloads/ESPEasy_mega-20190116/bin/ESP_Easy_mega-20190116_normal_ESP8266_4096.bin
  8. Дальше мы переходим к прошивке. Устанавливаем esptool.
    1. Переходим в терминале в папку Downloads
      cd ~/Downloads
    2. Скачиваем esptool c github
      git clone https://github.com/themadinventor/esptool.git
    3. Переходим в папку esptool
      cd esptool
    4. Устанавливаем esptool
      sudo python setup.py install
  9. После успешной установки нам осталось выполнить лишь одну команду
    sudo python esptool.py --baud 921600 --port /dev/tty.SLAB_USBtoUART write_flash -fm dio 0x00000 ~/Downloads/ESPEasy_mega-20190116/bin/ESP_Easy_mega-20190116_normal_ESP8266_4096.bin

    В данной команде вы должны подставить , соответствующие значения из пункта 3 (или 4) и из пункта 7. Т.е. порт и путь до файла с прошивкой.

После этого запустится процесс прошивки (он будет длиться недолго), по итогам которого у вас среди списка доступных wi-fi сетей должна появится сеть от нашего прошитого устройства (с названием типа ESP_0).

Базовая настройка ESPEasy

Подключаемся к созданной нашим устройством Wi-Fi сети с паролем configesp. Сразу же подключения к Wi-Fi сети у вас должна появится captive страница, которая проведет вас по первичной настройке ESPEasy и подключению к вашей основной домашней сети.

По итогам вы увидите подобный экран.

Это значит, что процесс прошел удачно, теперь можно закрыть эту страницу (перед этим советую запомнить указанный IP), отключиться от данной wi-fi сети, подключаться к вашей домашней сети и перейти по указанному адресу на финальном экране, который вы уже запомнили :).

После перехода по данному адресу вы должны увидеть приблизительно следующий интерфейс.

Выключаем нашу ESP (вытаскиваем microUSB из USB нашего компьютера) и переходим к подключению датчика.

Подключение датчика

Теперь нам необходимо взять датчик и подключить его по следующей схеме (новичкам советую не отходить от схемы, прожженные мастера могут выбрать нужные GPIO):

Function:  Pin MH-Z19	    ESP8266
VCC            6            VIN
GND            7            GND
TX             2            GPIO15
RX             3            GPIO0

По итогу вы должны подключить приблизительно такую картину.

Настройка MQTT и показаний датчика

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

Заходим в Contollers и нажимаем Edit у самого первого

Там выбираем OpenHAB MQTT, меняем хост нашего MQTT сервера (если настраивали MQTT по нашим инструкциям, то просто вбиваем адрес вашего Raspberry Pi), сохраняем

В итоге должно получится приблизительно следующее

После чего переходим во вкладку Devices и нажимаем Edit у самого первого для того, чтобы подключить наш датчик CO2

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

По итогам сохранения изменений, перейдя на экран Devices вы увидите добавленный девайс и получаемые им данные, среди которых и будут наши заветные PPM CO2.

Также можете настроить периодичность обновления этих данных в настройках MQTT и настройках девайса.

По итогам теперь вы видите свои данные и транслируете их по MQTT. Осталось настроить наш центра автоматизации для считывания этих данных и отображению их в HomeKit.

Подключение к HomeBridge

Самый простой способ пробросить датчик CO2 в HomeKit как обычно является настройкой соответствующего плагине в HomeBridge

Устанавливаем плагин

sudo npm install -g homebridge-mqtt-co2

Добавляем следующий блок в наш конфиг в блок accessories:

{
"accessory": "mqtt-co2",
"name": "Living Room CO2",
"url": "mqtt://localhost",
"topic": "/ESP_Easy/mhz19/PPM"
}

, где вместо topic вносим следующий состав параметров:
— вместо ESP_Easy пишем имя нашей ESP (находим его над меню главной страницы веб-интерфейса ESP)
— вместо mhz19 пишем имя девайса (если все делали по инструкции, то это mhz19)
— вместо PPM пишем наименование передаваемого параметра (если делали по инструкции, то это PPM)
Итого должно получится: /ESP_Easy/mhz19/PPM

Перезагружаем HomeBridge — новый датчик воздуха должен появится в HomeKit, поздравляю!

Добавление через Home Assistant

Открываем configuration.yaml и добавляем туда в блок sensors: новый сенсор:

sensor:
- platform: mqtt
state_topic: "/ESP_Easy/mhz19/PPM"
name: "CO2"
qos: 0
unit_of_measurement: "ppm"

, где вместо state_topic вносим следующий состав параметров:
— вместо ESP_Easy пишем имя нашей ESP (находим его над меню главной страницы веб-интерфейса ESP)
— вместо mhz19 пишем имя девайса (если все делали по инструкции, то это mhz19)
— вместо PPM пишем наименование передаваемого параметра (если делали по инструкции, то это PPM)
Итого должно получится: /ESP_Easy/mhz19/PPM

Перезагружаем Home Assistant

Среди устройств должен добавится новый девайс: sensor.co2, а в вашем приложении Дом (при включённом homekit: в конфигурации Home Assistant) должен появится новый датчик качества воздуха, внутри которого будет указан уровень углекислого газа.

Вы также можете прокинуть устройство через node-RED: в таком случае действуем по инструкции отсюда. Получать данные сможете напрямую через MQTT или же из Home Assistant, функция по добавлению данных и определению качества воздуха ниже.

var characteristic = {};
if (msg.payload.entity_id == "sensor.co2") {
if (msg.payload.event.new_state.state) {
characteristic.CarbonDioxideLevel = parseInt(msg.payload.event.new_state.state);
if (msg.payload.event.new_state.state <= 800) { characteristic.AirQuality = 1; } else if (msg.payload.event.new_state.state > 800 && msg.payload.event.new_state.state <= 1000) { characteristic.AirQuality = 2; } else if (msg.payload.event.new_state.state > 1000 && msg.payload.event.new_state.state <= 1400) { characteristic.AirQuality = 3; } else if (msg.payload.event.new_state.state > 1400 && msg.payload.event.new_state.state <= 2000) { characteristic.AirQuality = 4; } else if (msg.payload.event.new_state.state > 2000) {
characteristic.AirQuality = 5;
}
else {
characteristic.AirQuality = 0;
}
}   
}
msg.payload = characteristic;
return msg;  

При это в качестве бонуса подхода через node-RED вы можете совместить данные с разных источников данных (допустим у вас уже стоит датчик PM2.5) в один, где будет сразу отображаться и PM2.5 и CO2, и исходя из этого высчитывать единое качество воздуха.

Подписывайтесь на канал InDaHomeKit в Telegram и Яндекс.Дзен, чтобы у вас всегда было что почитать: новости мира умного дома, обзоры новых устройств, инструкции по подключению.

Приходите в наш чат в Telegram

Так же у нас отличные паблики VK, Facebook, Instagram и Twitter.