Хотел поделиться с сообществом небольшим проектом.
Почти год живу в многоквартирной многоэтажной новостройке, в моем подъезде 33 этажа и 500 квартир. По дефолту во всех квартирах установлены дымовые датчики и пожарный извещатель, производитель Rubetek. Модель извещателя
"ОПОВЕЩАТЕЛЬ ПОЖАРНЫЙ РЕЧЕВОЙ РАДИОКАНАЛЬНЫЙ ОР-Р-01". То ли из-за неправильной настройки чувствительности или реагирования на сигналы, то ли из-за курения под датчиками и засора датчиков строительной пылью, но пожарная сигнализация срабатывает регулярно. Несколько первых месяцев жизни в новостройке она могла орать по 3-6 раз за день, сейчас видимо произвели донастройки и она срабатывает значительно реже.
Но конечно же, всех жильцов эта сигналка, мягко сказать - задолбала. Судя по чату дома, соседи просто отключают динамик в извещателе или откручивают провода питания. На самом деле, если случится настоящий пожар, никто эвакуироваться не будет, все привыкли к постоянным крикам "тревожной женщины" из оповещателя. Я тоже снял извещатель со стены, а провода питания замуровал в стену, так как мне не нравилась эта коробка, висящая в коридоре еще и из-за эстетических соображений. Но лишать себя, вообще-то жизненоважной информации, очень не хотелось, поэтому было решено найти способ получать сигнал тревоги в умный дом.
Первое, что я сделал, нашел руководство по эксплуатации (https://rubetek.com/upload/iblock/fe9/i33ojww9id3wzx97p2e1bj9e2pxh2fzj.pdf). Извещатель может работать как от проводного питания 24в, которое я удалил у себя, так и от батареек CR123 3V. Ставятся 2 батарейки, одна основная, другая резервная. Информацию о тревоге извещатель получает от контроллера по радиоканалу 868 МГц. Было 433 МГц, проблем бы не возникло, есть у меня шлюз для перехвата, но на 868 ничего не нашел.
Принято решение использовать esp8266, конкретно Wemos D1Mini и ESPHome в качестве прошивки. Сам я не особо секу в радиоэлектронике, посоветовался в чатах. Рекомендовали использовать оптопару (Оптопара или оптрон — электронный прибор, состоящий из излучателя света (светодиод) и фотоприёмника (биполярных и полевых фототранзисторов, фотодиодов, фототиристоров, фоторезисторов),
связанных оптическим каналом и, как правило, объединённых в общем
корпусе. Принцип работы оптрона заключается в преобразовании
электрического сигнала в свет, его передаче по оптическому каналу и
последующем преобразовании обратно в электрический сигнал) и снимать сигнал со светодиода, который по инструкции мигает в момент тревоги. Также этот светодиод должен оповещать о разряде основной и резервной батарей.
Сказано - сделано. Нашел на работе сломанный блок питания от компа, выпаял из него оптопару (модель PC817С, очень распространенная радиодеталь) и несколько резисторов (2 резистора по 2.7 кОМ и 1 резистор по 1 кОм). Собрал схему для подключения к ESP:
Разобрал извещатель и не обнаружил в нем светодиода, на который ссылается инструкция. Площадка под него распаяна, самого светодиода нет. Все равно попробовал к нему припаять оптопару, но в esp никаких сигналов не поступало. Для проверки схемы попробовал подключиться к соседнему светодиоду, который мигает при наличии сигнала связи - данные в esp поступают, значит схема рабочая. Попробовал подключить оптрон к контактам динамика. И чудо, в ESP посыпалась куча сработок в момент поступления сигнала на динамик. Извещатель каждые 20-30 секунд, женским голосом, ГРОМКО говорит о том, что надо бы эвакуироваться из помещений. Оповещение идет 6 секунд, за эти секунды бинарный сенсор в esphome срабатывает от 50 до 80 раз. Меня это более, чем устроило.
В Esphome сделан бинарный сенсор и стандартной интеграцией подключен к Home Assistant:
binary_sensor:
- platform: gpio
pin: D5
name: "alarm"
В HA стараюсь все делать пакаджами, вот его содержание:
template:
#сенсор включен когда произносится фраза тревожной женщины
- trigger:
platform: state
entity_id: binary_sensor.fire_alarm_speaker
# from: 'off'
to: 'on'
binary_sensor:
- name: fire_alarm_on
auto_off: 6
state: "true"
#сенсор пожарной тревоги, выключается после минуты молчания тревожной женщины
- binary_sensor:
- name: fire_alarm
delay_off:
minutes: 1
state: >
{{ states('binary_sensor.fire_alarm_on') }}
device_class: "smoke"
icon: >
{% if is_state("binary_sensor.fire_alarm", "on") %}
mdi:alarm-light
{% else %}
mdi:alarm-light-off
{% endif %}
automation:
- id: Тревожная женщина говорит
alias: 'Trigger Fire Alarm Speaker'
trigger:
- platform: state
entity_id: binary_sensor.fire_alarm_on
to: 'on'
action:
- service: switch.turn_on
entity_id: switch.blink_red_hall_nightlight
- id: Включение пожарной тревоги
alias: 'Triggered Fire Alarm Sensor'
trigger:
- platform: state
entity_id: binary_sensor.fire_alarm
to: 'on'
action:
- service: notify.telegram_all
data:
message: "Внимание! Пожарная тревога!"
- choose:
# Не ночь
- conditions:
- condition: time
after: "09:00:01"
before: "21:00:00"
sequence:
- service: script.turn_on
entity_id: script.fire_alarm_triggered_sound
- service: script.turn_on
entity_id: script.fire_alarm_triggered_speakers
# Ночь
# - conditions:
# - condition: time
# after: "21:00:01"
# before: "09:00:00"
# sequence:
# - service:
- id: Выключение пожарной тревоги
alias: 'End Fire Alarm'
trigger:
- platform: state
entity_id: binary_sensor.fire_alarm
from: 'on'
to: 'off'
action:
- service: notify.telegram_all
data:
message: "Расслабьтесь, пожарная тревога окончена!"
- choose:
# Не ночь
- conditions:
- condition: time
after: "09:00:01"
before: "21:00:00"
sequence:
- service: script.turn_on
entity_id: script.fire_alarm_end_sound
- service: script.turn_on
entity_id: script.fire_alarm_end_speakers
# Ночь
# - conditions:
# - condition: time
# after: "21:00:01"
# before: "09:00:00"
# sequence:
# - service:
script:
fire_alarm_triggered_sound:
alias: "fire_alarm_sound"
sequence:
- service: media_player.play_media
target:
entity_id: media_player.koridor
data:
media_content_type: music
media_content_id: /media/local/firealarm.mp3
fire_alarm_end_sound:
alias: "fire_alarm_disarm_sound"
sequence:
- service: media_player.turn_off
entity_id: media_player.koridor
fire_alarm_triggered_speakers:
alias: "fire_alarm_yandex_speakers"
sequence:
- service: tts.yandex_station_say
entity_id: media_player.yastation_bedroom
data:
message: Внимание! Пожарная тревога!
options:
volume_level: 0.5
- service: tts.yandex_station_say
entity_id: media_player.yastation_kiraroom
data:
message: Внимание! Пожарная тревога!
options:
volume_level: 0.5
- service: tts.yandex_station_say
entity_id: media_player.yastation_kitchen
data:
message: Внимание! Пожарная тревога!
options:
volume_level: 0.5
- service: tts.yandex_station_say
entity_id: media_player.yastation_vadimroom
data:
message: Внимание! Пожарная тревога!
options:
volume_level: 0.5
fire_alarm_end_speakers:
alias: "Колонки говорят Расслабьтесь, пожарная тревога окончена!"
sequence:
- service: tts.yandex_station_say
entity_id: media_player.yastation_bedroom
data:
message: Расслабьтесь, пожарная тревога окончена!
options:
volume_level: 0.5
- service: tts.yandex_station_say
entity_id: media_player.yastation_kiraroom
data:
message: Расслабьтесь, пожарная тревога окончена!
options:
volume_level: 0.5
- service: tts.yandex_station_say
entity_id: media_player.yastation_kitchen
data:
message: Расслабьтесь, пожарная тревога окончена!
options:
volume_level: 0.5
- service: tts.yandex_station_say
entity_id: media_player.yastation_vadimroom
data:
message: Расслабьтесь, пожарная тревога окончена!
options:
volume_level: 0.5
Разбор кода:
Сенсоры на платформе Template:
- fire_alarm_on - включается на 6 секунд (пока идет аудио на динамик и сыпятся сработки бинарного сенсора на ESP)
- fire_alarm - итоговый сенсор, определяющий тревогу, включается при первой сработке fire_alarm_on, выключается после минуты тишины от извещателя
Автоматизации:
- Trigger Fire Alarm Speaker - срабатывает по сенсору fire_alarm_on, мигает красным цветом ночник на базе старого шлюза xiaomi с прошивкой open_wrt
- Triggered Fire Alarm Sensor - срабатывает по сенсору fire_alarm, отправляет инфо о тревоге в телеграм, если время позволяет (не ночь), проигрывает звуковой файл из все того же переширого шлюза xiaomi и из 4х колонок yandex mini вещает Алиса о том, что тревога. Ночью будет только свет мигать и телеграм рассылаться.
- End Fire Alarm - конец тревоги, инфо в телегу и в не ночное время на яндекс мини Алиса.
Скрипты: С ними все понятно, не буду расписывать: играют звук, произносят голосом Алисы из колонок и т.д.
Поставленные задачи выполнены, а именно, оповещатель информирует меня и семью о тревоге удобным мне способом, в зависимости от времени суток через систему домашней автоматизации Home Assistant.