ラズパイ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/hostapd

DAEMON_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に紹介されていた方法を試しながら、はまったところはググりながら動作するところまでたどり着きました。