Подключаем USB Web камеру к homebridge

08 мая 2018, 07:14

Ранее Уважаемый Eduard Sallo [Edward]  уже рассказал в статье Установка Homebridge на Raspberry. Версия для начинающих как быстро и просто установить Homebridge на микрокомпьютер Raspberry Pi

Если у вас завалялась USB Web камера, по почему бы не попробовать подключить ее к homebridge для последующего отображения в приложении Дом ваших iOS устройств. Я без проблем подключил HP Webcam 3110.

Нам понадобиться Малинка c установленным homebridge и плагином homebridge-camera-ffmpeg, а так же Putty для работы с терминалов малинки.

Первым делом подключаем к RaspberryPi (я бы рекомендовал использовать модель Raspberry Pi 3b) вашу камеру , желательно в USB порты которые находятся дальше от Ethernet порта

Затем подключаемся через Putty к вашей малинке, в программе нужно указать ip адрес малины и выбрать тип подключения SSH. 

После подключения нужно ввести ваш логин это как правило pi и пароль, если не меняли со стандартного то raspberry.

Вводим команду - она открывает доступ пользователю под которым запущен homebridge к камере

sudo usermod -aG video pi

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

ffmpeg -f v4l2 -framerate 30 -video_size 1280x720 -i /dev/video0 -pix_fmt yuv420p  -c:v h264_omx  output.mkv

если камера работает то в терминале вы увидите следующее:

ffmpeg version N-90468-g0dc11d8bbd Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 6.3.0 (Raspbian 6.3.0-18 rpi1 deb9u1) 20170516
  configuration: --prefix=/usr/local --arch=armel --target-os=linux --enable-omx-rpi --enable-nonfree --enable-gpl --enable-libfdk-aac --enable-mmal --enable-libx264 --enable-decoder=h264 --enable-network --enable-protocol=tcp --enable-demuxer=rtsp
  libavutil      56. 12.100 / 56. 12.100
  libavcodec     58. 16.100 / 58. 16.100
  libavformat    58. 10.100 / 58. 10.100
  libavdevice    58.  2.100 / 58.  2.100
  libavfilter     7. 13.100 /  7. 13.100
  libswscale      5.  0.102 /  5.  0.102
  libswresample   3.  0.101 /  3.  0.101
  libpostproc    55.  0.100 / 55.  0.100
[video4linux2,v4l2 @ 0x2822290] The driver changed the time per frame from 1/30 to 1/10
Input #0, video4linux2,v4l2, from '/dev/video0':
  Duration: N/A, start: 112245.051873, bitrate: 147456 kb/s
    Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 1280x720, 147456 kb/s, 10 fps, 10 tbr, 1000k tbn, 1000k tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (h264_omx))
Press [q] to stop, [?] for help
[h264_omx @ 0x2825700] Using OMX.broadcom.video_encode
Output #0, matroska, to 'output.mkv':
  Metadata:
    encoder         : Lavf58.10.100
    Stream #0:0: Video: h264 (h264_omx) (H264 / 0x34363248), yuv420p, 1280x720, q=2-31, 200 kb/s, 10 fps, 1k tbn, 10 tbc
    Metadata:
      encoder         : Lavc58.16.100 h264_omx
