Raspberrypiでインターネットから見れる簡易防犯カメラ

#はじめに
[RaspberrypiでLINE通知する簡易防犯カメラ](https://qiita.com/iryonsu/items/e705a274b4f08b303ffd)で書いた通り、動体検知のタイミングだけではなく、気になったときにいつでも撮影できるようにしたいと考えていた。

![Raspberrypi簡易防犯カメラでLINE通知.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532736/b9a1399b-220a-3d07-6d95-32896911157e.jpeg)

当初はオレンジ点線のようにLINEBot経由で撮影させる方法を考えていたのだが、２つ課題があることが分かった。

###①motionが常時ストリーミングしてカメラデバイスを占領しているため、rappistillコマンドを別プロセスで起動できない

```bash
sudo raspistill -w 480 -h 360 test.jpg
mmal: mmal_vc_component_enable: failed to enable component: ENOSPC
mmal: camera component couldn't be enabled
mmal: main: Failed to create camera component
mmal: Failed to run camera app. Please check for firmware updates
```
raspistillコマンドを起動させるには、motionを一時停止させるか、別デバイスを追加する必要がある。

###②LINE Messaging APIで画像や動画を送信するには公開サーバにアップロードが必要
https://developers.line.biz/ja/reference/messaging-api/#wh-image
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532736/e1a3c7f0-8a61-d7c0-dd91-607b3527449c.png)

この２点を解決するにはカメラを追加したり、公開サーバを立てるなどの準備が必要で、今回の”簡易”防犯カメラの趣旨にはそぐわない・・・

ということで方針を変えて、RaspberryPi側に送られてきているストリーミング動画をインターネットから参照させる事にした。公開にはNgrokというトンネリングサービスを利用。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532736/9d2df092-5c7e-c035-16e7-57ab867389fc.png)


___※後述の通り、インターネット公開すると（ベーシック認証をかけますが）URLが分かれば誰でもアクセスできるため、セキュリティに不安のある方はおすすめしません。私は屋外撮影なので気にしませんが室内撮影はやめたほうが良いかと。真面目にやるならWebサーバを立てるべきですが、そこまでやるなら世に出回っているセキュリティシステムを購入したほうが早いかと。___

#準備するもの
・[RaspberrypiでLINE通知する簡易防犯カメラ](https://qiita.com/iryonsu/items/e705a274b4f08b303ffd)で作成した環境
・[Ngrokアカウント](https://ngrok.com/)

#ゴール
RaspberryPiでmotionのストリーミング動画をインターネットから見る

#設定
motionストリームをlocalhost以外からも参照可能に変更し、basic認証を設定

```bash:/etc/motion/motion.conf
# ストリームのLAN開放
stream_localhost off

# ストリーム参照時にBasic認証追加(value:1)
stream_auth_method 1

# ストリーム参照時の認証情報（id、パスワードは変更ください）
stream_authentication id:password

# ストリーム参照時のポート。任意に変更してください
strema_port 8085
```

motion再起動

```bash
sudo service motion restart
```

ngrokを常時起動プロセスとするためscreenをインストール

```bash
sudo apt-get install screen
```

screenを起動

```bash
screen
```

motion.confで設定したstream_portでngrokを起動

```bash
ngrok http 8085

ngrok by @inconshreveable                                                                                                     (Ctrl+C to quit)
                                                                                                                                              
Session Status                online                                                                                                          
Account                       ************** (Plan: Free)                                                                                                 
Version                       2.3.35                                                                                                          
Region                        United States (us)                                                                                              
Web Interface                 http://127.0.0.1:4040                                                                                           
Forwarding                    http://********.ngrok.io -> http://localhost:8085                                                              
Forwarding                    https://********.ngrok.io -> http://localhost:8085                                                              
                                                                                                                                              
Connections                   ttl     opn     rt1     rt5     p50     p90                                                                     
                              167     0       0.00    0.00    1.07    172.52   
```


#結果

https://********.ngrok.ioからアクセスできるようになります。
basic認証を抜けると、インターネット上から参照できるようになりました。画像っぽいですが動画になっています。
![ngrokスクリーンショット.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532736/7a814e7e-5de4-c059-e4e0-a78dc02e834a.jpeg)


ちなみに、以下のようにリクエストがログに残っていきます。

```bash
HTTP Requests                                                                                                                                 
-------------                                                                                                                                 
                                                                                                                                              
GET /                                 200 OK                                                                                                  
GET /                                 200 OK  
```

これで気になったときには家の様子を見られるようになりました。次はmotionのチューニングやraspberrypiの設置について書こうと思います。

#参考
ngrokの使い方
https://parashuto.com/rriver/tools/secure-tunneling-service-ngrok