ラズパイACCESSPOINTにMotioneyeをセットアップしてドライブレコーダーにする
今回は、ラズパイに ACCESSPOINT セットアップ & Motioneyeインストールで、ドライブレコーダーに仕立てます。
100円ショップでは、車のシガーソケットからスマートフォンを充電できるUSB充電器を販売していますが、このUSBポートからラズパイに電源を取って、ドライブレコーダーとして機能させます。
ラズパイにACCESSPOINTを起動させておいて、スマホからACCESSPOINTに接続することで、スマホ上のWebブラウザから、Motioneyeの画面が確認できるようになるので、運転している映像の確認がスマホから可能になります。
設置したのはいいけど、どう映っているのかわからないところをこれで解決できます。
ラズパイZEROでも、USB1ポートにUSBカメラを接続すれば、車の運転席での運転風景を録画しておけます。
Motioneyeによって、画像としても、動画としても、MicroSD内に蓄積しておけます。
防犯目的で、実家に動画による動態検知だけ仕掛けたときには、32GのMicroSDで、1か月分ぐらいは、容量オーバーしませんでした。
ドライブレコーダーとして動画を取って、回しっぱなしで1時間は問題ありませんでした。
画像と映像を両方取るとディスク圧迫しますし、この辺は、MicroSDの容量と動態検知の設定と環境条件によって、実測で試して調整することになると思います。
ラズパイZEROだとマシンパワーの問題があるので、Rasbian Liteでなくては厳しいと思います。
できれば、ラズパイ3B以上を使ったほうが、安定性で安心と思います。
では構築していきます。
Rasbian Buster に Motioneye をインストール
ffmpeg、および、その他のmotion依存関係をインストール
apt-get install ffmpeg libmariadb3 libpq5 libmicrohttpd12
motioneyeインストール:Raspbian Busterにはmotionバージョン4.1が付属しています。ただし、バージョン4.2をインストール
リポジトリから依存関係をインストール
get https://github.com/Motion-Project/motion/releases/download/release-4.2.2/pi_buster_motion_4.2.2-1_armhf.deb
dpkg -i pi_buster_motion_4.2.2-1_armhf.deb
apt-get install python-pip python-dev libssl-dev libcurl4-openssl-dev libjpeg-dev libz-dev
motioneyeインストールと、 Python依存関係の tornado、jinja2、pillow、および、pycurl をインストール
pip install motioneye
mkdir -p /etc/motioneye
cp /usr/local/share/motioneye/extra/motioneye.conf.sample /etc/motioneye/motioneye.conf
mkdir -p /var/lib/motioneye
初期化スクリプトを追加し、起動時に実行するように構成し、motionEyeサーバーを起動
cp /usr/local/share/motioneye/extra/motioneye.systemd-unit-local /etc/systemd/system/motioneye.service
systemctl daemon-reload
systemctl enable motioneye
systemctl start motioneye
ZEROの場合には、負荷を考えて、Buster Liteに Motioneye をインストール
ffmpeg、および、その他のmotion依存関係をインストール
apt-get install ffmpeg libmariadb3 libpq5 libmicrohttpd12
motioneyeインストール:Raspbian Busterにはmotionバージョン4.1が付属しています。ただし、バージョン4.2をインストール
リポジトリから依存関係をインストール
wget https://github.com/Motion-Project/motion/releases/download/release-4.2.2/pi_buster_motion_4.2.2-1_armhf.deb
dpkg -i pi_buster_motion_4.2.2-1_armhf.deb
apt-get install python-pip python-dev libssl-dev libcurl4-openssl-dev libjpeg-dev libz-dev
motioneyeインストールと、 Python依存関係の tornado、jinja2、pillow、および、pycurl をインストール
pip install motioneye
※ Buster LiteだとここでMemory Error になる。なので、以下対処で登録できた!
sudo pip --no-cache-dir install motioneye (ここがミソ)
mkdir -p /etc/motioneye
cp /usr/local/share/motioneye/extra/motioneye.conf.sample /etc/motioneye/motioneye.conf
mkdir -p /var/lib/motioneye
初期化スクリプトを追加し、起動時に実行するように構成し、motionEyeサーバーを起動
cp /usr/local/share/motioneye/extra/motioneye.systemd-unit-local /etc/systemd/system/motioneye.service
systemctl daemon-reload
systemctl enable motioneye
systemctl start motioneye
/etc/motioneye/motioneye.conf に port 8765 が設定されていますので、ブラウザからIPアドレス指定で、ポート8765に接続すると管理画面が表示されるので設定ができます。(ポート番号は変更可能です)
アクセスポイントには、DNSMasqとHostAPDが必要です。一度にインストールします。
sudo apt install dnsmasq hostapd
構成ファイルはまだ準備ができていないため、ソフトウェアを一旦、オフにします。
sudo systemctl stop dnsmasq
sudo systemctl stop hostapd
静的IPアドレスを構成します。ワイヤレスネットワークに標準の 192.168.8.xxx IPアドレスを使用していることを前提とします。
サーバーにIPアドレス 192.168.8.100 を割り当てます。無線デバイスは wlan0 とします。
sudo vi /etc/dhcpcd.conf
interface wlan0
static ip_address=192.168.8.100/24
nohook wpa_supplicant
#interface eth0
# static ip_address=0.0.0.0
wlan0 は開発環境LANのアドレスから変更するのであれば、通信がつながらなくなるので、eth0が必要になってくる。
eth0 を使わないのであれば、static_ip_address=0.0.0.0 を定義。DHCPでIPアドレス提供受けたい場合はコメントにする。
dhcpcdデーモンを再起動して、新しいwlan0構成をセットアップします。
sudo service dhcpcd restart
DHCPサーバーの構成(dnsmasq)
DHCPサービスはdnsmasqによって提供されます。
デフォルト構成ファイルには必要ない多くの情報が含まれているので、名前を変更して、簡単に開始します。
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.org
sudo vi /etc/dnsmasq.conf
interface=wlan0 # Use the require wireless interface - usually wlan0
dhcp-range=192.168.8.101,192.168.8.140,255.255.255.0,24h
dhcp-option=option:router,192.168.8.100 →ラスパイACCESSPOINTのIPアドレス
dhcp-option=option:dns-server,192.168.8.100 →ラスパイACCESSPOINTのIPアドレス
wlan0 を、24時間のリース時間で、192.168.8.101 から 192.168.8.140 のIPアドレスを提供します。
dnsmasq.conf の他の記述内容をインターネットなどで調べて追加できますが、基本、上記内容でOKです
他のネットワークデバイス(eth0など)にヘッダーと提供アドレス範囲を含むセクションを追加して、DHCPサービスを提供できます。ただし、domain-needed,bogus-privなどのオプションを下手に付けると名前解決できなくなるので、注意!!
dnsmasq を更新された構成を使用するためにリロードします。
sudo systemctl start dnsmasq
dnsmasq によるDNSキャッシュからの回答をコマンドで確認する
host rp0-bsf-apf (「rp0-bsf-apf」はホスト名)
rp0-bsf-apf has address 127.0.1.1
アクセスポイントホストソフトウェア(hostapd)の構成
初期インストール時、空のファイルの /etc/hostapd/hostapd.conf (hostapd構成ファイル)を編集します。
この構成では、ネットワーク名がNameOfNetworkで、パスフレーズがAardvarkBadgerHedgehogであるチャネル7を使用前提です。
名前とパスワードは引用符で囲まない。パスフレーズの長さは8〜64文字にする必要があります。
5 GHz帯域を使用するには、動作モードをhw_mode = gからhw_mode = aに変更できます。
vi /etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
ssid=NameOfNetwork ← Wifi接続一覧に並ぶ表示内容になります
hw_mode=g
channel=7 ← つながりにくかったら、1~15での変更を検討します。(一般には,1,6,11)
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=AardvarkBadgerHedgehog
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=JP ←COUNTRYコードが設定されていることも注意点
network={
ssid="NameOfNetwork" ←上記で設定したssid
psk="oshigotoxxxx" ←ssidに対応したパスフレーズ
key_mgmt=WPA-PSK
}
次に、この構成ファイルの場所をシステムに伝える必要があります。
sudo vi /etc/default/hostapdDAEMON_CONF="/etc/hostapd/hostsapd.conf" # コメントはずして、左記のようにする
場所が違っていると何時まで経っても、つながりません。
/etc/hostsapd.conf になっているサイトもあるので、注意!!
hostapd を有効にして、起動します。
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd
ステータスを確認します。
sudo systemctl status hostapd
● hostapd.service - Advanced IEEE 802.11 AP and IEEE 802.1X/WPA/WPA2/EAP Authenticator
Loaded: loaded (/lib/systemd/system/hostapd.service; enabled; vendor preset: enabled)
Active: activating (start) since Tue 2020-01-28 20:41:05 JST; 12ms ago
Cntrl PID: 1963 (hostapd)
Tasks: 1 (limit: 4915)
Memory: 128.0K
CGroup: /system.slice/hostapd.service
mq1963 /usr/sbin/hostapd -B -P /run/hostapd.pid -B /etc/hostapd/hostsapd.conf
※ hostapd がエラーになる場合がある。ラズパイの種類やRasbianのバージョンに拠るのか?
一応、hostapd エラーの対応
sudo vi /etc/rc.local で exit 0 の上に以下を追記
service dnsmasq stop
sleep 8
service dnsmasq start
dnsmasqを一旦止めて、数秒まってから再起動しています。
hostapd実行し、指定SSIDでアクセスポイントが立ち上がっているのを確認
sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf
うまく動けば、スマホ、WindowsパソコンからでもSSIDにパスフレーズ指定して、接続を確認できる
ルーティングとマスカレードを追加する
/etc/sysctl.confを編集して、次の行のコメントを解除します。
sudo vi /etc/sysctl.conf
net.ipv4.ip_forward=1
eth0のアウトバウンドトラフィックのマスカレードを追加します。
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptablesルールを保存します。
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
/etc/rc.localを編集し、これを「exit 0」のすぐ上に追加して、ブート時にこれらのルールを再現します。
sudo vi /etc/rc.local
iptables-restore < /etc/iptables.ipv4.nat /usr/sbin/hostapd /etc/hostapd/hostapd.conf
再起動して、ワイヤレスデバイスが有効化されると、ネットワークに接続できるようになる。
reboot
hostapd構成で指定したネットワークSSIDが存在し、指定したパスワードでアクセスできる。
Raspberry PiアクセスポイントでSSHが有効になっている場合は、piアカウントからSSH接続できます。
bridge-utilsのインストール
sudo apt-get install -y bridge-utils
有線LANとWifiインタ-フェイスをブリッジ接続する
sudo vi /etc/network/interfaces
auto br0 eth0 wlan0
iface eth0 inet manual
iface wlan0 inet manual
iface br0 inet manual
bridge_ports wlan0 eth0
bridge_stp off
bridge_maxwait 30
sudo vi /etc/dhcpcd.conf
denyinterfaces wlan0 eth0
interface br0
static ip_address=192.168.8.100/24
static routers=192.168.0.1 ←ブリッジで、インターネット接続を借りるデフォルトゲートウエイとなるルータ
static domain_name_servers=8.8.8.8
DNSMASQによるIPアドレス配布のインターフェイスを wlan0 から br0 に変更する
次の情報をdnsmasq構成ファイルに入力またはコピーして保存します。
sudo vi /etc/dnsmasq.conf
interface=br0 # Use the require wireless interface - usually wlan0 => br0
dhcp-range=192.168.0.121,192.168.0.130,255.255.255.0,24h
アクセスポイントの hostapd.confファイル セットアップは、bridge=br0、interface=wlan0行の下に追加し、ドライバー行を削除またはコメント化します。
sudo vi /etc/hostapd/hostapd.conf
interface=wlan0
bridge=br0 →追加
#driver=nl80211 →削除
ssid=NameOfNetwork
hw_mode=g
channel=7
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=AardvarkBadgerHedgehog
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
hostapd の自動起動の設定をします。
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd
一旦、リブート後、ACCESSPOINTとしても動き出します。スマホからWebブラウザでドライブレコーダーとしてのラズパイライブ映像を確認できます。
まとめ
Webカメラモニタシステムのmotion関係の話をしてきましたが、今回はラズパイにACCESSPOINTを起動させておいて、スマホからACCESSPOINTに接続することで、スマホ上のWebブラウザから、Motioneyeの画面が確認できるようにしたドライブレコーダーの話でした。
運転している映像をスマホから確認して、motioneyeで動態検知、画像、動画を蓄積できました。
そして、前段になりますが、ラズパイをACCESSPOINTにする方法は2つあります。
この方法はRasbianの公式HPに紹介されていた方法を試しながら、はまったところはググりながら動作するところまでたどり着きました。