Я бы хотел пару статей посвятить охране дома. Нет, речь не об оружии. Пока 🙃
В этой статье я расскажу как установить motionEye и интегрировать камеру видеонаблюдения в качестве «датчика движения» в Home Assistant. А следующая статья будет про настройку сигнализации (Alarm Control Panel).
Почему именно motionEye и что это такое?
motionEye это интерфейс к Motion, а Motion это система видеонаблюдения с функцией распознаванием движения.
Похожих систем достаточно много, например Shinobi. Shinobi помимо прочего умеет распознавать объекты в кадре: движущихся животных, людей, проезжающие мимо грузовики, автомобили и т.д. Но зачем? 🙂
Еще можно было бы использовать ZoneMinder, но установка и настройка мне показалась излишне сложной.
В итоге я положил глаз на motionEye (оп, каламбурчик).
Камера видеонаблюдения
Я использую Tp-Link Tapo C100. Хорошая, недорогая камера, а самое главное — эта камера поддерживает стриминг по протоколу RTSP. И motionEye тоже поддерживает RTSP — кажется, это судьба.
А еще эта камера отдает 2 потока: в низком и высоком разрешении. В дальнейшем мы этим воспользуемся и настроим сохранение видео в высоком качестве, а для распознавания движения будет использоваться видеопоток в низком качестве (чтобы не нагружать систему).
Я не буду здесь описывать, как включить 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:
На Fedora еще нужно выполнить:
Первый вход
После установки переходим в веб-панель управления (слушает на 8765 порту). В motionEye есть разграничение по пользователям, их два: admin и user. Оба пользователя изначально не имеют пароля, поэтому первым делом заходим под админом и устанавливаем эти самые пароли.
Добавление камеры и ее настройка
После смены пароля нужно авторизоваться повторно и motionEye предложит добавить первую камеру. Если ваша камера отдает два потока (в высоком и низком разрешении), то указать нужно URL потока с низким разрешением. В моем случае это rtsp://tapo-hall-camera.lan/stream2
. Предварительно можно «скормить» URL в VLC, чтобы проверить, работает ли камера вообще 🙂
Еще нужно определиться между TCP и UDP. Я использую UDP, так как по TCP со временем накапливается задержка. В теории по UDP могут появляться артефакты, которые Motion будет воспринимать как движение, но лично у меня таких проблем не возникало.
После в настройках необходимо выставить разрешение камеры (у меня изначально были неправильные пропорции) и прописать дополнительные параметры.
Через дополнительные параметры зададим URL потока в высоком разрешении:
netcam_high_url rtsp://tapo-hall-camera.lan/stream1
netcam_high_params rtsp_transport = udp
Далее включаем запись клипов. У меня настроено сохранение клипов только когда Motion регистрирует движение. Видеопоток будет скачиваться по ссылке, которую мы только что указали (netcam_high_url
) и сохраняться на диск.
Я так же включил Прямую копию видео (movie_passthrough
), чтобы видео сохранялись без постобработки и в оригинальном качестве. Хотя на время отладки этот параметр можно выключить.
Еще придется «поиграться» с настройками обнаружения движения. Приведу свои параметры ниже, но тут нужно подгонять индивидуально.
Единственное порекомендую включить Показ изменений кадра — очень поможет для первоначальной отладки.
Интеграция с 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
Не забудьте подставить свой webhook_id
в URL вместо hall-camera-motion-fVYQM4
. Так же если Home Asssitant и motionEye запущены на разных хостах, то вместо localhost:8123
нужно вписать актуальное значение.
После перезапуска 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 минут неактивности.
Автоматизация освещения это всего лишь один из примеров использования, причем не самый лучший. Поэтому в следующей статье я расскажу про то, как настроить простую сигнализацию и «прикрутить» к ней камеру.
Бонус: добавление камеры в Lovelace
Изображение с камеры так же можно вывести в панели управления Home Assistant:
Сделать это можно добавив новую интеграцию — MJPEG IP Camera:
Нужные параметры камеры есть в настройках motionEye. В нашем случае потребуется скопировать URL потока и URL снимка (статичного изображения):
После сохранения настроек новой интеграции остается только добавить карточку:
Послесловие
Так получилось что видеонаблюдение это то, с чего я начал знакомство с Home Assistant. Мне нужно было уехать из дома на какое-то время и я побоялся оставлять квартиру без присмотра. Поэтому была куплена камера от Xiaomi, которую я изначально использовал с приложением Mi Home. Причем приложение у меня уже и так было установлено для ночника от той же Xiaomi.
Но мне никогда не нравились облачные решения — я не хочу чтобы у кого-то кроме меня был доступ к моему умному дому. Так я в итоге перешел на Home Assistant и интегрировал имеющиеся девайсы туда. Не удалось только нормально подключить Bluetooth-розетки от Redmond — с ними пришлось попрощаться 😢
Позже я «прикрутил» к Home Assistant отслеживание местоположения. В изначальном варианте умный дом просто отправлял моей маме уведомления о том, где я сейчас нахожусь, чтобы она не волновалась 🙂
Позже я приобрел Zigbee адаптер и несколько Zigbee устройств, настроил простую сигнализацию, автоматизировал освещение, настроил интеграцию с будильником и в целом продолжил расширять умный дом.
Зачем я все это рассказываю? Следующие несколько статей про умный дом я бы хотел посвятить основам и рассказать про первые шаги, с которых я сам начинал. Надеюсь будет интересно 🙂