Raspberry Piでスキャンサーバ構築

我が家では紙の書類を削減すべく、書類はスキャンしてNASに保存するようにしています。しかしそのためだけにPCを立ち上げるのは面倒ですし、書類ごとにフォルダを分けて保存しようとなるとなおさらです。そこで、Raspberry Piを使ってスキャンサーバを構築することにしました。サーバといっても、node-red-dashboard + saneという簡単な構成で、スマホのブラウザ上からボタンを押すことでスキャンと所定のフォルダへの保存を行うことができます。
※我が家のスキャナは無線LAN対応なので当初は無線LAN接続で行っていましたが、スキャンが正常に終了しないということが頻発したので、以下ではRaspberry PiとスキャナはUSB接続を行う構成で記載しています。

# Raspberry Pi Zero Wのセットアップ
[こちら](https://azriton.github.io/2017/11/12/%E3%83%A9%E3%82%BA%E3%83%91%E3%82%A4%E3%81%AEOS%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%82%92%E7%84%BC%E3%81%8F%E3%81%A8%E3%81%8D%E3%81%AFEtcher%E3%81%8C%E4%BE%BF%E5%88%A9%EF%BC%86UI%E3%82%AB%E3%83%83%E3%82%B3%E3%81%84%E3%81%84/)の手順通りにsshファイルとwpa_supplicant.confをmicroSDカード内に作成しておくと、以下のように電源を入れるだけでssh接続できます。
![las2.JPG](https://qiita-image-store.s3.amazonaws.com/0/317078/7451515c-ddc1-974c-597a-260a3ebee3dd.jpeg)
別のraspberry piから
```ping raspberrypi.local```
でIPを確認してssh接続しました。（ホスト名やPWの変更等のセットアップについては特に記載しません。）

# Node-REDインストールとサービス登録
Raspberry Pi Zero WへのNode-REDインストールです。[Node-RED日本ユーザ会：Raspberry Piで実行する](https://nodered.jp/docs/hardware/raspberrypi#upgrading)の「インストール/アップグレード」の手順でインストールします。
```bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered)```

サービスへの登録は以下で行います。
```sudo systemctl enable nodered.service```

# node-red-dashboardのインストール
ユーザ名はpiの前提で記載しますので、適宜置き換えてください。/home/pi/.node-redの中で、
```npm install node-red-dashboard```
を実行してインストールします。

# saneのインストールとスキャン実行スクリプトの準備
私は[こちら](http://concrete5.tomo.ac/others/raspberrypi/raspberrypi%E3%81%A7%E3%82%B9%E3%82%AD%E3%83%A3%E3%83%8A/)を参考にさせていただきました。
```sudo apt-get install sane```

USB接続したのちに
``` scanimage -L```
を実行してプリンタ（スキャナ）のデバイス名を取得します。


我が家のスキャナ（スキャナ付きプリンタ）は Canon MG 7530で、デバイス名はpixma:xxxxxxxx_xxxxxxのようなものです。適宜ご自身のデバイス名に置き換えてください。以下はスキャン結果をimagesディレクトリにimage.jpgというファイル名で出力するスクリプト例です。

``` scan.sh
#!/bin/bash

device=pixma:xxxxxxxx_xxxx
output=/home/pi/images/image.jpg

# scan a document
sudo /usr/bin/scanimage -p --resolution=300 --format=jpeg -d $device > $output
```

# NASのマウントとファイルの保存
NASのマウント方法については[こちら](https://qiita.com/wbh/items/90288f44b62a36d24f0a)に分かりやすくまとまっていますので、参照させていただきます。以下では/mnt/nasにマウントしているものとしますので、適宜読み替えてください。
以下は引数ごとにスキャン結果の保存先を切り替えるスクリプト例です。ファイル名は image_日付.jpgとしています。/mnt/nas下には必要なディレクトリは用意しておいてください。

``` send.sh
#!/bin/bash

if [ $1 = "RECEIPT" ] ; then
  dest="/mnt/nas/receipt/."
elif [ $1 = "SCHOOL" ] ; then
  dest="/mnt/nas/school/."
elif [ $1 = "OTHER" ] ; then
  dest="/mnt/nas/other/."
else
  dest="/mnt/nas/memo/."
fi

# rename and save to wd cloud
file=image_$(date +%Y%m%d%H%M%S).jpg
mv /home/pi/images/image.jpg /home/pi/images/$file
sudo mv /home/pi/images/$file $dest
```

# node-red-dashboardとの連携
あとは以下のbuttonノードで「領収書」「学校」「その他」のようなボタンを用意して、msg.payloadにそれぞれRECEIPT, SCHOOL, OTHERが設定されるようにし、scan.shは引数なし、send.shは引数ありのexecノードを用意しすれば、ボタンを押すだけでNASの所定のディレクトリにスキャン結果を保存することができます。
![scan.JPG](https://qiita-image-store.s3.amazonaws.com/0/317078/505386ae-5b90-f2d7-a42d-bc9333ef8c04.jpeg)


![scan03.JPG](https://qiita-image-store.s3.amazonaws.com/0/317078/84cfd97f-aed8-7b46-d765-1f95b40fcc80.jpeg)

# 参考にしたサイト
[ラズパイ の OS イメージを焼くときは Etcher が 便利 ＆ UI カッコいい](https://azriton.github.io/2017/11/12/%E3%83%A9%E3%82%BA%E3%83%91%E3%82%A4%E3%81%AEOS%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%82%92%E7%84%BC%E3%81%8F%E3%81%A8%E3%81%8D%E3%81%AFEtcher%E3%81%8C%E4%BE%BF%E5%88%A9%EF%BC%86UI%E3%82%AB%E3%83%83%E3%82%B3%E3%81%84%E3%81%84/)
[Raspberry Piで実行する](https://nodered.jp/docs/hardware/raspberrypi#upgrading)
[RaspberryPiでスキャナー](http://concrete5.tomo.ac/others/raspberrypi/raspberrypi%E3%81%A7%E3%82%B9%E3%82%AD%E3%83%A3%E3%83%8A/)
[Raspberry PiにNASをマウントする。](https://qiita.com/wbh/items/90288f44b62a36d24f0a)