Как стать автором
Обновить

Переделка оповещателя пожарной сигнализации для отправки тревоги в Home Assistant

Время на прочтение6 мин
Количество просмотров6.4K

Хотел поделиться с сообществом небольшим проектом.

Почти год живу в многоквартирной многоэтажной новостройке, в моем подъезде 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. Коллектор оптопары подключил к выходу 3,3В на esp (wemos d1), землю к контакту GND, PIN - к выходу D5 на wemos_d1:

Схема подключения к ESP с "подтяжкой" к земле
Схема подключения к ESP с "подтяжкой" к земле
оптопара лежит "попой" вверх ))
оптопара лежит "попой" вверх ))

Разобрал оповещатель и не обнаружил в нем светодиода, на который ссылается инструкция. Площадка под него распаяна, самого светодиода нет. Все равно попробовал припаять оптопару в размеченным на плате контактам, но в esp никаких сигналов не поступало. Для проверки схемы попробовал подключиться к соседнему светодиоду, который мигает при наличии сигнала связи - данные в esp пошли, значит схема рабочая. Подключил оптрон к контактам динамика. И чудо, в ESP посыпалась куча сработок в момент поступления сигнала на динамик. Оповещатель каждые 20-30 секунд, женским голосом, ГРОМКО говорит о том, что надо бы эвакуироваться из помещений. Оповещение идет 6 секунд, за эти секунды бинарный сенсор в esphome срабатывает от 50 до 80 раз. Меня это более чем устроило.

Подключение к площадке светодиода (неуспешно)
Подключение к площадке светодиода (неуспешно)
Подключение к выходу на динамик
Подключение к выходу на динамик
Удалил динамик, все вернул в родной корпус
Удалил динамик, все вернул в родной корпус

В Esphome сделан бинарный сенсор и стандартной интеграцией подключен к Home Assistant. Кусок кода из esphome, касающийся сенсора:

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:

  • binary_sensor.fire_alarm_on - включается на 6 секунд (пока идет аудио на динамик и сыпятся сработки бинарного сенсора на ESP)

  • binary_sensor.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.

Теги:
Хабы:
Всего голосов 13: ↑12 и ↓1+11
Комментарии16

Публикации