- Сделано в виде дополнительной платы к заводскому пожарному дымовому извещателю Рубеж ИП 212-50М2.
- Изменяет статус ALARM1 в IAS при обнаружении дыма.
- Изменяет статус TAMPER в IAS при снятии извещателя с крепежной пластины.
- Посылает команду On-Off (Off-On или Toggle, в зависимости от выбранных настроек) при обнаружении дыма.
- Сохраняет настройки в энергонезависимой памяти модуля.
- Передает показания по сети Zigbee.
- Кластер On_Off имеет возможность напрямую подключаться к исполнительному устройству минуя координатор.
- Взаимодейстивие с "умными домами" через zigbee2mqtt.
- Первоначальная настройка происходит через web-интерфейс zigbee2mqtt.
- Подключиться к сети zigbee - удерживать кнопку на плате устройства более 5 секунд.
- Покинуть сеть zigbee - удерживать кнопку на плате устройства более 5 секунд.
- Сделать restart модуля - нажать кнопку 5 раз.
- При одиночном нажатии кнопки модуль просыпается и высылает отчеты.
В проекте используется модуль от компании E-BYTE на чипе TLSR8258F512ET32 - E180-Z5812SP.
Испытывалось все на вот такой плате совместной разработки (спасибо Олегу)
Схема
Схема изделия.
Плата
На гребенку выведены следующие пины модуля
- SWS, GND - для заливки в модуль прошивки
- TXD-DBG - на всякий случай, вдруг кому-то пригодится для отладки.
Детали, напечатанные на 3D принтере.
Плата zigbee подключается к заводскому модулю следующим образом -
- Красный провод (1 контакт разъема CN1) - к +9v - контакт 1 на плате извещателя.
- Черный провод (2 контакт разъема CN1) - к -9v (или земля) - контакт 2 на плате извещателя.
- Желтый провод (3 контакт раъема CN1) - контакт К1 на плате извещателя.
Готовое устройство
Плата интегрированна в заводской пожарный дымовой извещатель Рубеж ИП 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 минут), то он находится в режиме глубокого сна. Выйти из этого режима модуль может в двух случаях. Первый - если пользователь нажмет на кнопку. Второй - если сработает оригинальный извещатель на обнаружение дыма или если устройство снять с крепежной пластины.
- Светодиод с периодичностью от 5 секунд до 5 минут мограет одной вспышкой - модуль находится в сети, работает в штатном режиме.
- Светодиод с периодичностью 5 секунд моргает двумя вспышками - происходит OTA обновление прошивки.
- Светодиод с периодичностью от 5 секунд до 5 минут моргает тремя вспышками - модуль не в сети - не был поключен, например вставили батарейки в устройство, но zigbee сети нет или активирован запрет на подключение; или был поключен, но в данный момент какие-то проблемы с сетью. В любом случае в таком режиме модуль проработает примерно 30 минут. Если за это время он не подключится к сети или не восстановит связь, то уйдет в глубокий сон. В этом режиме, чтобы связаться с модулем, нужно его разбудить, нажав на кнопку прибора.
Zigbee Claster and Attribute
В прошивке используется 1 endpoint, который содержит следующие кластеры
- Базовые кластеры.
- Кластер GEN_POWER_CFG, который отдает напряжение на батарейке и процент разряда.
- Кластер SS_IAS_ZONE, который собственно и сообщает о дыме, снятии устройства с крепежной пластины и разряженной батареи.
- Кластер GEN_ON_OFF, который посылает команду при обнаружении дыма на выбранное заранее устройство (прямой биндинг).
- Кластер ON_OFF_SWITCH_CFG, который позволяет выбрать действие кластера GEN_ON_OFF. Т.е. при обнаружении дыма возможно три варианта команды - On-Off, Off-On или Toggle.
Открываем на редактирование файл 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 и разряд батареи (но процент заряда через другой кластер он прекрасно видит).