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

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

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

Очень подробно про физическое подключение писал в первой части статьи. Для этого понадобится:

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

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

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

Разъем питания DC
Разъем питания 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, выполните следующие шаги:

  1. Нажмите сочетание клавиш Ctrl + X. Это приведет к выводу сообщения "Save modified buffer (y/n/a/q/K)?".

  2. Нажмите Y для сохранения изменений.

  3. Нажмите Enter для подтверждения выбора.

  4. Введите имя файла, если вы хотите сохранить его под другим именем, или просто нажмите Enter, чтобы сохранить файл под текущим именем.

  5. Нажмите Enter еще раз для подтверждения.

  6. Нажмите 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 с компьютера, телефона и системы видеонаблюдения.

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

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

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

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

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

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

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

Synology Surveillance Station
Synology Surveillance Station

Камера домофона Визит легко добавилась в 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 г.

Комментарии (10)


  1. us245
    26.08.2024 04:44
    +2

    Древний DVR разве не решение под аналог?


    1. empenoso Автор
      26.08.2024 04:44

      У меня не было


  1. AlexxIT
    26.08.2024 04:44
    +5

    Спасибо за статью. Пара дополнений по go2rtc:

    1. Поддерживаемые форматы USB камеры можно посмотреть в веб интерфейсе go2rtc > Add > USB. Там же будут примеры, как лучше добавить эту камеру в конфиг.

    2. Камера поддерживает MJPEG, а значит, при желании, можно получать поток в этом формате вообще без транскодирования. Нагрузка на CPU будет минимальной. Плюсом можно написать конфиг так, что на выходе будут и MJPEG и H264 потоки.

    3. Снапшоты также выгоднее получать из MJPEG потока, так не будет транкодирования. Но если мы работаем с H264 потоком, то снапшоты в Telegram выгоднее отправлять в MP4 формате. Telegram такое поддерживает, и тут также не будет транскодирования.


    1. empenoso Автор
      26.08.2024 04:44

      Спасибо за дополнения!


  1. TerAnYu
    26.08.2024 04:44
    +1

    А обработку сигналов от домофона при помощи чего обрабатываете, через GPIO на RPI ?


    1. empenoso Автор
      26.08.2024 04:44

      Я знаю как минимум два способа:

      1. Датчик U-Sensor (5-310В) соединять с ESP
        https://www.ab-log.ru/smart-house/ethernet/u-sensor

      2. Использовать специализированную плату Умный домофон. WiFi / Zigbee / RS-485 версии
        https://espdomofon.ru/category/diy/

      У меня здесь WiFi версия espdomofon.ru.


  1. Rub_paul
    26.08.2024 04:44
    +1

    О, очень удачно наткнулся на статью, как раз об этом задумывался на днях. Благодарю за материал.


  1. DashBerlin
    26.08.2024 04:44
    +1

    Спасибо за публикацию! А у вас был опыт подключению sonoff камеру, через сервисы можно, хотелось использую api, если он есть у них конечно


    1. empenoso Автор
      26.08.2024 04:44
      +1

      Камеру нет, но Sonoff да: https://habr.com/ru/articles/804475/ (наверное не совсем в тему вашего вопроса)


      1. DashBerlin
        26.08.2024 04:44
        +1

        спасибо, посмотрю, хотел напрямую подключиться к камере