В проекте используется модуль от компании E-BYTE на чипе TLSR8258F512ET32 - E180-Z5812SP.
Испытывалось все на вот такой плате совместной разработки (спасибо Олегу)
Схема
Схема изделия.
Плата
На гребенку выведены следующие пины модуля
Детали, напечатанные на 3D принтере.
Плата zigbee подключается к заводскому модулю следующим образом -
Готовое устройство
Плата интегрированна в заводской пожарный дымовой извещатель Рубеж ИП 212-50М2.
Прошивок две. Изначально предполагалось, что микропереключатель на TAMPER будет нормально замкнутым. Но, что-то с ними проблема. И даже в лоте на Али, на котором указано, что это NC, китаец прислал NO. Потому прошивок две - одна под выключатель TAMPER NC, вторая под NO.
Нужную прошивку из репозитория нужно залить в модуль с помощью github.com/pvvx/TLSRPGM или оригинального программатора от Telink.
Как сделать недорогой программатор на базе модулей TB-03 или TB-04 можно почитать тут
Используется последнее SDK zigbee от Telink’а. Проект сформирован таким образом, что его можно собрать обычным make’ом как под Windows, в оболочке Git Bash, а также под Linux’ом (я проверял на Debian 11).
Как добавить проект в Eclipse можно почитать тут. Все точно так же, только для другого проекта.
Прошивка собрана по схеме, т.е. подключается файл платы board_8258_diy.h
. Еще адаптирована плата devkit_zi. Для других вариантов придется самостоятельно редактировать файл нужной платы.
В первый старт происходит попытка подключения к сети Zigbee. Если попытка удалась, модуль переходит в штатный режим работы.
Polling
Первые 30 секунд модуль просыпается раз в 3 секунды. По истечению 30 секунд модуль засыпает на 5 минут. Через 5 минут опять просыпается раз в 3 секунды последующие 30 секунд. И опять засыпает на 5 минут. И так по кругу. Можно было сделать просыпание модуля раз в 5 минут, но zigbee2mqtt по умолчанию проверяет устройства на наличие в сети примерно раз в 10 минут. И начинает ругаться в логе, что устройство не найдено и выставляет статус offline. При такой неровной схеме эта проблема устраняется. Это конечно можно настроить в zigbee2mqtt, но я предпочел такой вариант. Сделать же период просыпания всегда раз в 3 секунды - необоснованное расходование ресурса батарейки.
Reporting
Модуль высылает 2 отчета для батарейки - процент заряда и напряжение. Периода отправки нет, отчет высылается по изменению. Изменение учитывает 0.1 вольт. Рабочим считается напряжение от 9.0 вольт до 7.2. Сам извещатель начиная с 7.2 вольта до 5.9 переходит в режим оповещения о разряде батареи - подает кратковременный однократный звуковой сигнал с периодомповторения от 60 до 65 секунд.
Напряжение на батарейке модуль проверяет один раз в час. Отчеты о состоянии батарейки (напряжение в мВ и остаточный ресурс в %) по изменению с шагом 0.1 вольт.
Также принудительно отчеты высылаются в течение 1 секунды, если нажать на кнопку прибора.
Сетодиодная индикация режимов модуля
Если модуль продолжительное время не моргает светодиодом (период более 5 минут), то он находится в режиме глубокого сна. Выйти из этого режима модуль может в двух случаях. Первый - если пользователь нажмет на кнопку. Второй - если сработает оригинальный извещатель на обнаружение дыма или если устройство снять с крепежной пластины.
Zigbee Claster and Attribute
В прошивке используется 1 endpoint, который содержит следующие кластеры
Открываем на редактирование файл configuration.yaml
от zigbee2mqtt. И добавляем в конец файла
external_converters:
- smoke_sensor.js
ota:
zigbee_ota_override_index_location: local_ota_index.json
Файлы smoke_sensor.js
и local_ota_index.json
копируем из репозитория проекта туда же, где лежит configuration.yaml
от zigbee2mqtt. Не забываем разрешить подключение новых устройств - permit_join: true
. Перегружаем zigbee2mqtt. Проверяем его лог, что он запустился и нормально работает.
Далее, вставляем батарейки в устройство. Если питание было уже подано, то удерживаем кнопку на плате устройства (не на извещателе) более 5 секунд, до подтверждения сводиодом долгой вспышкой. Устройство должно подключиться к сети zigbee. Если подключение прошло удачно, то мы обнаружим наше устройство в zigbee2mqtt.
После того, как устройство подключилось к сети и zigbee2mqtt его обнаружил однократно нажать на кнопку на плате устройства (не на извещателе), для первоначального заполнения всех велечин.
После этого можно выбрать действие для кластера OnOff. Для этого нужно перейти в web-интерфейс zigbee2mqtt и зайти в раздел exposes.
Затем нажать кнопку на устройстве, чтобы оно проснулось и приняло данные.
Прямой биндинг
При срабатывании датчика, т.е. обнаружении дыма, можно послать команду OnOff на какое-то устройство (если нужно).
Для настройки прямого биндинга заходим в раздел bind устройства.
Снимаем все галочки, оствляем только на OnOff.
И жмем unbind, затем кнопку на плате (не на извещателе). Обновляем страницу, должно получиться вот так
Далее в самой нижней ячейке выбираем устройство и endpoint на нем, на который хотим организвать прямую передачу команды OnOff. Ставим галочку на OnOff (выбранное устройство должно иметь такой кластер).
Жмем bind справа и нажимаем кнопку на плате (не на извещателе). После этого обновляем страницу. Должно получиться вот так
Автоматического обновления в zigbee2mqtt для устройств, добавленных через конвертор, нет. Поэтому, если вышла новая версия, скачиваем обновленный файл прошивки для обновления OTA, например 6565-0204-13043001-smoke_sensor_zed.zigbee
. Переименовываем его в просто smoke_sensor_zed.zigbee
и кладем его по относительному пути zigbee2mgtt/images
. Перегружаем zigbee2mqtt. Идем во вкладку OTA. И кликаем на Check for new updates
Если обновление принимается, то кнопка Check for new updates
станет красной с надписью Update device firmware
. Ее нужно кликнуть и обновление начнет загружаться (zigbee обновляется долго, что-то в районе 20 минут).
Долгих испытаний в реальной работе пока не проводилось. С помощью ppk2 произведены замеры потребления дополнительной платы Zigbee.
Штатный режим
Среднее потребление за 15 минут 8,7 мкА.
Модуль спит.
В Home Assistant устройство будет выглядеть так.
В Яндекс устройство будет выглядеть так.
P.S.
Устройство выполнено с максимальным соблюдением zigbee стандартов. Поэтому во многих системах он будет работать, если система поддерживает стандартные кластеры, такие как OnOff и IAS. Например z2m безо вских конверторов прекрасно определяет это устройство и поддерживает IAS полностью. Яндекс так же поддерживает IAS, но не полностью, он не видит TAMPER и разряд батареи (но процент заряда через другой кластер он прекрасно видит).