frame=    6 fps=0.0 q=-0.0 size=       1kB time=00:00:00.50 bitrate=  11.4kbits/frame=   11 fps= 11 q=-0.0 size=       1kB time=00:00:01.00 bitrate=   5.7kbits/frame=   16 fps= 10 q=-0.0 size=      24kB time=00:00:01.50 bitrate= 133.2kbits/frame=   21 fps= 10 q=-0.0 size=      24kB time=00:00:02.00 bitrate=  99.9kbits/frame=   26 fps= 10 q=-0.0 size=      51kB time=00:00:02.50 bitrate= 165.7kbits/frame=   31 fps= 10 q=-0.0 size=      51kB time=00:00:03.00 bitrate= 138.1kbits/frame=   36 fps= 10 q=-0.0 size=      51kB time=00:00:03.50 bitrate= 118.3kbits/frame=   41 fps= 10 q=-0.0 size=      86kB time=00:00:04.00 bitrate= 177.0kbits/frame=   46 fps= 10 q=-0.0 size=      86kB time=00:00:04.50 bitrate= 157.4kbits/frame=   51 fps= 10 q=-0.0 size=     118kB time=00:00:05.00 bitrate= 192.7kbits/frame=   56 fps= 10 q=-0.0 size=     118kB time=00:00:05.50 bitrate= 175.2kbits/frame=   61 fps= 10 q=-0.0 size=     118kB time=00:00:06.00 bitrate= 160.6kbits/frame=   66 fps= 10 q=-0.0 size=     148kB time=00:00:06.50 bitrate= 186.5kbits/frame=   71 fps= 10 q=-0.0 size=     148kB time=00:00:07.00 bitrate= 173.2kbits/frame=   76 fps= 10 q=-0.0 size=     177kB time=00:00:07.50 bitrate= 193.4kbits/frame=   81 fps= 10 q=-0.0 size=     177kB time=00:00:08.00 bitrate= 181.3kbits/frame=   86 fps= 10 q=-0.0 size=     206kB time=00:00:08.50 bitrate= 198.1kbits/frame=   92 fps= 10 q=-0.0 size=     206kB time=00:00:09.10 bitrate= 185.0kbits/frame=   96 fps= 10 q=-0.0 size=     206kB time=00:00:09.60 bitrate= 175.4kbits/frame=  101 fps= 10 q=-0.0 size=     235kB time=00:00:10.10 bitrate= 190.7kbits/frame=  105 fps=9.9 q=-0.0 Lsize=     262kB time=00:00:10.60 bitrate= 202.1kbits/s speed=   1x
video:260kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.688294%

для остановки нажмите q, а в папке /home/pi/ будет лежать файл output.mkv - если его скачать например с помощью программы WinSCP, то можно  посмотреть его в медиаплеере.

Если ничего из вышеуказанного не получилось, то скорее всего ваша камера не поддерживается ядром Linux на котором работает малинка, тогда можно попробовать поискать драйвера для нее в интернете.

Если с видео все  порядке, то переходим к подключению камеры к homebridge - для этого добавляем в ваш config.json следующие строки, не забывая про правильное форматирование:

{
"platform": "Camera-ffmpeg",
      "cameras": [ {
                    "name": "Камера Web",
                    "videoConfig": {
                        "source": "-f v4l2 -r 20 -s 1280x720 -i /dev/video0",
                        "maxStreams": 2,
                        "maxWidth": 1280,
                        "maxHeight": 720,
                        "maxFPS": 20,
                        "maxBitrate": 1536,
                        "vcodec": "h264_omx"
                    }
                }
             ]
}

Перезапускайте бридж и добавляйте камеру в Дом - в приложении жмем на " " в верхнем правом углу,
далее добавить аксессуар и затем выбирайте "Нет кода или не можете сканировать?"  - появится камера, тапаете по ней и вводите пин код от вашего моста. 

На этом все - камера будет работать.

 Теперь можете поместить ее в комнату с датчиком движения и на датчике активировать "Допуск уведомлений". 

Когда датчик зафиксирует движение, то вам на телефон придет уведомление с кадром с камеры, по тапу на которое у вас откроется прямая трансляция с камеры. 


