概要
RaspberryPi 4BにAgent DVRをインストールしてNVR(ネットワークビデオレコーダー)として使用します。
カメラは自身に接続してあるUSBカメラとRTSP化したRaspberryPi +3Bを接続しました。
カメラはONVIF対応のカメラも可能な様です。
使用部品
RaspberryPi 4B 4GB(+PoEハット)
USBカメラ(詳細不明)
RTSP化したRaspberryPi +3B
NPNトランジスタ x1
LEDランプ x3
タクトスイッチ x4
抵抗 330Ω x4
使用ソフト
RaspberryPi OS(64bit)
Agent DVR
Raspberry ハード改造
下記の部品は無くても良いですが利便性を考慮して取付けました。
・PoEハット増設
・百均の名刺ケースを改造したケースにFAN取付け
・ボタン及びLEDを取付けた自作基盤
自作基盤作製
自分が作ったPythonプログラムを動作させる&動作確認用にタクトスイッチとLEDを取付け
トランジスタはFANを動作させるために必要。FANが5V仕様なのでRaspberryPiのGPIO(3.3V)からは直接電源供給出来ません。
回路図
電源ON、OFFのスイッチとFAN制御のGPIOはディフォルトでGPIO3と14なので、そのまま接続。
その他のスイッチは録画スタートボタン及びストップボタンに使用する予定。
#Raspberry Piセットアップ
Raspberry Pi OSインストール
公式のRaspberry Pi Imagerを使用してSDカードに64bit版のOSをインストールする。
32bit版だとAgent DVRが使用できない様です。
Agent DVRインストール
Agent DVR元々はiSpyというソフトだったみたいです。
リンク先にも記載されていますが、下記のコマンドをターミナルで入力するとインストールされます。
インストール前にパッケージのアップデートとアップグレードをしておきます。
<RaspberryPi ターミナルで実行>
sudo apt update && sudo apt upgrade
sudo apt-get install curl
bash <(curl -s "https://raw.githubusercontent.com/ispysoftware/agent-install-scripts/main/v2/install.sh")
インストール後、再起動すればNVRとして運用することが出来ます。
外部パソコンでAgent DVR動作確認①
http://RaspberryPiのIPアドレス:8090/#Live をブラウザに入力
外部パソコンでなくてもRaspberryPi自身のブラウザを使用しても良い。ただCPU負荷が大きくなり遅延が発生するので外部から操作した方が良いと思います。
上の写真ではVNCでRaspberryPiの画面を表示させてます。
Agnet DVRをインストールした後でも、RaspberyyPiのデスクトップ環境は使用可能ですが、インストール前まで使用出来ていたカメラ(V1.3)が使用できなくなりました。
USBカメラはローカルデバイスとして選択して使用できる様です。
左側がUSBカメラ、右側はRTSP化したRaspberryPi+3Bの映像を映しています。
#自作Pythonプログラムの導入
Agent DVRはモーション検知がありますが、私の持ってるUSBカメラでは上手く動作してくれませんでした。
RTSP化したRaspberryPi+3Bだと対象物に動きがあると自動で録画してくれます。
録画のためにブラウザ開いて操作するのは面倒なのでボタン操作で録画できるようにします。
ついでに、ボタン操作電源ON・OFFしたりFANを自動で制御出来るように設定します。
RaspberryPiの設定変更、config.txtを編集
まずはターミナルで下記コマンドを実行します。
sudo raspi-config
FANを選択。GPIOのピン番号と動作温度(60℃~)を設定できます。
設定完了したらraspi-configを閉じます。
次にはターミナルで下記コマンドを実行します。
sudo nano /boot/config.txt
/boot/config.txt に下記を追記
hdmi_force_hotplug=1
dtoverlay=vc4-fkms-v3d
dtoverlay=ov5647
dtoverlay=gpio-shutdown,debounce=1000
dtparam=pwr_led_trigger=heartbeat
'hdmi_force_hotplug=1'はRaspberryPiにモニタ接続してなくても外部パソコンでVNC接続をしてデスクトップ画面が表示できる様に。
'dtoverlay=vc4-fkms-v3d''dtoverlay=ov5647'カメラV1.3を使用できるようにする為の設定。
AgentDVRをインストールした後は使用できなくなった。
'dtoverlay=gpio-shutdown,debounce=1000' GPIO3をGNDと1000ms短絡させるとシャットダウンを行う。短絡させる時間は変更可能。
'dtparam=pwr_led_trigger=heartbeat'RaspberryPi動作中はRaspberryPiのランプを点滅表示させる。
RaspberryPiに電源投入するとLED点灯するが、動作してる時もしていない時も点灯しているので、動作状況が分かりづらい。
main.py作成およびSytemdを使用した自動起動設定
サービス内に起動するpythonプログラムを/home/ユーザー名 に作成(main.py)。
とりあえずコードはまだ何も書かなくても良いです。
<下記コマンドをターミナルで実行>
sudo nano /etc/systemd/system/main.service
main.serviceに下記を記入
[Unit]
Description = main
[Service]
ExecStart=/usr/bin/python3 main.py
WorkingDirectory=/home/ユーザー名
[Install]
WantedBy=multi-user.target
サービスを更新をして有効化
systemctl daemon-reload
sudo systemctl enable main.service
これで次回起動時に/home/ユーザー名 にあるmain.pyが自動実行されます。
main.py内のコード
pythonエディタで下記コードを入力
nvr.localはホスト名をnvrとしたからです。代わりにRaspberryPiのIPアドレス入力しても動作します。
#!/usr/bin/env python3
import RPi.GPIO as GPIO
import requests
import time
GPIO.setmode(GPIO.BCM)
GPIOsw1 = 2
GPIOsw2 = 4
GPIOsw3 = 17
GPIOsw4 = 27
LED_red = 22
LED_green1 = 10
LED_green2 = 9
GPIO.setup(GPIOsw1,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(GPIOsw2,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(GPIOsw3,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(GPIOsw4,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(LED_red,GPIO.OUT)
GPIO.setup(LED_green1,GPIO.OUT)
GPIO.setup(LED_green2,GPIO.OUT)
GPIO.output(LED_red, GPIO.HIGH)
GPIO.output(LED_green1, GPIO.HIGH)
GPIO.output(LED_green2, GPIO.HIGH)
time.sleep(1)
GPIO.output(LED_red, GPIO.LOW)
GPIO.output(LED_green1,GPIO.LOW)
GPIO.output(LED_green2,GPIO.LOW)
while True:
sw1 = GPIO.input(GPIOsw1)
sw2 = GPIO.input(GPIOsw2)
sw3 = GPIO.input(GPIOsw3)
sw4 = GPIO.input(GPIOsw4)
if sw1==0:
GPIO.output(LED_red, GPIO.HIGH)
requests.get('http://nvr.local:8090/command/record')
elif sw4==0:
GPIO.output(LED_red, GPIO.LOW)
requests.get('http://nvr.local:8090/command/recordStop')
リンク先で、その他のコマンドがあります。
ブラウザからの設定で、バッファが20秒設定出来るのでアラーム等をトリガーとしてドライブレコーダの様な使い方も出来るようです。
録画操作風景
まとめ
ボタンの代わりにセンサーなどをトリガーにすれば、監視カメラやドラレコシステムが手軽に構築出来そうです。
投稿者の人気記事
-
masayasan
さんが
2023/08/27
に
編集
をしました。
(メッセージ: 初版)
-
masayasan
さんが
2023/08/27
に
編集
をしました。
-
masayasan
さんが
2023/08/27
に
編集
をしました。
-
masayasan
さんが
2023/08/27
に
編集
をしました。
-
masayasan
さんが
2023/08/27
に
編集
をしました。
-
masayasan
さんが
2023/08/27
に
編集
をしました。
-
masayasan
さんが
2023/08/28
に
編集
をしました。
-
masayasan
さんが
2023/08/29
に
編集
をしました。
-
masayasan
さんが
2023/08/29
に
編集
をしました。
-
masayasan
さんが
2023/08/30
に
編集
をしました。
ログインしてコメントを投稿する