Добрый день, уважаемые читатели!
В данной статье я расскажу как подключить к вашему проекту на ESP32 и ESP-IDF модуль reAlarm, и тем самым добавить в него функции охранно-пожарной и аварийной сигнализации.
Данная статья является логичным продолжением и завершением серии статей “Термостат + ОПС”, но никто не запрещает вам применить его и в других ваших проектах. Краткое содержание предыдущих серий:
Концепция библиотеки reAlarm
Для начала определимся с терминами и понятиями, которые будут использоваться в дальнейшем в данной статье. А заодно разберемся с принципами функционирования библиотеки на текущий момент времени.
Дисклеймер.Все, что описано в данной статье – применимо в первую очередь для частных домовладений и квартир, где пока что не требуется обязательная установка только сертифицированных устройств охранно-пожарных сигнализаций, лицензирование и контроль со стороны соответствующих “органов”.
Все что вы делаете – исключительно на ваш страх и риск, я не могу дать никаких предварительных гарантий в ваших самодельных конструкциях и прошивках.
Я не являюсь профессиональным монтажником или инженером ОПС, поэтому некоторые фразы или термины могут показаться профессионалам из данной области некорректными или неуместными. Что ж, в этом случае можете поправить меня в комментариях.
Используемые датчики или сенсоры
Основной частью любого устройства сигнализации являются сенсоры. В данной библиотеке (и в данном устройстве, соответственно) вы можете использовать как проводные, так и беспроводные сенсоры, работающие на частоте 433 MHz. Количество подключаемых датчиков ограничено только физическими возможностями микроконтроллера (по наличию свободных GPIO) и памятью устройства. Для подключения проводных датчиков можно так же легко использовать I2C-расширители GPIO.
Это могут быть:
- Герконы или датчики дверей и окон, ворот и т.д. которые размыкаются при открытии окна или двери
- PIR-датчики движения для обнаружения движения теплых объектов внутри охраняемых помещений
- Датчики протечки, уровня воды, угарного и горючих газов – то есть датчики для контроля технического состояния инженерных коммуникаций дома
- Датчики дыма и открытого пламени – позволяют своевременно обнаружить пожар и принять меры к его ликвидации (или хотя бы к эвакуации)
- Датчики контроля сетевого напряжения – позволяют обнаружить пропадание основного сетевого питания дома или квартиры
- Кнопки от дверных 433-MHz звонков – можно использовать как тревожные кнопки, либо просто прислать уведомление на телефон
Данный список далеко не полный, вы можете дополнить его своими вариантами. Библиотека может обрабатывать сигналы и сообщения с датчиков трех типов: проводных, беспроводных и виртуальных.
Проводные датчики подключаются к входам устройства путем двухпроводного или трехпроводного шлейфа. Количество проводных датчиков ограничено только наличием свободных GPIO на вашем микроконтроллере, а также можно задействовать расширители различные GPIO. Поддерживаются как нормально замкнутые датчики, так и датчики с нормально разомкнутым выходом. Питание датчиков не зависит от напряжения питания микроконтроллера – например это могут быть стандартные промышленные 12-вольтовые PIR. Если рассматривать устройство “Термостат + ОПС”, то схема подключения проводных датчиков выглядит следующим образом:
Возможно подключение двухпроводных детекторов дыма, но в данном устройстве (на данной плате) это не реализовано. Обработка изменений на входах ведется с помощью прерываний и программного подавления дребезга контактов.
Беспроводные датчики 433 Мгц вы можете использовать, если по каким-либо причинам невозможно использовать проводные. Про принципы их работы я уже рассказывал в другой статье, сами датчики планирую подробнее рассмотреть позже.
Использование беспроводных датчиков для охраны, в принципе, не является безопасной практикой, так как их сигналы легко подавить внешней помехой на той же частоте. Однако использование беспроводных инженерных датчиков вполне оправдано, так как подавлять их нет особого смысла, а тянуть провод под мойку или стиральную машину для датчиков протечки – ну так себе удовольствие. Можно также легко принимать и обрабатывать сигналы от кнопок беспроводных звонков – таким образом вы получите уведомление на телефон, что кто-то ломится к вам в двери в ваше отсутствие.
В качестве датчиков так же могут выступать различные беспроводные пульты управления для переключения режима охраны – но учтите, что их довольно легко перехватить и имитировать. Впрочем, в подавляющем большинстве китайских WiFi и GSM-сигнализаций беспроводные 433 МГц датчики и пульты используются вообще без зазрения совести. Да и от деревенских синяков, ищущих чем-бы поживиться на вашей даче, уж точно защитят.
Также вы можете использовать в качестве датчиков множество DIY-модулей с AliExpress, как пяти-вольтовых, так и трех-вольтовых, при условии соответствующего подключения к микроконтроллеру. Здесь всё зависит только от вашей фантазии и бюджета.
Виртуальные датчики. Кроме датчиков, которые подключены тем или иным способом к вашему устройству, библиотека позволяет использовать данные с других “умных” устройств, созданных по той же самой технологии. Для этого можно использовать разные способы обмена данными между ESP, но проще всего – использовать локальный MQTT-брокер со специальными скрытыми от внешних систем топиками. Это позволяет задействовать в работе “центрального пульта” сенсоры, которые физически подключены к другому контроллеру. А так же передавать данные о сигналов с датчиков на другие устройства. Локальный MQTT брокер позволяет сделать это с минимальными задержками, даже есть отсутствует доступ к “глобальному” интернету.
Например, у меня имеется несколько относительно автономных устройств: в доме, в гараже, в бане, в теплице. Все они подключены к моей локальной сети и локальному брокеру, который запущен на домашнем роутере. Да, использование wifi-это не 100% надежно, но зато очень просто и очень легко. Но потребуется предпринять дополнительные меры по поддержанию бесперебойной работы роутера.
В гараже установлены несколько проводных датчиков движения и датчики двери и подъемных ворот. Контроллер гаража использует данные с них для управления освещением. Но вместе с этим, сигналы с этих датчиков одновременно передаются на центральное устройство, которые выполняет функции ОПС (кроме прочих). Получается, что одни и те же датчики одновременно используются для двух совершенно разных целей – автоматики освещения и охраны. Там же есть датчики дыма, сигналы с которых так же передаются на центральный “пульт” дома.
В бане установлены датчики дыма на чердаке, но функций пожарной сигнализации контроллер не имеет – вместо этого при срабатывании дымового датчика он передаст сигнал на центральный пульт также через wifi и локальный брокер. Но для гарантии можно реализовать часть функций и на локальном контроллере.
Сигналы (сообщения) с датчиков
Датчики могут генерировать как минимум один, а иногда два или более различных сигналов, например:
- alarm (тревога) – это сигнал на пульт о любом событии, на которое рассчитан ваш датчик: открытие двери, движение в зоне охраны, нажатие кнопки, дым, протечка воды и т.д.
- alarm cancel – отмена (сброс) тревоги – сигнал о восстановлении спокойствия: закрытие двери, устранение протечки, восстановление нормального процесса и т.д.
- tamper – сигнал о попытке вскрытия или повреждения датчика или шлейфа охраны
- low power – низкий уровень заряда батареи – для устройств с автономным питанием
- и т.д.
Как правило, “отмена тревоги” генерируется только проводными датчиками (например самыми обычными герконами или концевиками), поэтому в беспроводных сенсорах сброс тревоги происходит автоматически спустя какое-то время по таймеру. Иногда необходимо сбросить сам датчик после сигнала тревоги путем кратковременного снятия питания – например для пожарных датчиков, что также может делаться автоматически.
Для предупреждения ложных срабатываний имеется функция генерация тревоги “с подтверждением” – то есть для выдачи сигнала тревоги необходимы подтверждающие сигналы с того же или “соседних” датчиков той же зоны в течение определенного времени. Например PIR-сенсор может легко среагировать на солнечный зайчик или поток теплого воздуха, но это не вызовет включения сирены, если не будет подтверждения с другого датчика или открыта дверь, например.
Зоны охраны
Но сами по себе сигналы и сообщения с датчиков ничего в системе не генерируют – они просто подаются “на вход” той или иной зоны охраны. А уже настройки зоны определяют, каким образом необходимо реагировать на поступающие сигналы. Таким образом зона охраны – это виртуальная группа, которая позволяет логически объединять сигналы с датчиков и определять (настраивать) реакции на них в разных режимах работы системы.
Зоны могут быть организованы как по физическому расположению, так и по логическим функциям, например:
- Зона “периметр дома” – датчики дверей и окон, срабатывание которых говорит о том, что в помещение пытаются проникнуть извне. В эту же зону можно включить датчики вибрации, которые сработают при разбитии окна, например.
- Зона “внутри дома” – как правило в эту зону стоит “завести” сигналы с датчиков движения внутри охраняемого помещения.
- Зона “вне дома” – датчики движения во дворе используются для управления освещением, а в режиме охраны – выдадут сигнал на запись для камеры и пришлют тихое уведомление на телефон, не поднимая паники и не включая сирены.
- Зона “tamper” – это может быть виртуальная зона с круглосуточной охраной, куда стекаются данные со всех датчиков контроля целостности. Таким образом любой сигнал в этой зоне вызовет выдачу уведомлений вне зависимости от того, включена охрана или нет.
- Зона “пожар”– зона с безусловной круглосуточной тревогой в любом режиме охраны.
- Инженерные системы – при обнаружении сигнала тревоги в этой зоне присылается уведомление на телефон и предпринимаются меры по устранению аварии – перекрывается вода, газ и т.д.
Список зон вы можете расширить или изменить по своим вкусам и понятиям. Разные сигналы одного и того же датчика можно направлять в разные зоны с разными типами реакции.
Режимы работы
На текущий момент библиотека поддерживает четыре режима работы:
- ASM_DISABLED – Режим охраны отключен. Реакции на датчики движения внутри охраняемой зоны и по её периметры (двери, окна) – нет. Инженерные и пожарные датчики обрабатываются в полном объеме.
- ASM_ARMED – Полный режим охраны. Система реагирует на сигналы любых датчиков, подключенных к устройству тем или иным способом. При нарушении включается сирена и световой маячок.
- ASM_PERIMETER – Режим охраны периметра. Система не реагирует на датчики, установленные внутри охраняемого помещения, однако двери и окна охраняются как при полном режиме охраны. Инженерные и пожарные датчики обрабатываются в полном объеме.
- ASM_OUTBUILDINGS – Режим охраны внешних помещений. Для постановки на охрану только внешних строений, например гаража. Инженерные и пожарные датчики обрабатываются в полном объеме. Вот честно говоря, сам не пользовался ни разу.
Переключать режимы охраны можно:
- С помощью MQTT панели управления со смартфона или компьютера
- С 433 МГц радиопульта
- С помощью кнопочной станции на панели управления устройством (опционально)
Предусмотрена временная задержка при постановке и снятии режима охраны, для того чтобы можно было покинуть охраняемую зону без тревоги.
Оповещения о событиях
Предусмотрены несколько типов оповещений о событиях:
- Сирена 12в
- Световой маячок 12в
- Уведомления в telegram
Сирена включается только в режиме тревоги на заданное время (например 3 минуты). При включении и отключении режима охраны выдается несколько коротких звуковых сигналов – для индикации переключения режима. Сирену можно отключить удаленно, если не вы хотите беспокоить соседей, например.
Световой маячок дублирует звуковую тревогу с помощью сирены, и кроме того, отображает режим охраны короткими вспышками.
Уведомления в telegram отправляются в группу, в которую вы можете включить всех заинтересованных лиц. Например так:
При наличии шлюза “MQTT – telegram” с обратной связью, вы можете управлять системой охраны непосредственно из telegram.
Типы реакции на события
Для каждой зоны охраны, и для каждого режима при запуске устройства вы должны настроить реакции – как будет реагировать система на различные сигналы в данной зоне и данном режиме работы. Библиотека поддерживает следующий список реакций:
- ASR_ALARM_INC – Увеличить счетчик тревог
- ASR_ALARM_DEC – Уменьшить счетчик тревог
- ASR_MQTT_EVENT – Публикация события на MQTT
- ASR_MQTT_STATUS – Публикация состояния охраны на MQTT
- ASR_TELEGRAM – Уведомление в Telegram
- ASR_SIREN – Включить сирену
- ASR_FLASHER – Включить маячок
- ASR_BUZZER – Звуковой сигнал на пульте
- ASR_RELAY_ON – Включить реле (нагрузку)
- ASR_RELAY_OFF – Выключить реле (нагрузку)
- ASR_RELAY_SWITCH – Переключить реле (нагрузку)
Каждая реакция – это просто один бит 16-битного числа, таким образом их можно легко комбинировать между собой. Для упрощения настройки я чаще всего использую “стандартные” наборы реакций:
// "Стандартные" наборы реакций
ASRS_NONE = 0x0000; // Никакой реакции (по умолчанию)
ASRS_CONTROL = ASR_MQTT_EVENT | ASR_MQTT_STATUS;
ASRS_REGISTER = ASR_MQTT_EVENT | ASR_MQTT_STATUS;
ASRS_ONLY_NOTIFY = ASR_MQTT_EVENT | ASR_MQTT_STATUS | ASR_TELEGRAM;
ASRS_FLASH_NOTIFY = ASR_MQTT_EVENT | ASR_MQTT_STATUS | ASR_TELEGRAM | ASR_FLASHER;
ASRS_ALARM_NOTIFY = ASR_ALARM_INC | ASR_MQTT_EVENT | ASR_MQTT_STATUS | ASR_TELEGRAM | ASR_BUZZER;
ASRS_ALARM_SILENT = ASR_ALARM_INC | ASR_MQTT_EVENT | ASR_MQTT_STATUS | ASR_TELEGRAM | ASR_BUZZER | ASR_FLASHER;
ASRS_ALARM_SIREN = ASR_ALARM_INC | ASR_MQTT_EVENT | ASR_MQTT_STATUS | ASR_TELEGRAM | ASR_BUZZER | ASR_SIREN | ASR_FLASHER;
ASRS_POWER_ON = ASR_MQTT_EVENT | ASR_MQTT_STATUS | ASR_TELEGRAM | ASR_FLASHER;
ASRS_POWER_OFF = ASR_ALARM_INC | ASR_MQTT_EVENT | ASR_MQTT_STATUS | ASR_TELEGRAM | ASR_BUZZER | ASR_FLASHER;
Таким образом ASRS_NONE означает полный игнор, ASRS_ONLY_NOTIFY – только уведомления в telegram, ASRS_ALARM_SILENT – тихую тревогу без сирены, а ASRS_ALARM_SIREN – тревогу по полной программе, с сиреной, блекджеком и …
С концепцией разобрались, переходим к практической части – добавим в наш проект соответствующие функции.
Продолжить чтение статьи в нормальном оформлении вы можете на моем основном сайте