Все новости мира умных домов - t.me/SprutAI_News или Instagram
Остались вопросы? Мы в Telegram - @Soprut

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. Олег Челбаев (sprut)
    Олег Челбаев (sprut) отредактировано 2 года назад

    ????????????

  2. Олег Челбаев (sprut)
    Олег Челбаев (sprut) отредактировано 2 года назад

    Вторая жизнь старым вещам ;)

  3. Илья Гитлин (iGitlin)
    Илья Гитлин (iGitlin) отредактировано 2 года назад

    нужна возможность редактировать статьи, а то очепатки вылезают

    а так же Putty для работы с терминалов малинки.

  4. Илья Гитлин (iGitlin)

    Кстати легко подключилась камера от PlayStaion 3., Можно одновременно использовать несколько USB камер, просто тогда в конфиге дописываем для второй и тд камеры свой блок заменив только

    "source": "-f v4l2 -r 20 -s 1280x720 -i /dev/video0",

    на

    "source": "-f v4l2 -r 20 -s 1280x720 -i /dev/video1",

    и так далее

  5. Артём Суровцев (surovtsev.artyom)

    А есть хотя бы приблизительный перечень совместимых камер или на что обращать внимание при покупке камеры под такое дело?

    • (dmn)
      (dmn) отредактировано год назад

      На сайте плагина ffmpeg на GitHub есть список с протестированными камерами.

  6. Александр Шульц (axyskus)

    отличная статья. спасибо автору. по моему любая завалявшаяся вебкамера подойтёт

  7. (11111986)
    (11111986) год назад

    Спасибо!

  8. Алексей Фролин (plutos)

    Подскажите пожалуйста, как? Не могу пробросить поток с видеорегистратора

    [12/22/2018, 6:39:31 PM] [Camera-ffmpeg] Start streaming video from Peephole with 1280x720@299kBit ffmpeg -rtsp_transport tcp -y -i rtsp://10.1.1.9:554/user=user&password=user&channel=1&stream=0.sdp -map 0:0 -vcodec h264_omx -pix_fmt yuv420p -r 20 -f rawvideo -tune zerolatency -vfscale=1280:720 -b:v 299k -bufsize 299k -payload_type 99 -ssrc 14522480 -f rtp -srtp_out_suite AES_CM_128_HMAC_SHA1_80 -srtp_out_params OE6rCjHb2BFM4hnd4LwCNfeT3zBLO0ibPvOWcBP3 srtp://10.1.1.5:49713?rtcpport=49713&localrtcpport=49713&pkt_size=1316 ffmpeg version N-92712-g011c9112a0 Copyright (c) 2000-2018 the FFmpeg developers built with gcc 6.3.0 (Raspbian 6.3.0-18+rpi1+deb9u1) 20170516 configuration: --prefix=/usr/local --arch=armel --target-os=linux --enable-omx-rpi --enable-nonfree --enable-gpl --enable-libfdk-aac --enable-mmal --enable-libx264 --enable-decoder=h264 --enable-network --enable-protocol=tcp --enable-demuxer=rtsp libavutil 56. 24.101 / 56. 24.101 libavcodec 58. 42.102 / 58. 42.102 libavformat 58. 24.101 / 58. 24.101 libavdevice 58. 6.101 / 58. 6.101 libavfilter 7. 46.101 / 7. 46.101 libswscale 5. 4.100 / 5. 4.100 libswresample 3. 4.100 / 3. 4.100 libpostproc 55. 4.100 / 55. 4.100 [rtsp @ 0x353c490] Nonmatching transport in server reply rtsp://10.1.1.9:554/user=user&password=user&channel=1&stream=0.sdp: Invalid data found when processing input [12/22/2018, 6:39:31 PM] [Camera-ffmpeg] ERROR: FFmpeg exited with code 1

    • Алексей Фролин (plutos)
      Алексей Фролин (plutos) отредактировано год назад

      Отвечу сам на свой вопрос, может кому пригодиться.

      VLC оказался единственным плеером, который смог воспроизвести поток с моего видео-регистратора, данный способ почти не требует ресурсов для кодирования и может использоваться для ретрансляции почти любого видео потока, перепробовал более 30 разных источников видео трансляций из интернета )

      Установка:

      apt install vlc

      Настройка ретрансляции:

      touch /home/pi/.scripts/ip_cam_vlc1.sh

      chmod +x /home/pi/.scripts/ip_cam_vlc1.sh

      nano /home/pi/.scripts/ip_cam_vlc1.sh


      В /home/pi/.scripts/ip_cam_vlc1.sh добавляем строчку:

      #!/bin/bash

      cvlc -d "rtsp://10.1.1.9:554/user=user&password=user&channel=1&stream=0.sdp" --http-reconnect --loop --repeat --sout "#rtp{sdp=rtsp://:8088}"

      sleep 5

      cvlc -d "rtsp://10.1.1.9:554/user=user&password=user&channel=3&stream=0.sdp" --http-reconnect --loop --repeat --sout "#rtp{sdp=rtsp://:8089}"

      где rtsp://10.1.1.9:554/user=user&password=user&channel=1&stream=0.sdp - ссылки на потоки с ip-камер с именем пользователя и паролем

      rtsp://:8088/ - ссылка на rtsp-поток с сервера, на который установлен vlc

      -d - запускать в режиме демона

      --http-reconnect --loop --repeat ключи для восстановления соединения после разрыва или проблемах сети

      Созданный скрипт нельзя запускать из под root! Добавляем в автозагрузку из под обычного пользователя "pi" 

      sudo nano /etc/rc.local

      В /etc/rc.local добавляем строчку перед exit 0 :

      sudo -u pi /home/pi/.scripts/ip_cam_vlc1.sh

      В /home/pi/.homebridge/config.json добавляем строчку:

      {

      "platform": "Camera-ffmpeg",

      "cameras": [

      {

      "name": "Peephole",

      "videoConfig": {

      "source": "-re -i rtsp://127.0.0.1:8088/",

      "maxStreams": 2,

      "maxWidth": 1280,

      "maxHeight": 720,

      "maxFPS": 20,

      "maxBitrate": 1536,

      "vcodec": "h264_omx"

      }

      },

      {

      "name": "Entrance",

      "videoConfig": {

      "source": "-re -i rtsp://127.0.0.1:8089/",

      "maxStreams": 2,

      "maxWidth": 1280,

      "maxHeight": 720,

      "maxFPS": 20,

      "maxBitrate": 1536,

      "vcodec": "h264_omx"

      }

      }

      ]

      }

      Перезагружаемся.

      2000x2000x_image.jpg?1545792963
  9. Алексей Фролин (plutos)

    Вот код сервиса под названием vlc1.service, который размещен в /etc/systemd/system

    [Unit]

    Description=vlc1 Service on %I

    After=network.target

    [Service]

    Type=simple

    KillSignal=HUP

    User=pi

    SyslogIdentifier=vlc1_%i

    ExecStart=/usr/bin/cvlc "rtsp://10.1.1.9:554/user=user&password=user&channel=1&stream=0.sdp" --http-reconnect --loop --repeat --sout "#rtp{sdp=rtsp://:8088}"

    #Restart=always

    Restart=on-failure

    RestartSec=10

    KillMode=process

    [Install]

    WantedBy=multi-user.target

    Теперь нужно установить правильные права на файл:

    # sudo chmod 644 /etc/systemd/system/vlc1.service

    Команды

    # sudo systemctl start vlc1

    # sudo systemctl enable vlc1

    # sudo systemctl restart vlc1

    Посмотреть статус можно

    # systemctl status vlc1

  10. Никита Кузнецов (ferus.dev)
    Никита Кузнецов (ferus.dev) 11 месяцев назад

    Подобное можно реализовать в HomeAssistant?

  11. Максим Илюхин (domik-maksa)
    Максим Илюхин (domik-maksa) 8 месяцев назад
    Добрый вечер камера добавилась но висит черным квадратом значок камеры перечеркнут что делать куда смотреть ???

  12. (dwen)
    (dwen) 4 месяца назад
    почему нет звука с веб камеры при таких условиях?
