Статья

Преобразование квартирного домофона в IP камеру видеонаблюдения

В моей квартире установлен аналоговый домофон Визит, вызывная панель которого оснащена камерой. Этот домофон не современный, а координатный - аналоговый и ему больше 10 лет.

В статье разбираюсь, что нужно для того, чтобы получать видеопоток с камеры домофона в режиме реального времени в RTSP формат и затем управлять этой камерой в системе видеонаблюдения и умном доме.

Физическое подключение к камере домофона

Для физического подключения понадобится:

1. Самая дешевая USB карта видеозахвата EasyCAP (HD).

USB карта видеозахвата, подключенная к Orange Pi Zero 512Mb

2. Разъем питания DC для камер видеонаблюдения.

Разъем питания DC

3. Вывод витой пары подключенной параллельно входу камеры в блок домофона.

Две камеры - два выхода

Программное подключение к камере домофона

Я решил использовать проект Go2RTC от AlexxIT, установив его на старый Orange Pi Zero 512Mb.

Шаг 1. Установил и подготовил систему

Используя BalenaEtcher записал на карту памяти Armbian - это дистрибутив Linux, разработанный специально для одноплатных компьютеров на базе процессоров ARM.

Далее по инструкции вошёл в систему как root.

bash
Копировать
Welcome to Armbian_community!

Documentation: https://docs.armbian.com | Community support: https://community.armbian.com/

IP address: 192.168.165.117

Create root password: ********************
Repeat root password: ********************

WARNING!

You are using an automated build meant only for developers to provide
constructive feedback to improve build system, OS settings or UX.

If this does not apply to you, STOP NOW! Especially don't use this
image for production since things might not work as expected or at
all. They may break anytime with next update.

Shell: BASH

root@orangepizero:~#

Потом обновил систему:

bash
Копировать
root@orangepizero:~# sudo apt update && sudo apt upgrade -y

Установил необходимые зависимости: поскольку используется USB-устройство захвата видео, необходимо установить некоторые инструменты, связанные с мультимедиа и видео, такие как ffmpeg, которые Go2RTC может использовать для обработки видеопотоков.

bash
Копировать
root@orangepizero:~# sudo apt install ffmpeg v4l-utils -y
  • ffmpeg: необходим для кодирования/декодирования видео.
  • v4l-utils: содержит инструменты для взаимодействия с устройством видеозахвата.

Проверил USB-устройство захвата подключил USB-карту видеозахвата EasyCAP и убедился, что она распознается системой:

bash
Копировать
root@orangepizero:~# ls /dev/video*/dev/video0/dev/video1

В ответе было что-то вроде /dev/video0. Это означает, что устройство обнаружено.

Дополнительно посмотрел доступные форматы:

bash
Копировать
root@orangepizero:~# ffmpeg -list_formats all -i /dev/video0
ffmpeg version 5.1.6-0+deb12u1 Copyright (c) 2000-2024 the FFmpeg developers
built with gcc 12 (Debian 12.2.0-14)
configuration: --prefix=/usr --extra-version=0+deb12u1 --toolchain=hardened --libdir=/usr/lib/arm-linux-gnueabihf --incdir=/usr/include/arm-linux-gnueabihf --arch=arml --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libble-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libjack --ename --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enableenable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enab --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enablnable-opencl --enable-opengl --enable-sdl2 --disable-sndio --enable-libjxl --enable-pocketsphinx --enable-librsvg --enable-libdc1394 --enable-libdrm --enable-libiec6188hromaprint --enable-frei0r --enable-libx264 --enable-libplacebo --enable-librav1e --enable-shared
libavutil 57. 28.100 / 57. 28.100
libavcodec 59. 37.100 / 59. 37.100
libavformat 59. 27.100 / 59. 27.100
libavdevice 59. 7.100 / 59. 7.100
libavfilter 8. 44.100 / 8. 44.100
libswscale 6. 7.100 / 6. 7.100
libswresample 4. 7.100 / 4. 7.100
libpostproc 56. 6.100 / 56. 6.100
[video4linux2,v4l2 @ 0xe16470] Compressed: mjpeg : Motion-JPEG : 480x320 640x480 720x480
[video4linux2,v4l2 @ 0xe16470] Raw : yuyv422 : YUYV 4:2:2 : 480x320
/dev/video0: Immediate exit requested

Шаг 2. Установил Go2RTC

Загрузил готовый бинарный файл для моей архитектуры ARMv6:

bash
Копировать
root@orangepizero:~# wget https://github.com/AlexxIT/go2rtc/releases/download/v1.9.4/go2rtc_linux_armv6
root@orangepizero:~# chmod +x go2rtc_linux_armv6

Переместил бинарный файл в нужное место в моём PATH, /usr/local/bin:

bash
Копировать
root@orangepizero:~# sudo mv go2rtc_linux_armv6 /usr/local/bin/go2rtc

Шаг 3. Настроил Go2RTC

Создал каталог конфигурации, переключившись на самого себя - пользователя, которого я создал:

bash
Копировать
root@orangepizero:~# su -l mikemike@orangepizero:~$mkdir-p ~/.config/go2rtc

Создал файл конфигурации go2rtc.yaml, указав USB-устройство видеозахвата в качестве источника входного сигнала:

bash
Копировать
mike@orangepizero:~# nano ~/.config/go2rtc/go2rtc.yaml

Простая конфигурация для захвата видео с USB-устройства и его потоковой передачи:

yaml
Копировать
streams:  usb_camera: ffmpeg:device?video=0&video_size=1280x720#video=h264

А это памятка для самого себя - чтобы сохранить и выйти из редактора nano в Linux, выполните следующие шаги:

  1. Нажмите сочетание клавиш Ctrl + X. Это приведет к выводу сообщения "Save modified buffer (y/n/a/q/K)?".
  2. Нажмите Y для сохранения изменений.
  3. Нажмите Enter для подтверждения выбора.
  4. Введите имя файла, если вы хотите сохранить его под другим именем, или просто нажмите Enter, чтобы сохранить файл под текущим именем.
  5. Нажмите Enter еще раз для подтверждения.
  6. Нажмите Enter, чтобы закрыть редактор nano.

Проверил конфигурацию, для этого вручную запустил двоичный файл Go2RTC с указанной конфигурацией, чтобы проверить, всё ли работает правильно:

bash
Копировать
mike@orangepizero:~# go2rtc -config ~/.config/go2rtc/go2rtc.yaml
18:14:23.751 INF go2rtc platform=linux/arm revision=a4885c2 version=1.9.4
18:14:23.752 INF config path=/root/.config/go2rtc/go2rtc.yaml
18:14:23.755 INF [rtsp] listen addr=:8554
18:14:23.755 INF [api] listen addr=:1984
18:14:23.757 INF [webrtc] listen addr=:8555/tcp
Все настройки можно делать через браузер

Шаг 4. Настроил в качестве службы Systemd

Чтобы обеспечить автоматический запуск Go2RTC при загрузке, создал служебный файл systemd:

bash
Копировать
mike@orangepizero:~$ sudo nano /etc/systemd/system/go2rtc.service
[sudo] пароль для mike:

Добавил следующее содержимое для моего имени пользователя - mike:

bash
Копировать
[Unit]
Description=Go2RTC Service
After=network.target

[Service]
ExecStart=/usr/local/bin/go2rtc -config /home/mike/.config/go2rtc/go2rtc.yaml
Restart=always
User=mike

[Install]
WantedBy=multi-user.target

Запустил и включил службу:

bash
Копировать
mike@orangepizero:~$ sudo systemctl daemon-reload
mike@orangepizero:~$ sudo systemctl enable go2rtc.service
Created symlink /etc/systemd/system/multi-user.target.wants/go2rtc.service → /etc/systemd/system/go2rtc.service.
mike@orangepizero:~$ sudo systemctl start go2rtc.service

Шаг 5. Проверил потоковую передачу

bash
Копировать
login as: mike
mike@192.168.165.117's password:
___ ____ _ _____
/ _ \| _ \(_) |__ /___ _ __ ___
| | | | |_) | | / // _ \ '__/ _ \
| |_| | __/| | / /| __/ | | (_) |
\___/|_| |_| /____\___|_| \___/

Welcome to Armbian_community 24.8.0-trunk.588 Bookworm with Linux 6.6.44-current -sunxi

No end-user support: untested automated build

System load: 2% Up time: 10:24
Memory usage: 14% of 490M IP: 192.168.165.117
CPU temp: 77°C Usage of /: 9% of 15G

Через VLC подключился к потоку rtsp://192.168.165.117:8554/usb_camera с компьютера, телефона и системы видеонаблюдения.

Все подключения отобразились по адресу Go2RTC http://192.168.165.117:1984/network.htmlВидео с камеры домофона через Go2RTC в VLC

