Доработка оповещений в Telegtam со snapshot камер слежения

17 октября 2020, 09:42

Предыстория. Приобрел я комплект видеонаблюдения Reolink. Несколько камер и NVR. Добавление в Home assistant не составило особого труда, используя стандартную интеграцию, даже при условии, что камеры имели внутренний IP рекордера. Для каждой камеры код имел следующий вид:

camera:
- platform: generic
  name: camera_fram
  still_image_url: "http://192.168.1.XXX/cgi-bin/api.cgi?cmd=Snap&channel=X&rs=95270001DWZS2M8Y&user=user&password=password"
  stream_source: "rtsp://user:password@192.168.1.XXX:554//h264Preview_X_sub"

Однако пользуюсь я кастомным компонентом Reolink IP camera. Кроме самих камер, он позволяет добавить датчики движения на основе обнаружения движения моими камерами. В описании компонента все это есть.

Встал вопрос, как это можно использовать. Сразу захотелось, чтобы ХА присылал оповещение об активности в зоне видеонаблюдения в Telegram. Ну и соответственно прикреплял картинку с камеры. Я хотел именно картинку. Видео я могу посмотреть подключившись к NVR. Но тут возникло две проблемы.
Первая: вопрос с "мусором", на который срабатывает камера. Опадающая листва, свет фар, пролетающая птичка и многое другое приводят к активации сенсора.
Вторая: Сервис camera.snapshot: оказался совершенно непригодным для этих целей, поскольку у него была задержка как и у видеопотока от 5 до 10 секунд.

Я подумал, что все очень просто и с первой проблемой справится условие, что сенсор активен в течение определенного времени, а со второй - прямая ссылка still_image_url:  для каждой  камеры (поскольку задержка в этом случае менее секунды). 
Ну и для каждой камеры при выполнении условия, что ДД активен более ХХ секунд будет такой action:

 - service: notify.telegram_stephan
   data:
     message: "Обнаружено движение вблизи дома."
     data:
       photo:
       - url: http://192.168.1.243/cgi-bin/api.cgi?cmd=Snap&channel=2 &rs=95270001DWZS2M8Y&user=user&password=password
         caption: "Кажется, к нам гости."

Но оказалось, что это абсолютно бесполезная автоматизация, поскольку в 99% срабатываний я получал картинку без признаков движения. Все логично, ведь снимок с камеры делался после ХХ секунд активности сенсора. А с учетом задержки, еще больше. К тому времени все уже "уходило". 

Задача: Как только камера обнаруживает движение она делает снимок, а если движение продолжается более ХХ секунд, то в Telegram приходит именно этот снимок, сделанный ХХ секунд назад.

Решение: Поскольку хотелось сократить код до минимума (камер много, а будет еще больше), то пришлось проделать небольшие предварительные манипуляции с бинарниками (теми, которые ДД с камер).
В каждый бинарник а добавил attribute_templates: , в котором указана ссылка на статичную картинку с камеры (не мудрствовал и сделал аналогично первому примеру)

- platform: template
  sensors:
    motion_cam_1:
      friendly_name: Camera 1 motion
      device_class: motion
      value_template: "{{ is_state('camera.camera_1', 'motion') }}"
      attribute_templates:
        still_image_url: "http://192.168.1.ХХХ/cgi-bin/api.cgi?cmd=Snap&channel=1&rs=95270001DWZS2M8Y&user=user&password=password" 
      delay_off: 
        seconds: 1

Для каждой камеры делается свой URL. У меня NVR, поэтому меняется только channel=. Если камеры подключены напрямую, то будет меняться IP. Смотрите сами.

Теперь, для сохранения картинок я использовал сервис downloader.download_file
Если такого нет, то нужно в configuration.yaml  добавить:

downloader:
  download_dir: www/downloads

Теперь можно перегружаться и делать автоматизации. Их всего две.  Первая делает быстрый snapshot, вторая отсылает его при выполнении условия (условия на ваше усмотрение)

- alias: 'Camera alarm snapshot'
  trigger:
    - platform: state
      entity_id: 
        - binary_sensor.motion_cam_1
        - binary_sensor.motion_cam_2
        - binary_sensor.motion_cam_3
        - binary_sensor.motion_cam_4
      from: 'off'
      to: 'on'
  action:
    - service: downloader.download_file
      data_template:
        url: "{{ trigger.to_state.attributes.still_image_url }}"
        filename: '{{trigger.to_state.object_id}}.jpg'
        overwrite: true
- alias: 'Camera_alarm' 
  trigger:
    - platform: state
      entity_id:
        - binary_sensor.motion_cam_1
        - binary_sensor.motion_cam_2
        - binary_sensor.motion_cam_3
        - binary_sensor.motion_cam_4
      to: 'on'
      for: "00:00:07"
  condition:
     - condition: state
       entity_id: group.family
       state: 'not_home'
  action:
    - service: notify.telegram_stephan
      data:
        message: "Обнаружено движение вблизи дома."
        data:
          photo:
            - file: /config/www/downloads/{{trigger.to_state.object_id}}.jpg
              caption: "Кажется, к нам гости."

После этого, количество ложных срабатываний снизилось до 1%.  
Насколько я знаю, у камер других производителей тоже есть возможность подключения ДД в Home assistant. Надеюсь, это кому то поможет.


Все новости мира умных домов - t.me/SprutAI_News или Instagram
Остались вопросы? Мы в Telegram - @SprutAI

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. (chex01)
    (chex01) день назад

    Жаль модель "E1 Pro" не поддерживается :(

    • Stephan Fonderat (Fonderat)
      Stephan Fonderat (Fonderat) отредактировано день назад

      Да, компонент не поддерживает Е1 и Е1pro (подключённые напрямую), поскольку на них нельзя зайти через браузер. У меня все камеры подключены к NVR. А через него компонент видит и Е1 pro и даже Е1. 

К списку блогов

Похожие записи

12 сентября 2020, 20:51
Создание при помощи бесплатной программы Sweet Home 3D интерактивного плана помещения для Home Assistant.
13 февраля 2019, 22:00
Подключение радио на Xiaomi Gateway к Home Assistant c дальнейшим использованием в автоматизациях
16 июля 2020, 15:13
Удобная настройка Home Assistant с помощью packages.
19 апреля 2019, 20:53
Требуется ваше мнение!
06 февраля 2019, 12:02
Автоматизированное открытие/закрытие окна
04 апреля 2019, 12:45
Самое важное из апдейта Home Assistant 0.91-0.91.4 от 03.04.19.
21 марта 2019, 11:59
Самое важное из апдейта Home Assistant 0.9 от 20.03.19.
21 февраля 2019, 21:12
Самое важное из апдейта Home Assistant 0.88 от 20.02.19.
19 января 2019, 20:49
Делюсь новостями по проекту.