К списку статей

Устройства в материале

Raspberry Pi 4

Производитель: Raspberry Pi

Raspberry Pi 3 Model B+

Производитель: Raspberry Pi

Похожие статьи

04 сентября 2018, 12:14
Интеграция RGB ленты на ESP8266 с прошивкой tasmota в систему HomeBridge (HomeKit)
17 декабря 2019, 17:49
Универсальный привод для автоматического удаленного открытия окон с простой интеграцией в умные дома.
15 ноября 2018, 09:42
Способы автоматизации механических ворот
15 ноября 2018, 13:11
Xiaomi Mi Remote 360 добавляем Apple HomeKit
28 августа 2018, 09:48
От голого Raspbian до веб-интерфейса homebridge за четыре команды в терминале.
01 ноября 2018, 09:27
Настройка Deconz USB стика ConBee от Dresden Elektronik в Hass.io и некоторые особенности эксплуатации
30 июня 2018, 12:17
Добавляем устройства управляемые по ИК через Broadlink RM3 Mini на примере кондиционера.
15 июня 2018, 12:13
Охранная система в гараж на ESP8266 с интеграцией в Apple HomeKit
24 августа 2018, 09:49
Как удаленно управлять Mac через Siri.
29 сентября 2018, 09:05
Мы рассмотрим как из камеры и кнопки (Mi/Aqara) сделать домофон для HomeKit