Видеонаблюдение для умного дома с motionEye

Видеонаблюдение для умного дома с motionEye
Tobias Tullius / Unsplash

Я бы хотел пару статей посвятить охране дома. Нет, речь не об оружии. Пока 🙃

В этой статье я расскажу как установить motionEye и интегрировать камеру видеонаблюдения в качестве «датчика движения» в Home Assistant. А следующая статья будет про настройку сигнализации (Alarm Control Panel).

Почему именно motionEye и что это такое?

motionEye это интерфейс к Motion, а Motion это система видеонаблюдения с функцией распознаванием движения.

Интерфейс motionEye

Похожих систем достаточно много, например Shinobi. Shinobi помимо прочего умеет распознавать объекты в кадре: движущихся животных, людей, проезжающие мимо грузовики, автомобили и т.д. Но зачем? 🙂

Еще можно было бы использовать ZoneMinder, но установка и настройка мне показалась излишне сложной.

В итоге я положил глаз на motionEye (оп, каламбурчик).

Камера видеонаблюдения

Я использую Tp-Link Tapo C100. Хорошая, недорогая камера, а самое главное — эта камера поддерживает стриминг по протоколу RTSP. И motionEye тоже поддерживает RTSP — кажется, это судьба.

А еще эта камера отдает 2 потока: в низком и высоком разрешении. В дальнейшем мы этим воспользуемся и настроим сохранение видео в высоком качестве, а для распознавания движения будет использоваться видеопоток в низком качестве (чтобы не нагружать систему).

Tp-Link Tapo C100 V1
Официальный сайт.

Я не буду здесь описывать, как включить RTSP на камерах от Tp-Link. Во-первых, на сайте производителя уже есть подробная инструкция, а во-вторых Motion работает с любыми камерами поддерживающими MJPG, RTSP, RTMP и даже с вебкамерами (по v4l2), поэтому настройка будет разной в зависимости от производителя.

2 способа установки motionEye

Если вы используете Home Assistant Supervised, то здесь все очень просто — достаточно установить аддон motionEye из стора.

Но процесс установки не сильно сложнее в случае обычного Home Assistant Core или если Home Assistant не используется вообще.

Установка motionEye вручную

На момент написания статьи версия на Python 3 пока еще находится в стадии разработки, тем не менее ставить мы будем именно ее.

Сперва нужно установить требуемые зависимости. Для Ubuntu/Debian инструкция есть в README, но продублирую здесь:

# apt install ca-certificates curl python3 python3-dev libcurl4-openssl-dev gcc libssl-dev python3-pip

Для Fedora сначала нужно добавить репозиторий RPM Fusion, а затем установить зависимости:

# dnf install --nogpgcheck http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
# dnf install motion ffmpeg python3-pip python3-devel gcc libcurl-devel pango-devel openssl-devel

После ставим и инициализируем motionEye:

# python3 -m pip install --pre motioneye
# motioneye_init

Под рутом (sudo).

На Fedora еще нужно выполнить:

# chown motion:video -R /etc/motioneye

Если возникнут проблемы с правами доступа.

Первый вход

После установки переходим в веб-панель управления (слушает на 8765 порту). В motionEye есть разграничение по пользователям, их два: admin и user. Оба пользователя изначально не имеют пароля, поэтому первым делом заходим под админом и устанавливаем эти самые пароли.

Добавление камеры и ее настройка

После смены пароля нужно авторизоваться повторно и motionEye предложит добавить первую камеру. Если ваша камера отдает два потока (в высоком и низком разрешении), то указать нужно URL потока с низким разрешением. В моем случае это rtsp://tapo-hall-camera.lan/stream2. Предварительно можно «скормить» URL в VLC, чтобы проверить, работает ли камера вообще 🙂

Еще нужно определиться между TCP и UDP. Я использую UDP, так как по TCP со временем накапливается задержка. В теории по UDP могут появляться артефакты, которые Motion будет воспринимать как движение, но лично у меня таких проблем не возникало.

Добавление камеры в motionEye

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

Настройки камеры в motionEye

Через дополнительные параметры зададим URL потока в высоком разрешении:

netcam_high_url rtsp://tapo-hall-camera.lan/stream1
netcam_high_params rtsp_transport = udp

Далее включаем запись клипов. У меня настроено сохранение клипов только когда Motion регистрирует движение. Видеопоток будет скачиваться по ссылке, которую мы только что указали (netcam_high_url) и сохраняться на диск.

Я так же включил Прямую копию видео (movie_passthrough), чтобы видео сохранялись без постобработки и в оригинальном качестве. Хотя на время отладки этот параметр можно выключить.

Настройки записи видео в motionEye

Еще придется «поиграться» с настройками обнаружения движения. Приведу свои параметры ниже, но тут нужно подгонять индивидуально.

Настройки обнаружения в motionEye

Единственное порекомендую включить Показ изменений кадра — очень поможет для первоначальной отладки.

Интеграция с Home Assistant

Home Asssitant из коробки поддерживает интеграцию с motionEye. Мне хотелось сделать так, чтобы умный дом реагировал на движение в прихожей и автоматически включал/выключал свет, а так же тригерил сигнализацию. То есть чтобы камера работала как датчик движения. Но оказалось что эта интеграция так не умеет 😕 Поэтому я сделал по-своему.

