Google Homeを使って、NASに設置したmp3を再生するシステム(05)~RasberryPiからgoogle-home-notifierを使ってGoogle Homeに喋らせる

投稿者: | 2021年02月26日

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)

システム構成全体

システム構成
目標システム

今回やること

前回までで、Windows機から、node.jsおよびgoogle-home-notifierを利用して、Google Homeに発話命令を送ることと、Google HomeにNAS上のmp3を再生する命令を送ることができました。更に、RaspberryPiにNASをマウントすることができましたので、Windows機上で動かしたスクリプトをRaspberryPiに移植する準備が整いました。

今回は、スクリプトをRaspberryPiに移植していきます。

RapberryPiの環境を整える

参考リンク

以下のリンク先の記事「ラズパイZero WにGoogle-Home-Notifierを導入(手順メモ)」を参考にさせていただいております。

https://www.kuro14.net/2017/12/zero-wgoogle-home-notifier.html

SSHでRaspberryPiにログインし、参考リンクの記述に沿って、以下のコマンドを順に実行します。

sudo apt-get install -y nodejs npm
sudo npm cache clean
sudo npm install npm n -g
sudo n lts

次に

sudo apt-get install git
cd ~
git clone https://github.com/noelportugal/google-home-notifier
cd google-home-notifier

そして

 sudo nano package.json

として、package.jsonを開きます。”google-tts-api”で始まる行を

    "google-tts-api": "0.0.6",

と変更します。

ライブラリのインストール

google-home-notifierから参照されているmdnsライブラリがそのままでは動作しませんので、https://github.com/noelportugal/google-home-notifierに記載されている説明に従って、RaspberryPi上で、追加のライブラリをインストールしておきます。以下のコマンドを打ち込みます。

sudo apt-get install git-core libnss-mdns libavahi-compat-libdnssd-dev

そして、package更新のために

npm install

とコマンドを実行します。

としてパッケージの更新をかけてみます。mdnsに関連したモジュールをコンパイルしているような表示とともに、大量のメッセージが画面に表示されます。

よく見ると、大量に出ているのはerrorではなくwarningのようですので、とりあえず完了を待ちます。以下は実際に表示されたwarning表示の一部です。

In file included from ../src/mdns.hpp:11,
                 from ../src/dns_sd.cpp:1:
/home/pi/.cache/node-gyp/10.23.2/include/node/node.h:573:43: warning: cast between incompatible function types from ‘void (*)(v8::Local<v8::Object>)’ to ‘node::addon_register_func’ {aka ‘void (*)(v8::Local<v8::Object>, v8::Local<v8::Value>, void*)’} [-Wcast-function-type]
       (node::addon_register_func) (regfunc),

よく読むと、errorではなくwarningなので、ビルドが完了すればOKにします。

再度、https://github.com/noelportugal/google-home-notifierに記載されている説明に従って、mdns/lib/browser.jsを開くために

sudo nano node_modules/mdns/lib/browser.js

と入力し、

Browser.defaultResolverSequence = [
  rst.DNSServiceResolve(), 'DNSServiceGetAddrInfo' in dns_sd ? rst.DNSServiceGetAddrInfo() : rst.getaddrinfo()
, rst.makeAddressesUnique()
];

の箇所を

Browser.defaultResolverSequence = [
  rst.DNSServiceResolve(), 'DNSServiceGetAddrInfo' in dns_sd ? rst.DNSServiceGetAddrInfo() : rst.getaddrinfo({families:[4]})
, rst.makeAddressesUnique()
];

と変更します。

Raspberry Piにファイルを配置する

開発機で作成したgoogle-home-notifierのディレクトリをRaspberry Piに移動していきます。

開発機の中のgoogle-home-notifierディレクトリにあるファイルのうち、以下のものをNASに移動します。

  • google-home-notifier.js
  • mp3_webserver.js
  • go.js

筆者の環境では、上記ファイルをすべて
\\LANDISK-201129\disk1\music\raspberrypi\google-home-notifier
に配置しました。

RaspberryPi上からはNASはマウントされ、上記ののディレクトリは/mnt/nas_music/raspberrypi/google-home-notifier/のパスでアクセスできます。そのため

cd ~/google-home-notifier
cp /mnt/nas_music/raspberrypi/google-home-notifier/*.js .

とすると、Windows機で作成したjsファイルがRaspberryPiの~/google-home-notifierに移動します。更に、

cd ~/google-home-notifier
node mp3_webserver.js /mnt/nas_music 8091 &

とするとwebserverがバックグラウンドジョブで立ち上がります。

一旦、RaspberryPiのIPアドレスを確認するコマンドを実行します。

ip -4 a show wlan0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'

次に

node go.js xxx.xxx.xxx.xxx 8091 "演奏開始前に喋る内容" example01.mp3

と入力します。

  • xxx.xxx.xx.xxxはRaspberryPiのIPアドレスです。
  • example01.mp3はNASに用意したmp3ファイル名に適宜読み替えてください。

これで、スピーカーが”演奏開始前に喋る内容”を発話した後にexample01.mp3の再生が始まれば成功です。

systemctlによるexpress起動の設定

mp3_webserver.jsがシステム起動後に常時起動するように設定します。

sudo nano /etc/systemd/system/mp3_server.service

と打って、systemdの設定ファイルを作成します。以下のように入力して保存します。

[Unit]
Description=mp3 server for google nest

[Service]
ExecStart=node /home/pi/google-home-notifier/mp3_webserver.js /mnt/nas_music 8091
Restart=always
RestartSec=5
Type=simple
WorkingDirectory=/home/pi/google-home-notifier/

[Install]
WantedBy=multi-user.target

これで、

sudo reboot

として再起動します。

再度SSHでログインし、

cd google-home-notifier
node go.js xxx.xxx.xxx.xxx 8091 "演奏開始前に喋る内容" example01.mp3

と入力し、発話およびmp3再生がされれば成功です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA