Google Home に命令を渡して、思い通りに喋らせる方法です。
前回は、Google Home に向かって喋った内容を、Line に送るという方法を実現しました。
■伝言を Google Home に声で伝えれば内容をテキストで Line に送る、という機能を作った。とても簡単。
今回は、その逆。
Google Home にテキストを送り、それを人工合成音で喋ってもらう方法をやります。
・Google Home への入力
・Google Home からの出力
これでこの両方の方法が可能になるので、あとは自由な発想さえあれば組み合わせでなんでもできることになります。
クリエイティブはこんな感じで、技術を習得し、方法を探り、アイデアで実現するという感じで進めます。
普通なら IFTTT で組めば実現しそうなのですが、IFTTT というか Google Assistant 側には Google Home に実行させることのできる組み合わせ「that」がありません。
なので今回は、偉大なる先駆者が作ってくれたリスナーである「google-home-notifier」を利用します。
この google-home-notifier はその名の通り、Google Home に送信した内容を喋ってもらうというだけのものです。
リスナーを実行するのに、node.js に Google Home に実行させる命令をさせる方法をとります。
node.js については、正直、僕も詳しくないです。今回のことがあって初めて触りました。
■node.js(公式・日本語)
https://nodejs.org/ja/
触ってみた感じ、命令を実行させるサービスをシンプルに実現させるようなイメージですね。
今までだと httpd とかわざわざ WEB サーバーを構築させてその内部で動作させていたのを、命令ごとに簡単に実行させているようなイメージです。
僕は自宅内にサーバを構築しているので、その中に node.js を導入します。
サーバがない人は手持ちの PC にもインストールできます。WEBサイトにアクセスすれば、Windows なら Windows 用のダウンロードリンクが見えているはずです。DLしファイルを実行しインストーラーに従えば簡単にインストールできます。以下は、Linux 系の手順です。
sudo apt-get update //アップデートリストを更新
sudo apt-get upgrade //全体アップデート
バージョン管理しやすいように、n package を導入して node.js をインストールします。
sudo apt-get install -y nodejs npm //yum で問い合わせにすべて「y」と返答するオプションを付けてインストール
sudo npm cache clean //npmインストール時に悪さするキャッシュを削除
sudo npm install npm n -g //グローバル領域にインストール。 -g n じゃなく n を -g で実行
sudo n stable //最後に n package を使って node をインストール
node -v、npm -v でインストールされたか確認
これで大前提ができたので、いよいよ google-home-notifier を設置します。
方法は git に書かれています。
npm install google-home-notifier
別手順です。
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash - //bash でエラーを表示なしリダイレクトokでダウンロード
sudo apt-get install nodejs
sudo apt-get install git-core libnss-mdns libavahi-compat-libdnssd-dev //必要なパッケージを準備
git clone https://github.com/noelportugal/google-home-notifier //git からクローン
cd google-home-notifier
npm install //まるっとインストール
依存関係考えずにインストールできました。
おかしい時
★モジュールの場所を調べる
npm root -g
★足りないモジュールある時一気にインストールするモジュール「npm-install-missing」
$ npm install -g npm-install-missing
$ npm-install-missing
vi を利用して example.js を編集します。
書き方は色々ですが、該当部分だけ。
○example.js
deviceName = ‘リビング’ //喋らせるだけなら必要ない(「リビング will say: 」というようにコンソール表示に残る名前)
○google-home-notifier.js
lang = ‘ja’
googlettsaccent = ‘ja’ //発生言語を日本語に変更(カッコよく英語で喋らせる場合は uk か us(アメリカ英語)
deviceAddress = ‘(Google Home のIPアドレス ※サーバではない)’
↑Googlehome のIPアドレスがわからない場合は「Google Home」としても動きそう?(コメント文的に)
ディレクトリ内で実行します。
node example.js
コンソールにも例文が表示されるのですが、以下のようにコマンドを渡します
curl -X POST -d “text=(喋らせたい内容)” http://(GoogleHomeのIP:ポート番号)/google-home-notifier
喋らせてみると分かるのですが、ちょっと抑揚というか声音が今までの Google Home とは違うのですよね。ちょっと大人しいというか。
声のエンジンが普段のものとは違うのかもですね。
自宅サーバで node.js を動かしている人は、サービスを常駐させます。
sudo vi /etc/systemd/system/googlehomenotifier.service
○googlehomenotifier.service
[Unit]
Description=google-home-notifier Server
After=syslog.target network-online.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/node example.js //設置したファイルにパスを通す
Restart=always
RestartSec=10
KillMode=process
WorkingDirectory=/home/pi/google-home-notifier //クローンしたパス
[Install]
WantedBy=multi-user.target
有効にします
sudo systemctl enable googlehomenotifier //常時自動起動設定
sudo systemctl status googlehomenotifier //設定の状態を確認
sudo systemctl start googlehomenotifier //起動
実際のプロセスを確認します
sudo systemctl list-unit-files -t service
sudo systemctl list-unit-files –type=service | grep googlehomenotifier //こっちの方が楽
これで、いつでも GoogleHome に喋らせることができるようになりました。
あとは、IFTTT で作ったスクリプトの最後で、このリスナーに通知してあげるだけです。
実際には自宅サーバで完結させることはできない(グローバルなURLを通さないといけない)ようで面倒なのですが、一通り仕組みは出来上がりました!
コメント