Датчик движения из камеры

Чтобы связать motionEye и Home Assistant можно воспользоваться вебхуками. В нашем случае нужно чтобы motionEye дергал вебхук в Home Assistant, когда зарегистрировано движение.

Но для начала настроим Home Assistant и добавим этот самый вебхук в configuration.yaml. Точнее добавим binary sensor, который будет хранить переданное в вебхук значение.

template:
  - trigger:
      platform: webhook
      webhook_id: "hall-camera-motion-fVYQM4"
      local_only: true
    binary_sensor:
      - name: "Hall camera motion"
        state: "{{ trigger.json.motion }}"
        device_class: motion

Так как вебхуки могут быть доступны извне, то к webhook_id нужно относиться как к паролю. Поэтому я добавил несколько случайных символов в конце ID.

Дальше остается только прописать этот вебхук в настройках motionEye:

  • Начало движения: http://localhost:8123/api/webhook/hall-camera-motion-fVYQM4?motion=on
  • Конец: http://localhost:8123/api/webhook/hall-camera-motion-fVYQM4?motion=off
Настройки вебхуков в motionEye

Не забудьте подставить свой webhook_id в URL вместо hall-camera-motion-fVYQM4. Так же если Home Asssitant и motionEye запущены на разных хостах, то вместо localhost:8123 нужно вписать актуальное значение.

После перезапуска Home Assistant появится новый «датчик движения»:

Датчик движения в Home Assistant

Который можно использовать как-то так:

automation:
  - id: function_hall_lights_on_motion
    alias: 'Turn on hall lights when motion detected'
    trigger:
      platform: state
      entity_id: binary_sensor.hall_camera_motion
      to: 'on'
    action:
      service: light.turn_off
      data:
        entity_id: light.hall_lamp
          
  - id: function_hall_lights_off_motion
    alias: 'Turn off hall lights after the period of inactivity'
    trigger:
      platform: state
      entity_id: binary_sensor.hall_camera_motion
      to: 'off'
      for:
        minutes: 10
    action:
      service: light.turn_off
      data:
        entity_id: light.hall_lamp
        transition: 8

То есть light.hall_lamp будет включаться по движению и выключаться через 10 минут неактивности.

panel_iframe: встраиваем motionEye и другие сайты в Home Assistant
Описание panel_iframe и примеры встраивания motionEye, HASS Configurator и прочих веб-сайтов и панелей управления в Home Assistant.

Автоматизация освещения это всего лишь один из примеров использования, причем не самый лучший. Поэтому в следующей статье я расскажу про то, как настроить простую сигнализацию и «прикрутить» к ней камеру.

man smart-home
Telegram про умный дом: идеи, девайсы, Home Assistant.

Оповещения о новых статьях я публикую в Telegram.

Бонус: добавление камеры в Lovelace

Изображение с камеры так же можно вывести в панели управления Home Assistant:

Карточка камеры в Home Assistant — Picture Entity

Сделать это можно добавив новую интеграцию — MJPEG IP Camera:

Добавление камеры видеонаблюдения в Home Asssitant

Нужные параметры камеры есть в настройках motionEye. В нашем случае потребуется скопировать URL потока и URL снимка (статичного изображения):

Ссылки на видеопоток в motionEye

После сохранения настроек новой интеграции остается только добавить карточку:

0:00
/0:17

Послесловие

Так получилось что видеонаблюдение это то, с чего я начал знакомство с Home Assistant. Мне нужно было уехать из дома на какое-то время и я побоялся оставлять квартиру без присмотра. Поэтому была куплена камера от Xiaomi, которую я изначально использовал с приложением Mi Home. Причем приложение у меня уже и так было установлено для ночника от той же Xiaomi.

Но мне никогда не нравились облачные решения — я не хочу чтобы у кого-то кроме меня был доступ к моему умному дому. Так я в итоге перешел на Home Assistant и интегрировал имеющиеся девайсы туда. Не удалось только нормально подключить Bluetooth-розетки от Redmond — с ними пришлось попрощаться 😢

Позже я «прикрутил» к Home Assistant отслеживание местоположения. В изначальном варианте умный дом просто отправлял моей маме уведомления о том, где я сейчас нахожусь, чтобы она не волновалась 🙂

«Мама, я в порядке»
«Мама, я в порядке»
Простое отслеживание местоположения в Home Assistant
Используя информацию о подключенном WiFi.

Позже я приобрел Zigbee адаптер и несколько Zigbee устройств, настроил простую сигнализацию, автоматизировал освещение, настроил интеграцию с будильником и в целом продолжил расширять умный дом.

Зачем я все это рассказываю? Следующие несколько статей про умный дом я бы хотел посвятить основам и рассказать про первые шаги, с которых я сам начинал. Надеюсь будет интересно 🙂

man smart-home
Telegram про умный дом: идеи, девайсы, Home Assistant.

Оповещения о новых статьях я публикую в Telegram.

Была ли статья полезна?

Хотите сказать спасибо? Кофе автору — ваша благодарность.

На кофе
Подписка на новые статьи

Уведомления, как только в блоге появится что-нибудь интересненькое.

Подписываясь, вы даете согласие на обработку персональных данных.