先日購入したスマートスピーカーは、話しかけないと黙ったままなんですよね。
せっかくなので、時間やセンサの値をトリガにして何かアクションを起こすようにしたい。
そのための第一歩として、まずはラズパイ(RaspberryPi)を使ってスマートスピーカー(Google Nest Mini)を喋らせてみようと思います。
先人たちは2018年くらいにこれをやっていたみたいですね、
参考にした記事が、だいたいこの年代のものが多かったです。
まずはこちらの参考記事に沿ってラズパイをセットアップしていきます。
(参考) Qiita ラズパイでgoogle-home-notifierのセットアップ方法
https://qiita.com/yuppejp/items/db528407d6eed57a6e11
インストール関係が続くので、結構時間がかかりました。
大まかには下記のような流れになります。
1.古いNode.jsをアンインストール
2.パッケージを更新
3.nvmのインストール
4.Node.jsのインストール
5.google-home-notifierのインストール
6.ファイルの修正
7.google-home-notifierの起動
1.古いNode.jsのアンインストール
こちらのコマンドを実行します
sudo apt-get autoremove node.js
処理が終わるまで待ちます。
2.パッケージの更新
下記のコマンドを実行します。
sudo apt-get update
sudo apt-get upgrade
ここが結構時間かかりました。
終わるまでしばらく待ちます。
3.nvmのインストール
まずディレクトリを作成し、gitからクローンします
sudo mkdir ~/.nvm
sudo chmod 777 ~/.nvm
git clone https://github.com/creationix/nvm.git ~/.nvm
nvmを使えるようにします
source ~/.nvm/nvm.sh
nvm --version
この1行目のコマンドは、場合によっては何度か使うかもしれません。(メモ)
起動時に読み込むようにする
vi ~/.bash_profile
上記コマンドを入力すると、ファイルの編集画面が開きます。
その中に下記を入力します。
if [[ -s ~/.nvm/nvm.sh ]]
then source ~/.nvm/nvm.sh
fi
:w .bash_profile
:wq
最後の2行は、viの保存に関するコマンドなので、Linuxに慣れてる人はスルーしてください。
:wqだけだとうまく保存できなかったので、:wで名前を付けて保存した後に終了させています。
保存と終了は下記の記事を参考にしました。
(参考) エンジニアの入り口 すぐわかる!viの保存と終了の方法【Linux基礎知識】
https://eng-entrance.com/linux-vi-save
4.Node.jsのインストール
色々なバージョンがあるので、まずはバージョンの確認をします。
nvm ls-remote
その中で、LTS(安定版)バージョンをインストールします。
2020.10.24時点では、v12.19.0が最新のLTSバージョンでしたので、これをインストールします。
nvm install v12.19.0
Node.jsのインストールとバージョンを確認します。
node --version
npm --version
私の場合は、node.jsとnpmがそれぞれ
v12.19.0
6.14.8
であることが確認できました。
5.google-home-notifierのインストール
こちらも参考記事通りに入力していきます。
sudo apt-get install libavahi-compat-libdnssd-dev
git clone https://github.com/noelportugal/google-home-notifier
cd google-home-notifier
npm install
警告は出るけど、エラーが出なければOKらしい。
6.ファイルの修正
home/pi/ の中に「google-home-notifier」というフォルダが出来ているので、その中のファイルを4つ修正します。
参考資料では修正箇所は1つ目だけでしたが、うまくいかずに色々と調べていると下記のような記事を見つけましたので、合計4箇所修正しました。
もしかすると全ては必要ないかもしれませんが、ダメだったときの参考になるかもしれないので全部残しておきます。
(参考) Qiita google-home-notifierでError: get key failed from googleの対処(2018.12.1版)
https://qiita.com/shocnt/items/3f6a0d1da9910de8f4df
https://stpost.net/se/google-home-talk
example.js の修正
1.IPアドレスの部分を、自分のスマートスピーカーのIPアドレスに変更
2.言語のところを「pl」から「ja」に変更(2か所ある)
package.json の修正
google-tts-apiの部分を「0:0:2」から「0:0:4」に書き換える
google-home-notifier.js の修正
1.IPアドレスの部分を、自分のスマートスピーカーのIPアドレスに変更
2.言語のところを「en」から「ja」に変更(2か所ある)
browser.js の修正
こちらのファイルは、「google-home-notifier/node_modules/mdns/lib/browser.js」にあります。
赤色の文字を該当箇所に追記します。({families[4]})
Browser.defaultResolverSequence = [
rst.DNSServiceResolve(), 'DNSServiceGetAddrInfo' in dns_sd ? rst.DNSServiceGetAddrInfo() : rst.getaddrinfo({families:[4]})
, rst.makeAddressesUnique()
];
7.google-home-notifierの起動
下記コマンドを入力。
node example.js
もし途中でターミナルを閉じたり、ラズパイを再起動した場合は下記のように入力。
source ~/.nvm/nvm.sh
cd google-home-notifier
node example.js
これで、待ち受け状態になります。
ターミナルは開きっぱなしにしておきます。
あとは、もう1つターミナルを開いて下記を入力すれば喋ります。
curl -X POST -d "text=こんにちは" http://192.168.2.113:8091/google-home-notifier
IPアドレスのところは、ラズパイのアドレスになります。
これを同じネットワーク内のPCから入力しても喋るはず。
ですが、私の場合はなぜかWinPCからだと英語しか喋れず。。
色々と調べたところ、日本語の文字コードをS-JISからUTF-8にすれば良いとの情報がありました。
コマンドプロンプトでそんなの設定できるの?と思ったら、出来るようです。
(参考)Qiita Google Homeの喋らせ方をサルにもわかるように説明
https://qiita.com/miyasita1958/items/339c94edbe1d35cf958e
(参考)Qiita Windowsコマンドプロンプト 文字コード設定
https://qiita.com/user0/items/a9116acc7bd7b70ecfb0
まぁ、それでもできなかったんですけどね。
何がダメなんでしょうか・・・。
しかし、ラズパイからだと日本語で喋らせることができたので問題無し!
あとはこれをcronで定期的にコマンドを送ってやれば、定期的にスピーカーから好きな言葉を喋らせることができます!
例えばこんな感じで。
はじめの「* * * * *」は、「分, 時間, 日, 月, 曜日」になっているようです。
曜日の場合は、1=月曜日 ~ 7=日曜日。
スマートスピーカーを活用して、規則正しい生活を目指していきたいですね。
あとはセンサの値をトリガにして喋らせたいなぁ・・・。
これはまた後日挑戦します!