Перепрограммируем заводской датчик CO2 Zigbee от компании Tuya

в 21:24, , рубрики: home assistant, TLSR8258, Tuya, zigbee, zigbee2mqtt, Датчик CO

Предыдущий проект о перепрограммировании заводского термостата вызвал достаточно большой интерес у сообщества (ссылка будет в конце статьи). И вот поступило предложение проверить, можно ли таким же образом избавиться от спама на датчике CO2.

Недорогой, но достаточно качественный датчик CO2 на Али.

Недорогой, но достаточно качественный датчик CO2 на Али.

Датчик шлет значение CO2 каждые 1.5 секунды, не останавливаясь.

Лог z2m.

Лог z2m.

Хороший обзор этого датчика есть на канале "У Павла".

Пока сам датчик едет ко мне, пытаюсь найти информацию по сенсору, который применен в устройстве - MH-Z19E. Даташит находится легко. А вот с протоколом обмена как-то не складывается (забегая вперед скажу, что протокол так и не понадобился).

И вот датчик у меня. Подключаем к Хабу Tuya и смотрим, что он умеет. А умеет он только показывать уровень CO2 в PPM.

Перепрограммируем заводской датчик CO2 Zigbee от компании Tuya - 3

Само приложение может построить график. А также можно настроить нотификацию на мобильный телефон (но это платно). Все.

Ок. Разбираем корпус, смотрим что внутри. А внутри все тот же модуль Zigbee от Tuya - ZT3L.

Плата датчика сверху.

Плата датчика сверху.

На всякий случай деинсталлируем модуль, чтобы убедиться, что под ним нет секретов (дорожки, идущие к ногам модуля, но не видимые снаружи).

Плата с удаленным модулем ZT3L.

Плата с удаленным модулем ZT3L.

Нет, никаких секретов нет. Все, что было видно снаружи, только это и используется. RX, TX, PB5, PC0, +3V3 и GND. Устанавливаем модуль на место и припаиваем проводники к GPIO и GND.

Перепрограммируем заводской датчик CO2 Zigbee от компании Tuya - 6

Как и в случае с термостатами, какую-либо деятельность на PB5 и PC0 обнаружить не удалось. Ок. Подключаем RX-TX к логанализатору и смотрим. Упс. А там нет обмена с сенсором. Там идет обмен по Tuya Serial Protocol версии 2. Сюрприз.

Передача 1033 ppm.
Передача 1033 ppm.

Смотрим внимательно плату и обращаем внимание на ранее проигнорированную микросхему. И понимаем, что это еще один микроконтроллер и ZT3L по uart общается как раз с ним. А вот он уже общается с сенсором.

Перепрограммируем заводской датчик CO2 Zigbee от компании Tuya - 8

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

Подключаем датчик к сети под управлением zigbee2mqtt.

Перепрограммируем заводской датчик CO2 Zigbee от компании Tuya - 9

Что мы хотим сделать - реализовать классический кластер zigbee для передачи CO2. Идем в ZCL и смотрим, что кластер для определения CO2 входит в CHAPTER MEASUREMENT AND SENSING. А уже в нем это Concentration Measurement.

Неполный список этого раздела.

Неполный список этого раздела.

Нас интересует Carbon Dioxide с ID 0x040D. Идем в SDK. Опа, сюрприз. Телинк не сделал ничего для этого раздела.

Перепрограммируем заводской датчик CO2 Zigbee от компании Tuya - 11

Но это не страшно. Нам просто нужно «задефайнить» сам кластер и несколько атрибутов. И создать функцию регистрации кластера. Это не сложно.

#define ZCL_CLUSTER_MS_CO2_MEASUREMENT 0x040D

#define ZCL_CO2_MEASUREMENT_ATTRID_MEASUREDVALUE 0x0000

#define ZCL_CO2_MEASUREMENT_ATTRID_MINMEASUREDVALUE 0x0001

#define ZCL_CO2_MEASUREMENT_ATTRID_MAXMEASUREDVALUE 0x0002

CODEZCL_ status_t zcl_co2_measurement_register(u8 endpoint, u16 manuCode, u8 attrNum, const zclAttrInfo_t attrTbl[], cluster_forAppCb_t cb)

{

return zcl_registerCluster(endpoint, ZCL_CLUSTER_MS_CO2_MEASUREMENT, manuCode, attrNum, attrTbl, NULL, cb);

}

Все готово. Можно посмотреть, какие команды используются MCU и распарсить их. А их всего две. Первая возвращает значение CO2 в PPM, а вторая все время запрашивает сетевой статус устройства. Так, как "движок" общения по uart был уже реализован в проекте термостата, то адаптация кода не заняла много времени.

Как обновить. Сперва убеждаемся, что у нас именно такой датчик - "TZE200ogkdpgy2 ". Далее определяем локальный файл обновлений в z2m.

[

"url": "images/1141-d3a3-1111114b-tuya_co2sensor_zrd.zigbee",

"modelId": "TS0601",

"manufacturerName": [

"_TZE200_ogkdpgy2"

],

"force": true

}

]

Далее по адресу из этого файла кладем образ ОТА для обновления.

Далее подключаем два внешних конвертора. Первый для обновления оригинальной прошивки на кастомную. Второй для уже обновленного датчика. Перегружаем z2m и видим наш датчик с немного другим именем.

Перепрограммируем заводской датчик CO2 Zigbee от компании Tuya - 12

Заходим в раздел ОТА, жмем проверить и потом обновить.

Перепрограммируем заводской датчик CO2 Zigbee от компании Tuya - 13
Перепрограммируем заводской датчик CO2 Zigbee от компании Tuya - 14

Если все сделано правильно, то мы увидим, что обновление доступно. Жмем на красную кнопку. И обновление по ОТА начнет загружаться.

Перепрограммируем заводской датчик CO2 Zigbee от компании Tuya - 15
Перепрограммируем заводской датчик CO2 Zigbee от компании Tuya - 16

Время обновления примерно 25 минут. После обновления нужно удалить устройство из z2m. Перегрузить z2m. Разрешить сопряжение. Если на датчике светодиод горит, то больше делать ничего не нужно. Если не горит, то зажать кнопку на 5 секунд и отпустить. Начнется сопряжение.

Перепрограммируем заводской датчик CO2 Zigbee от компании Tuya - 17

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

Перепрограммируем заводской датчик CO2 Zigbee от компании Tuya - 18
Перепрограммируем заводской датчик CO2 Zigbee от компании Tuya - 19

Частоту репортов можно настроить во вкладке reporting.

Перепрограммируем заводской датчик CO2 Zigbee от компании Tuya - 20

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

Перепрограммируем заводской датчик CO2 Zigbee от компании Tuya - 21

Спасибо Павлу за предоставленный датчик :-)

Проект датчика на github'е

Проект термостата и статья на Хабре

Автор: Slacky1965

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js