masayasan が 2023年08月27日09時53分57秒 に編集
コメント無し
本文の変更
# 概要 RaspberryPi 4BにAgent DVRをインストールしてNVR(ネットワークビデオレコーダー)として使用します。
カメラは自身に接続してあるUSBカメラ
カメラは自身に接続してあるUSBカメラとRTSP化したRaspberryPi +3Bを接続しました。 ![キャプションを入力できます](https://camo.elchika.com/b278c70993ecbe795b0d79417dd8d8c8c1841fef/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32366436383234302d653537302d346437632d393665332d3033656337373035313139352f38383264323965332d393762392d343330612d626436302d366165653839663463366634/)
## 使用部品 RaspberryPi 4B 4GB(+PoEハット) USBカメラ(詳細不明) RTSP化したRaspberryPi +3B
NPNトランジスタ*1 LEDランプ*3 タクトスイッチ*4 抵抗 330Ω*4
NPNトランジスタ x1 LEDランプ x3 タクトスイッチ x4 抵抗 330Ω x4
## 使用ソフト RaspberryPi OS(64bit) Agent DVR # Raspberry ハード改造 下記の部品は無くても良いですが利便性を考慮して取付けました。 ・[PoEハット](https://www.amazon.co.jp/DSLRKIT-Raspberry-Ethernet-HAT-IEEE802-3af/dp/B07JPXR9ZN)増設 ・百均の名刺ケースを改造したケースに[FAN](https://akizukidenshi.com/catalog/g/gP-16826/)取付け ・ボタン及びLEDを取付けた自作基盤 ## 自作基盤作製 自分が作ったPythonプログラムを動作させる&動作確認用にタクトスイッチとLEDを取付け トランジスタはFANを動作させるために必要。FANが5V仕様なのでRaspberryPiのGPIO(3.3V)からは直接電源供給出来ません。 ### 回路図 ![キャプションを入力できます](https://camo.elchika.com/fdbadbb1f3c1057f38808b2ab31e8119135d612e/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32366436383234302d653537302d346437632d393665332d3033656337373035313139352f65366130306465622d306163642d343161362d613461312d386132306632636464376635/) 電源ON、OFFのスイッチとFAN制御のGPIOはディフォルトでGPIO3と14なので、そのまま接続。 その他のスイッチは録画スタートボタン及びストップボタンに使用する予定。 #Raspberry Piセットアップ ## Raspberry Pi OSインストール 公式のRaspberry Pi Imagerを使用してSDカードに64bit版のOSをインストールする。 32bit版だとAgent DVRが使用できない様です。 ## Agent DVRインストール [Agent DVR](https://www.ispyconnect.com/download.aspx)元々は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負荷が大きくなり遅延が発生するので外部から操作した方が良いと思います。 ![キャプションを入力できます](https://camo.elchika.com/05aa51f4225298bd13638cdd29c2584f5d774041/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32366436383234302d653537302d346437632d393665332d3033656337373035313139352f66646138313536322d653930642d343338302d386264612d396439616165303961656533/) 上の写真では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 ``` ![キャプションを入力できます](https://camo.elchika.com/982a19bdb426efcddf25e126cb78ca10ddca3da1/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32366436383234302d653537302d346437632d393665332d3033656337373035313139352f62643164363663642d663431352d343864652d396261372d653036643865393832396664/) I1のカメラを有効にしておきます。 ![キャプションを入力できます](https://camo.elchika.com/c8f4bc62fe3a344b9f42a206b4f31969bbc2d2cf/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32366436383234302d653537302d346437632d393665332d3033656337373035313139352f33633839303236322d643062312d346632352d626461362d343137373765383166623933/) FANを選択。GPIOのピン番号と動作温度(60℃~)を設定できます。 ![キャプションを入力できます](https://camo.elchika.com/77b0399fca16c4d3a234977e3e1ed3f34156e7b8/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f32366436383234302d653537302d346437632d393665332d3033656337373035313139352f34366439333334342d613533392d346238652d613431352d393966393137623030383132/) 設定完了したら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') ``` [リンク先](https://ispysoftware.github.io/Agent_API/)で、その他のコマンドがあります。 ブラウザからの設定で、バッファが20秒設定出来るのでアラーム等をトリガーとしてドライブレコーダの様な使い方も出来るようです。