Сделать стартовойДобавить в закладки  
Главная страничка Главная страничка
В номере:

    Выходит с 17 июля 2008 г. цена договорная

    Опрос

    Windows Mobile
    Symbian
    Android
    iPhone
    Linux
    другая
    не знаю
    у меня обычный телефон



    Календарь
    «    Декабрь 2024    »
    ПнВтСрЧтПтСбВс
     1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031 

    Архив новостей
    Декабрь 2024 (3)
    Ноябрь 2024 (2)
    Март 2022 (1)
    Декабрь 2021 (1)
    Август 2021 (1)
    Июль 2021 (3)

    Информация
    Сигнализация в Home Assistant
    Умный дом
    автор: dimon, опубликовано: 21 декабря 2024

    Это пример моей сигнализации в Home Assistant с использованием встроенных инструментов.

    Панель управления сигнализацией в Home AssistantПанель управления сигнализацией в Home Assistant


    На самом деле существует очень хорошая интеграция Alarmo для системы сигнализации в Home Assistant. Она предоставляет пользовательский интерфейс для настройки собственной системы сигнализации полностью из браузера. Но мне хотелось использовать только встроенные инструменты.

    Т.к. я люблю Packages Home Assistant, то все что касается сигнализации я собрал в одном пакете.
    Сам пакет я разместил на GitHub, далее я распишу что в него входит и как это работает.


    Сначала создаем сущности timer в Home Assistans:
    ####################################################
    #                    СУЩНОСТИ                      #
    ####################################################
    
        binary_sensor:
      
        timer:
          alarm_sirena_timer:               # таймер включения сирены если сигнализация не отключена
            duration: "00:01:00"
          alarm_sirena_timer_off:           # таймер отключения сирены если сигнализация ВСЕ ЕЩЕ не отключена
            duration: "00:10:00"


    Первый таймер используется как задержка перед включением сирены с момента сработки датчиков открытия.
    Второй используется для отключения сирены если от момента сработки сигнализации никто ее так и не выключил. Это сделано специально.
    Логика у меня была такая - окрыли дверь, запустились таймеры, если пока работает первый таймер сигнализацию не сняли с режима охраны - включаем сирену. Если в режим завершения второго таймера, сигнализацию все еще не выключили, то дальше смысла нет "орать".


    Далее создадим панель управления сигнализацией:

    ####################################################
    #                     ПАНЕЛЬ                       #
    ####################################################
        alarm_control_panel:                #
          - platform: manual                #
            name: Home Alarm                # имя панели
            code: "77877"                   # код для включения или отключения
            code_arm_required: false        # требуется ли код для постановки на охрану
            arming_time: 60                 # Время в секундах состояния «подготовки» перед изменением состояния.
            delay_time: 50                  #
            trigger_time: 20                # Время в секундах «сработавшего» состояния, в котором срабатывает тревога.
            disarmed:
              trigger_time: 0               #
            armed_home:
              arming_time: 0                #
              delay_time: 0                 #


    Основные параметры, которые необходимо задать я описал в комментариях.


    Теперь создадим вспомогательные элементы:

    ####################################################
    #           ВСПОМОГАТЕЛЬНЫЕ ЭЛЕМЕНТЫ               #
    ####################################################
        input_boolean:
          cam2record_enabled:
            name: "Cam2 запись вкл"         # имя
            #initial: off                   # начальное значение
            icon: mdi:cctv-off              # иконка
    
          cam3record_enabled:
            name: "Cam3 запись вкл"         # имя
            #initial: off                   # начальное значение
            icon: mdi:cctv-off              # иконка


    Пояснение - у меня есть две камеры в доме, и я создаю два переключателя. Смысл в том, что когда переключатели в статусе On, то при сработке сигнализации либо датчиков движения в Телеграм прилетают десяти секундные видео с этих камер. Когда я ставлю сигнализацию в режим охраны, то эти переключатели переходят в состояние On, и потом они используются в автоматизациях в условиях "а надо ли слать видео".


    Скрипты, они используются в автоматизациях чтобы сократить код автоматизаций.

    Скрипт включения режима охраны "home away":

        script:
        
        # скрипт включения режима охраны "home away"
          alarm_on_home_away:
            alias: alarm_on_home_away
            sequence:
              - service: notify.me_group
                data:
                  title: Security alarm system HA
                  message: |
                    {{"\U0001F6A7"}} Включение охраны в {{ now().strftime('%Y-%m-%d %H:%M:%S %Z') }}
              # взведение сигнализации
              - service: alarm_control_panel.alarm_arm_away
                data: {}
                target:
                  entity_id: alarm_control_panel.home_alarm
              # проиграть мелодию на шлюзе
              - service: xiaomi_aqara.play_ringtone
                data:
                  gw_mac: gw_mac
                  ringtone_id: '10002'
                  ringtone_vol: 30
              # выключить экран датчика качества воздуха в спальне
              - service: button.press
                target:
                  entity_id: button.d1mini_n2_blank_screen
                data: {}
            mode: single


    В комментариях я все описал, если кратко - отправляем уведомление в Телеграм, проигрываем мелодию на шлюзе Xiaomi с динамиком (lumi-gateway-v3), взводим панель сигнализации в статус arm_away, и на датчике качества воздуха переключаем экран на пустой (там OLED экран, и хочу сберечь его немного - когда дома никого нет, нет смысла на нем что-то отображать.


    Скрипт выключения режима охраны:

        # скрипт выключения режима охраны
          alarm_off:
            alias: alarm_off
            sequence:
              - service: notify.me_group
                data:
                  title: Security alarm system HA
                  message: |
                    {{"\U0001F6A7"}} Выключение охраны в {{ now().strftime('%Y-%m-%d %H:%M:%S %Z') }}
              # выключение режима охраны
              - service: alarm_control_panel.alarm_disarm
                data:
                  entity_id: alarm_control_panel.home_alarm
                  code: 77877
              # проиграть мелодию на шлюзе
              - service: xiaomi_aqara.play_ringtone
                data:
                  gw_mac: gw_mac
                  ringtone_id: '10003'
                  ringtone_vol: 30
              # выключение инпут булеонов "отсылать ролики с камер"
              - service: input_boolean.turn_off
                data: {}
                target:
                  entity_id:
                   # - input_boolean.cam2record_enabled
                    - input_boolean.cam3record_enabled
              # включение подсветки прихожей
              - service: timer.start
                data:
                  duration: "00:03:00"
                target:
                  entity_id: timer.halllight_night_timer
              # включить экран датчика качества воздуха в спальне
              - service: button.press
                target:
                  entity_id: button.d1mini_n2_next_screen
                data: {}
            mode: single            


    Делает то же что и предыдущий скрипт, но наоборот. Плюс включает обратно отображение данных на датчике качества воздуха и на 3 минуты включает подсветку в прихожей (запускает таймер, который рулит подсветкой).


    Теперь рассмотрим автоматизации, которые по сути и рулят всех сигнализацией в Home Assistant.

    Первая автоматизация "снимает с охраны" сигнализацию.

    ####################################################
    #                   АВТОМАТИЗАЦИИ                  #
    ####################################################
    
        automation:
    
        ## всякие уведомления. ТЕСТ режим
        
          # автоматизация при отключении сигнализации
          - id: alarm_disarmed
            alias: alarm_disarmed
            description: Send notification when alarm is Disarmed
            trigger:
              - platform: state
                entity_id: alarm_control_panel.home_alarm
                to: "disarmed"
            action:
              - service: notify.me_group
                data:
                  message: "ALARM! The alarm is Disarmed at {{ now().strftime('%Y-%m-%d %H:%M:%S %Z') }}"
              - service: timer.cancel
                target:
                  entity_id:
                    - timer.alarm_sirena_timer
                    - timer.alarm_sirena_timer_off
              - service: light.turn_off
                data: {}
                target:
                  entity_id:
                    - light.yeelight1
                    - light.yeelight2
                # сменим страничку на wallpanel и включим экран
              - service: fullykiosk.load_url
                data:
                  entity_id: media_player.samsung_galaxy_tab_3_media_player
                  url: http://../lovelace-wallpanel/rooms
              - service: timer.start
                data:
                  duration: "00:03:00"
                target:
                  entity_id: timer.wallpanel_dd_timer
              - type: turn_on
                device_id: 2ed903d
                entity_id: light.samsung_galaxy_tab_3_screen
                domain: light
              - service: switch.turn_on
                data: {}
                target:
                  entity_id:
                    - switch.0x14_switch    # тв
                    - switch.0x15_switch    # WallOutlet Artur Comp 
                    - switch.0x17_switch    # SPlug Term
                    - switch.sonoff_1       # TH16-1
                    - switch.sonoff_2       # TH16-2
              - service: timer.start
                data:
                  duration: "00:03:00"
                target:
                  entity_id: timer.halllight_timer
          


    Это автоматизация отправляет уведомление в Telegram, включает обратно все розетки (которые мы выключаем когда никого нет дома), меняет на настенном планшете у входа страничку опять на обычную (стандартную) страничку, запускает таймер подсветки коридора.


    Что делать если сигнализация сработала (отработали датчики открытия или движения), здесь я только отправлю уведомление о сработке, остальные обработки в другой автоматизации.

          # автоматизация что делать когда сработали датчики сигнализации
          - id: alarm_pending
            alias: alarm_pending
            description: Send notification when alarm is in pending status
            trigger:
              - platform: state
                entity_id: alarm_control_panel.home_alarm
                to: "pending"
            action:
              - service: notify.me_group
                data:
                  message: "ALARM! The alarm is in pending status at {{ now().strftime('%Y-%m-%d %H:%M:%S %Z') }}"



    Что делаем если сигнализация взвелась в режиме armed_away:

    
          # автоматизация что делать когда сигнализация взвелась
          - id: alarm_away_mode
            alias: alarm_away_mode
            description: Send notification when alarm is Armed in Away mode
            trigger:
              - platform: state
                entity_id: alarm_control_panel.home_alarm
                to: "armed_away"
            action:
              - service: notify.me_group
                data:
                  message: "ALARM! The alarm is armed in Away mode {{ now().strftime('%Y-%m-%d %H:%M:%S %Z') }}"
                # сменим страничку на wallpanel и не включим экран
              - if:
                  - condition: and
                    conditions:
                      - condition: state
                        entity_id: timer.alarm_sirena_timer
                        state: idle
                  - condition: state
                    entity_id: timer.alarm_sirena_timer_off
                    state: idle
                then:
                  - service: fullykiosk.load_url
                    data:
                      entity_id: media_player.samsung_galaxy_tab_3_media_player
                      url: http://../lovelace-wallpanel/alarm
              - service: switch.turn_off
                data: {}
                target:
                  entity_id:
                    - switch.0x14_switch    # тв
                    - switch.0x15_switch    # WallOutlet Artur Comp 
                    - switch.0x17_switch    # SPlug Term
                    - switch.sonoff_1       # TH16-1
                    - switch.sonoff_2       # TH16-2
    


    Делаем - переключаем экран на планшете возле выхода на страничку сигнализации и выключаем все розетки.


    Что делаем если сигнализация взвелась в режиме armed_home:

          # автоматизация когда сигнализация взвелась в режиме "мы дома"
          - id: alarm_home_mode
            alias: alarm_home_mode
            description: Send notification when alarm is Armed in Home mode
            trigger:
              - platform: state
                entity_id: alarm_control_panel.home_alarm
                to: "armed_home"
            action:
              - service: notify.me_group
                data:
                  # Using multi-line notation allows for easier quoting
                  message: >
                    ALARM! The alarm is armed in Home mode {{ now().strftime('%Y-%m-%d %H:%M:%S %Z') }}
                # сменим страничку на wallpanel и не включим экран
              - if:
                  - condition: and
                    conditions:
                      - condition: state
                        entity_id: timer.alarm_sirena_timer
                        state: idle
                  - condition: state
                    entity_id: timer.alarm_sirena_timer_off
                    state: idle
                then:
                  - service: fullykiosk.load_url
                    data:
                      entity_id: media_player.samsung_galaxy_tab_3_media_player
                      url: http://../lovelace-wallpanel/alarm
              - service: switch.turn_off
                data: {}
                target:
                  entity_id:
                    - switch.0x14_switch
                    - switch.0x15_switch


    Делаем то же что и в предыдущей автоматизации, но не выключаем все розетки.


    Автоматизация постановки на охрану и снятия с охраны кнопкой aqara:

          # автоматизация снятия/постановки на охрану кнопкой aqara в прихожей          
          - id: alarm_aqara_button_prihozaya
            alias: alarm_aqara_button_prihozaya
            description: Постановка/снятие с охраны кнопкой в прихожей
            trigger:
              - platform: event
                event_type: xiaomi_aqara.click
                event_data:
                  entity_id: binary_sensor.switch_17
                  click_type: single
                id: aqara_prihozaya_single
              - platform: event
                event_data:
                  entity_id: binary_sensor.switch_17
                  click_type: double
                event_type: xiaomi_aqara.click
                id: aqara_prihozaya_double
            condition: []
            action:
              - choose:
                    
                    # to arm away
                  - conditions:
                      - condition: trigger
                        id: aqara_prihozaya_single
                    sequence:
                      - service: script.alarm_on_home_away
                        data: {}
                      - service: xiaomi_aqara.play_ringtone
                        data:
                          gw_mac: gw_mac
                          ringtone_id: '10002'
                          ringtone_vol: 30
                      - service: input_boolean.turn_on
                        data: {}
                        target:
                          entity_id:
                           # - input_boolean.cam2record_enabled
                            - input_boolean.cam3record_enabled
    
                    # to disarm     
                  - conditions:
                      - condition: trigger
                        id: aqara_prihozaya_double
                    sequence:
                      - service: script.alarm_off
                        data: {}
                      - service: light.turn_off
                        data: {}
                        target:
                          entity_id: light.xiaomi_gateway_light
    
    
                default: []
            mode: single


    Одиночное нажатие вызывает скрипт постановки на охрану, двойное нажатие - скрипт снятия с охраны.


    Это наверное самая сложная автоматизация в этом пакете - взведение сигнализации в режим ожидания отключения сигнализации:

            # автоматизация сработки триггера - взвести сигнализацию в режим pending
          - id: alarm_trigger_motion_contact
            alias: alarm_trigger_motion_contact
            description: Сработали триггеры - взвести сигнализацию в pending
            trigger:
                # движение
              - platform: state
                entity_id: 
                  - binary_sensor.motion_sensor_1c # прихожая
                  - binary_sensor.motion_sensor_13 # кухня
    
                to: 'on'
                for:
                  hours: 0
                  minutes: 0
                  seconds: 2
                id: alarm_motion_sensors
                # двери/окна
              - platform: state
                entity_id: 
                  - binary_sensor.door_window_sensor_1b # дверь
                  - binary_sensor.door_window_sensor_1a # Замок нижний
    
                to: 'on'
                for:
                  hours: 0
                  minutes: 0
                  seconds: 2
                id: alarm_contact_sensors
                
            condition: 
              condition: or
              conditions:
              - condition: state
                entity_id: alarm_control_panel.home_alarm
                state: armed_home
              - condition: state
                entity_id: alarm_control_panel.home_alarm
                state: armed_away
            action:
              - choose:
                    
                    # motion trigger
                  - conditions:
                      - condition: trigger
                        id: alarm_motion_sensors
                    sequence:
                      - service: notify.me_group
                        data:
                          title: Security alarm system HA
                          message: |
                            {{"\U0001F6A7"}} {{ now().strftime('%Y-%m-%d %H:%M:%S %Z') }} Движение!
                            
                            {{"\U0001F3C3"}} Датчики движения
                            Прихожая - {{ states('binary_sensor.motion_sensor_1c') }}.   {{ states.binary_sensor.motion_sensor_1c.last_changed.timestamp() | timestamp_custom('%A %d %h %H:%M') }}
                            Кухня - {{ states('binary_sensor.motion_sensor_13') }}.   {{ states.binary_sensor.motion_sensor_13.last_changed.timestamp() | timestamp_custom('%A %d %h %H:%M') }}
                             
                            Состояние Alarm system - {{ states('alarm_control_panel.home_alarm') }}
    
                      - service: alarm_control_panel.alarm_trigger
                        data:
                          entity_id: alarm_control_panel.home_alarm
                    #   - service: script.alarm_light_on
                    #     data: {}
                      - if:
                          - condition: and
                            conditions:
                              - condition: state
                                entity_id: timer.alarm_sirena_timer
                                state: idle
                          - condition: state
                            entity_id: timer.alarm_sirena_timer_off
                            state: idle
                        then:
                        #   - delay:
                        #       hours: 0
                        #       minutes: 0
                        #       seconds: 10
                        #       milliseconds: 0
                          - service: light.turn_on
                            data:
                              brightness: 205
                              flash: long
                              rgb_color:
                                - 255
                                - 0
                                - 0
                            target:
                              entity_id: light.xiaomi_gateway_light
                          - service: timer.start
                            target:
                              entity_id:
                                - timer.alarm_sirena_timer
                                - timer.alarm_sirena_timer_off
                          - service: timer.start
                            data:
                              duration: "00:03:00"
                            target:
                              entity_id: timer.wallpanel_dd_timer
                          - service: script.alarm_light_on
                            data: {}
                          - type: turn_on
                            device_id: b3d
                            entity_id: light.samsung_galaxy_tab_3_screen
                            domain: light
                          
                    # contact trigger     
                  - conditions:
                      - condition: trigger
                        id: alarm_contact_sensors
                    sequence:
                      - service: notify.me_group
                        data:
                          title: Security alarm system HA
                          message: |
                            {{"\U0001F6A7"}} {{ now().strftime('%Y-%m-%d %H:%M:%S %Z') }} Двери или окна!
                            
                            {{"\U0001F6AA"}} Датчики дверей/окон
                            Дверь - {% if is_state("binary_sensor.door_window_sensor_1b", "off") -%}
                            закрыта. 
                            {%- else -%}
                            открыта. 
                            {%- endif %}  {{ states.binary_sensor.door_window_sensor_1b.last_updated.timestamp() | timestamp_custom('%A %d %h %H:%M') }}
                             
                            Состояние Alarm system - {{ states('alarm_control_panel.home_alarm') }}
    
                      - service: alarm_control_panel.alarm_trigger
                        data:
                          entity_id: alarm_control_panel.home_alarm
    
                      - if:
                          - condition: and
                            conditions:
                              - condition: state
                                entity_id: timer.alarm_sirena_timer
                                state: idle
                          - condition: state
                            entity_id: timer.alarm_sirena_timer_off
                            state: idle
                        then:
                          - delay:
                              hours: 0
                              minutes: 0
                              seconds: 10
                              milliseconds: 0
                          - service: light.turn_on
                            data:
                              brightness: 205
                              flash: long
                              rgb_color:
                                - 255
                                - 0
                                - 0
                            target:
                              entity_id: light.xiaomi_gateway_light
                          - service: timer.start
                            target:
                              entity_id:
                                - timer.alarm_sirena_timer
                                - timer.alarm_sirena_timer_off
                          - service: timer.start
                            data:
                              duration: "00:03:00"
                            target:
                              entity_id: timer.wallpanel_dd_timer
                          - service: script.alarm_light_on
                            data: {}
                          - type: turn_on
                            device_id: bd
                            entity_id: light.samsung_galaxy_tab_3_screen
                            domain: light
    
                default: []
    
            mode: single


    По сути переводим панель alarm в статус pending и отправляем уведомление в телегу что именно сработало, запускаем таймеры сирены и таймер отключения сирены через 10 минут.


    Автоматизация которая через 10 минут отключает сирену:

            # автоматизация сигнализация не отключена за время pending - ТРЕВОГА
          - id: alarm_sirena_after_trigger
            alias: alarm_sirena_after_trigger
            description: автоматизация сигнализация не отключена за время pending - ТРЕВОГА
            trigger:
                # отработка таймера включения сирены
              - platform: event
                event_type: timer.finished
                event_data:
                  entity_id: timer.alarm_sirena_timer
                id: alarm_sirena_timer_finished
                # отработка таймера выключения сирены
              - platform: event
                event_type: timer.finished
                event_data:
                  entity_id: timer.alarm_sirena_timer_off
                id: alarm_sirena_timer_off_finished
                
            condition: []
            action:
              - choose:
                    
                    # включаем сирену
                  - conditions:
                      - condition: trigger
                        id: alarm_sirena_timer_finished
                    sequence:
                      - service: notify.me_group
                        data:
                          title: Security alarm system HA
                          message: |
                            {{"\U0001F6A7"}} {{ now().strftime('%Y-%m-%d %H:%M:%S %Z') }} 
                            Прошла минута сигнализация не выключена..
                            
                            Включаю сирену!
                            
                            Состояние Alarm system - {{ states('alarm_control_panel.home_alarm') }}
                    
                      - service: xiaomi_aqara.play_ringtone
                        data:
                          gw_mac: gw_mac
                          ringtone_id: '0'
                          ringtone_vol: 100
    
                    # выключаем сирену если за 10 минут сигнализация не отключена и сирена все еще воет
                  - conditions:
                      - condition: trigger
                        id: alarm_sirena_timer_off_finished
                    sequence:
                      - service: notify.me_group
                        data:
                          title: Security alarm system HA
                          message: |
                            {{"\U0001F6A7"}} {{ now().strftime('%Y-%m-%d %H:%M:%S %Z') }} 
                            Прошлао 10 минут сигнализация ВСЕ ЕЩЕ не выключена..
                            
                            Отключаю сирену сирену! Бедные соседи!
                            
                            Состояние Alarm system - {{ states('alarm_control_panel.home_alarm') }}
    
                      - service: light.turn_off
                        data: {}
                        target:
                          entity_id:
                            - light.yeelight_1
                            - light.yeelight_2
                            - light.xiaomi_gateway_light
                      - service: timer.cancel
                        target:
                          entity_id:
                            - timer.alarm_sirena_timer
                            - timer.alarm_sirena_timer_off
    
                default: []
            mode: single
    


    Эта автоматизация сделана специально - иногда когда никого нет дома, срабатывает датчик движения на кота, сигнализация сначала переводится в режим Pending - минуту ждет отключения сигнализации, если это не произошло, то включается сирена и мигание шлюзом и цветными лампочками, но т.к. никто домой не пришел, вся это свисто-пляска будет продолжаться до момента прихода кого-нибудь домой, того кто отключит сигнализацию. Поэтому я сделал так, что если это "ложное срабатывание", то сигнализация переводится в предыдущий режим охраны через десять минут.


    Чтобы понять логику работы сигнализации в НА я использовал статью Creating a Home Alarm System with Home Assistan. Scott Helme. Правда пришлось переработать все практически полностью, но эта статья дает хорошее понимание как работает штатная control alarm в Home Assistant.

     
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Чтобы Вам были доступны все функции Вам необходимо либо зарегистрироваться, либо зайти на сайт под своим именем.

    Другие новости по теме:

  • Уведомление о резком скачке температуры или влажности с помощью сенсора Tre ...
  • Уведомление в Телеграм если какой-то из сенсоров Home Assistant перешел в с ...
  • Управялем яркостью диммера Noolite из Home Assistant
  • Ночник с выбором времени горения в карточке Lovelace в Home Assistant
  • Автоматизация "Все ушли из дома" в Home Assistant


  • Комментарии:

    Оставить комментарий



     
    Информация
     
    Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


    Поиск по сайту:


    Облако тегов
    Arduino, backup, CentOS, cmd, css, DLE, DLE хаки, domoticz, dzvents, Home Assistant, HomeAssistant, Linux, log, LUA, Monster, mqtt, ogf3, Template, VBS, w2k8, windows, WSH, xiaomi, бумага, бумажный самолетик, бэкап, иструкция, Карты, кино, Навигация, оригами, программа, рецензия, рецепт, скрипт, фигуры, шаблон, Яндекс, яндекс-карты

    Показать все теги
    Реклама
    Главная страница | Регистрация | Добавить новость | Новое на сайте | Статистика | Поддержка | Правила ресурса Copyright © 2005-2021 by dimon - all right reserved!
    Тираж:           экземпляров.   Дизайн, верстка by dimon