2021年1月にGoogle Homeを購入して、家庭に便利なシステムの構築に励んでいます。とりあえず、第一弾として表題の通り、家庭内要望として、NAS内にあるmp3ファイルを再生するシステムの製作を開始しました。
前回までのまとめ
目標動作
- Google Homeに話しかけると、話しかけた内容に応じた曲を再生する。
- 再生する曲はLAN内に設置されたNASに記憶しているmp3から選択する。
システムの構成
必要な物理デバイスおよび環境
手持ち部品であるGoogle Nest Mini、RaspberryPi Zero W、IOデータNASの組合せで実現することを付帯条件として設定しています。そこで以下の構成を考えました。なお、()は本記事で使用している機種です。
- Google Home (機種:Google Nest Mini)
- RaspberryPi (RaspberryPi Zero W)
- NAS (IOデータlandisk)
- 無線LANとインターネット環境
- 開発用PC (Windows10搭載PC)
システム構成全体
今回やること
前回は、開発機のWindows10を使用して、google-home-notifierを使ってgoogle homeに発話させました。
引続いて、RaspberryPiにスクリプトを送り込んで、動作確認をする必要がありますが、このままでは、Windows機からRaspberryPiに直接ファイルを渡すことができません。RaspberryPiからmicroSDカードを引抜いてファイルを移動させことも可能ですが、今回はLAN環境にあるNASを介してファイル移動を行なってみます。
そのために、NASをRaspberryPiからアクセスできるように設定することを今回の課題とします。
注意
本記事の手法では、あくまで筆者の環境においては、RaspberryPi、ネットワーク機器、NASを常時電源ON状態で目立った異常動作は発生しておりません。しかし、ネットワークエラーが発生した場合やその後エラーから復帰した場合に、NASのマウントが正常に継続されるかなどといった、エラーハンドリングの検証は十分にされていないことをご理解のうえお読みください。
参考資料
以下のリンク先の手順に沿って実施しています。
Raspberry Pi 3 に NAS をマウントさせる
https://qiita.com/fstyle/items/284508cfc33af54d826d
参考資料に沿って実施してみる
NASの状態
今回の環境では、NASのネットワーク名はlandisk-201129となっています。
RaspberryPiにsshでログインし、pingしてみます。
ping landisk-201129.local
でpingが通ることが確認できました。
今回は、ディレクトリパス”//LANDISK-201129.local/disk1/music”の位置にmp3ファイルを置いています。このディレクトリ内にあるmp3をRaspberryPiから見えるようにします。
cifs-utilsのインストール
続いて、参考資料にある通り、cifs-utilsのインストールをします。
sudo apt-get install cifs-utils
とコマンドを打ち込んだところ、既にインストール済と表示されました。
マウント用のディレクトリ作成
次にマウント用のディレクトリを作成し、パーミッションを設定します。
sudo mkdir /mnt/nas_music
sudo chmod 777 /mnt/nas_music
マウントする
次のコマンドを実行します。
sudo mount -t cifs //LANDISK-201129.local/disk1/music /mnt/nas_music -o username=pi,password=,file_mode=0755,dir_mode=0755,iocharset=utf8,uid=1000,gid=1000
さらに、
df
コマンドで、マウントできているかが確認できます。
起動時設定
RaspberryPi起動時に自動的にマウントされるように設定します
sudo raspi-config
と入力し、設定ツールを起動します。以下の画面が表示されます。参考資料とはバージョンが異なるようです。
1 System Options → S6 Network at Bootから <はい>を選択します。
/etc/fstabを使ってのマウントができない
次に起動時の設定を追加します。インターネット上で調べたところ、/etc/fstabに記載を追加し、起動時にNASをマウントする方法を実施している記事がいくつか見つかります。ですが、筆者の環境では、/etc/fstabを使用しても、起動時のNASのマウントができないようでした。
/etc/rc.localでのマウントを試す
sudo nano /etc/rc.local
として、次の記載を追加してみました。
sudo mount -t cifs //LANDISK-201129.local/disk1/music /mnt/nas_music -o username=pi,password=,file_mode=0755,dir_mode=0755,iocharset=utf8,uid=1000,gid=1000
そのうえで、
sudo /etc/rc.local
として、/etc/rc.localを実行すると、マウントに成功します。
再起動し、起動時にマウントできるかを確認します。
sudo reboot
マウントに失敗します。
このあたりは、同様の手順でNASのマウントをしているブログ記事等を探してみましたが、環境によってはうまくいかない場合があるようです。
/etc/rc.localの、マウントコマンドの前にsleep 10などと入れて時間待ちをしてみましたが、それでも起動時にマウントできないようです。
工夫してみる
一工夫してみます。
ping landisk-201129.local
コマンドで、pingが通るのを待ってから、マウントを試行するように変更します。sudo mountコマンドの前に以下を追加してみます。
bash -c 'exit 99' # とりあえず、実行結果$?に正常終了0以外を入れる
echo $?
while [ "$?" != "0" ] # 実行結果$?が0でないとき、すなわちpingが失敗している間はwhileを繰り返し実行する。
do
echo $?
sleep 5 # とりあえず、5秒休み
ping LANDISK-201129.local -c 1 # pingを1回送信する。
done # while文の終了
再起動します。
sudo reboot
マウントできました。