В моей квартире установлен аналоговый домофон Визит, вызывная панель которого оснащена камерой. Этот домофон не современный, а координатный - аналоговой и ему больше 10 лет.
В статье разбираюсь, что нужно для того, чтобы получать видеопоток с камеры домофона в режиме реального времени в RTSP формат и затем управлять этой камерой в системе видеонаблюдения и умном доме.
Физическое подключение к камере домофона
Очень подробно про физическое подключение писал в первой части статьи. Для этого понадобится:
1. Самая дешевая USB карта видеозахвата EasyCAP (HD).
2. Разъем питания DC для камер видеонаблюдения.
3. Вывод витой пары подключенной параллельно входу камеры в блок домофона.
Программное подключение к камере домофона
Я выбрал использовать проект Go2RTC от AlexxIT, установив его на старый Orange Pi Zero 512Mb.
Шаг 1. Установил и подготовил систему
Используя BalenaEtcher записал на карту памяти Armbian - это дистрибутив Linux, разработанный специально для одноплатных компьютеров на базе процессоров ARM.
Далее по инструкции вошёл в систему как root.
Welcome to Armbian_community!
Documentation: https://docs.armbian.com | Community support: https://community.a rmbian.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:~#
Потом обновил систему:
root@orangepizero:~# sudo apt update && sudo apt upgrade -y
Установил необходимые зависимости: поскольку используется USB-устройство захвата видео, необходимо установить некоторые инструменты, связанные с мультимедиа и видео, такие как ffmpeg, которые Go2RTC может использовать для обработки видеопотоков.
root@orangepizero:~# sudo apt install ffmpeg v4l-utils -y
-
ffmpeg
: необходим для кодирования/декодирования видео. -
v4l-utils
: содержит инструменты для взаимодействия с устройством видеозахвата.
Проверил USB-устройство захвата подключил USB-карту видеозахвата EasyCAP и убедился, что она распознается системой:
root@orangepizero:~# ls /dev/video*
/dev/video0 /dev/video1
В ответе было что-то вроде /dev/video0
. Это означает, что устройство обнаружено.
Дополнительно посмотрел доступные форматы:
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:
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:
root@orangepizero:~# sudo mv go2rtc_linux_armv6 /usr/local/bin/go2rtc
Шаг 3. Настроил Go2RTC
Создал каталог конфигурации, переключившись на самого себя - пользователя, которого я создал:
root@orangepizero:~# su -l mike
mike@orangepizero:~$ mkdir -p ~/.config/go2rtc
Создал файл конфигурации go2rtc.yaml
, указав USB-устройство видеозахвата в качестве источника входного сигнала:
mike@orangepizero:~# nano ~/.config/go2rtc/go2rtc.yaml
Простая конфигурация для захвата видео с USB-устройства и его потоковой передачи:
streams:
usb_camera: ffmpeg:device?video=0&video_size=1280x720#video=h264
А это памятка для самого себя - чтобы сохранить и выйти из редактора nano в Linux, выполните следующие шаги:
-
Нажмите сочетание клавиш Ctrl + X. Это приведет к выводу сообщения "Save modified buffer (y/n/a/q/K)?".
-
Нажмите Y для сохранения изменений.
-
Нажмите Enter для подтверждения выбора.
-
Введите имя файла, если вы хотите сохранить его под другим именем, или просто нажмите Enter, чтобы сохранить файл под текущим именем.
-
Нажмите Enter еще раз для подтверждения.
-
Нажмите Enter, чтобы закрыть редактор nano.
Проверил конфигурацию, для этого вручную запустил двоичный файл Go2RTC с указанной конфигурацией, чтобы проверить, всё ли работает правильно:
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:
mike@orangepizero:~$ sudo nano /etc/systemd/system/go2rtc.service
[sudo] пароль для mike:
Добавил следующее содержимое для моего имени пользователя - mike:
[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
Запустил и включил службу:
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. Проверил потоковую передачу
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
с компьютера, телефона и системы видеонаблюдения.
Результат получен - камера обычного квартирного домофона стала камерой видеонаблюдения.
Альтернативный вариант сделать из обычного квартирного домофона камеру видеонаблюдения
Уже когда всё настроил программно - наткнулся на алиэкспрессе на конвертер CVBS -> RJ45. Это означает в теории, что можно только используя этот конвертер, который стоит примерно полторы тысячи рублей сделать всё тоже самое - из аналогового видеосигнала сделать ONVIF без установки Go2RTC и покупки платы видеозахвата.
Но я не пробовал.
Настройка камеры квартирного домофона в системе видеонаблюдения
Очень часто я использую Synology Surveillance Station - это программное обеспечение, разработанное компанией Synology Inc., которое позволяет пользователям создавать системы видеонаблюдения. Причём, чтобы использовать оборудование Synology не обязательно его покупать, потому что есть варианты. Хотя у меня есть несколько и фирменных серверов Synology.
Камера домофона Визит легко добавилась в Synology Surveillance Station через Go2RTC. Единственной проблемой стало то, что при настройках путь rtsp, потому что не задан логин и пароль, постоянно сбрасывается на следующий вид и не даёт сохранить изменения в последующих настройках:
:########@192.168.165.117:8554/usb_camera
Для того чтобы это исправить пришлось задать имя и пароль в настройках Go2RTC. Просто через веб-интерфейс http://192.168.165.117:1984/editor.html
изменил:
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 позволяет получить картинку, то можно использовать её в автоматизации вызова домофона в квартиру. Адрес картинки выглядит примерно так:
http://192.168.165.117:1984/api/frame.jpeg?src=usb_camera
Автоматизация, когда Алиса говорит через колонку, что снизу с 1го этажа кто-то звонит в квартиру, а в телеграмм отсылается текстовое уведомление и фотка с камеры домофона на 1м этаже выглядит примерно так:
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) лежат по нижней части щитка - на фото видны лишь частично:
Вместо итогов
Сделать из обычного квартирного домофона камеру видеонаблюдения и завести её не только в систему видеонаблюдения, но вписать в собственный умный дом - возможно.
Автор: Михаил Шардин,
26 августа 2024 г.
Автор: empenoso