Результат получен - камера обычного квартирного домофона стала камерой видеонаблюдения.

Альтернативный вариант сделать из обычного квартирного домофона камеру видеонаблюдения

Уже когда всё настроил программно - наткнулся на алиэкспрессе на конвертер CVBS -> RJ45. Это означает в теории, что можно только используя этот конвертер, который стоит примерно полторы тысячи рублей сделать всё тоже самое - из аналогового видеосигнала сделать ONVIF без установки Go2RTC и покупки платы видеозахвата. Но я не пробовал.

Адаптеры для ONVIF AHD2NET, 1080P HD, AHD/TVI/CVI, преобразователь камеры IPC, делает AHD камеру для IP-камеры, которая работает с системой NVR

Настройка камеры квартирного домофона в системе видеонаблюдения

Очень часто я использую Synology Surveillance Station - это программное обеспечение, разработанное компанией Synology Inc., которое позволяет пользователям создавать системы видеонаблюдения. Причём, чтобы использовать оборудование Synology не обязательно его покупать, потому что есть варианты. Хотя у меня есть несколько и фирменных серверов Synology.

Synology Surveillance Station

Камера домофона Визит легко добавилась в Synology Surveillance Station через Go2RTC. Единственной проблемой стало то, что при настройках путь rtsp, потому что не задан логин и пароль, постоянно сбрасывается на следующий вид и не даёт сохранить изменения в последующих настройках:

:########@192.168.165.117:8554/usb_camera

Для того чтобы это исправить пришлось задать имя и пароль в настройках Go2RTC. Просто через веб-интерфейс http://192.168.165.117:1984/editor.html изменил:

yaml
Копировать
streams:
usb_camera: ffmpeg:device?video=0&video_size=1280x720#video=h264
rtsp:
username: "admin" # optional, default - disabled
password: "pass" # optional, default - disabled

То есть ссылка приняла вид: rtsp://admin:pass@192.168.165.117:8554/usb_camera

Дополнительно: настройка камеры многоквартирного домофона в системе домашней автоматизации Home Assistant

Раз Go2RTC позволяет получить картинку, то можно использовать её в автоматизации вызова домофона в квартиру. Адрес картинки выглядит примерно так:

bash
Копировать
http://192.168.165.117:1984/api/frame.jpeg?src=usb_camera

Автоматизация, когда Алиса говорит через колонку, что снизу с 1го этажа кто-то звонит в квартиру, а в телеграмм отсылается текстовое уведомление и фотка с камеры домофона на 1м этаже выглядит примерно так:

yaml
Копировать
alias: Домофон оповещение
description: ""
trigger:
- platform: state
entity_id:
- binary_sensor.domofon_incoming_call
to: "on"
condition: []
action:
- target:
entity_id: media_player.yandex_station
data:
media_content_id: >-
Кто-то звонит в домофон с 1го этажа в {{
now().hour|round|format(morph='час') }} {{
now().minute|round|format(morph='минута') }}.
media_content_type: text
extra:
volume_level: 0.9
action: media_player.play_media
- data:
title: "*🔉 Звонок в домофон* "
message: в {{ now().hour }} часов {{ now().minute }} минут.
action: notify.telegram_me
- data:
message: Фото
data:
photo:
- url: http://192.168.165.117:1984/api/frame.jpeg?src=usb_camera
caption: 📸 Камера домофона на 1м этаже
disable_notification: true
enabled: true
action: notify.telegram_me
- delay:
hours: 0
minutes: 1
seconds: 0
milliseconds: 0
mode: single

Физический слаботочный щиток квартиры после установки оборудования

Orange Pi Zero 512Mb вместе с USB картой видеозахвата EasyCAP (HD) лежат по нижней части щитка - на фото видны лишь частично:

Физический слаботочный щиток квартиры после установки оборудования

Вместо итогов

Сделать из обычного квартирного домофона камеру видеонаблюдения и завести её не только в систему видеонаблюдения, но вписать в собственный умный дом - возможно.


Учитывая качество той аналоговой камеры не проще было взять недорогую ip-камеру и поставить в верхний угол двери?
Верхний угол входной двери в подъезд?
И как из квартиры дотянуть витую пару до входа в подъезд?
Кажется это придётся согласовывать и будет выглядеть очень странно - придётся прикладывать кабель-канал да и не факт что разрешат

Вернуться назад
Вернуться назад