背景
グーグルホームを半額セールで購入しましたが
1日1回お天気を教えてくれるだけの存在になってしまいました。
いまのところ活用法がいまいち思い付きません。
そこで、グーグルホームに話しかけるではなく、例えば下記の使い方ができないかなと思い色々試すことにしました
- スマホを持っていない子供に対して帰るコールを音声で送る
- IFTTTと組み合わせて音声でnotificationを送ってもらう
やりたいこと
HTTP経由で任意の文字列を与えたら、自宅にある指定したグーグルホーム端末がその文字を読み上げる
構成
後述しますが、
1.まずはコマンドラインでGoogle Homeを喋らせるコマンドを作り。
2.できたら、HTTP経由でアクセスできるように、nginxでリクエストを受取り
アクセスログを監視するデーモンを作り、GET /command/arg1/arg2 HTTP...のようなログを
command arg1 arg2
というような形式に変換して実行するような環境を考えました
最初にやったこと
GoogleHomeスピーカーに外部からプッシュして自発的に話してもらいます こちらを参考に
https://github.com/noelportugal/google-home-notifier を試しましたが、
どうも自分の環境だとmdnsがインストールできませんでした
google-home-speaker
なので、参考にしつつ自作して対処しました
google-home-speaker
npm 経由でインストール可能で
インストール方法
npm i -g google-home-speaker
使い方
下記のようにすると グーグルホームが"Hello world"と喋ります。
cldというライブラリで言語の自動判別ができるようにしましたので
Google HomeのIPアドレスと喋らせたい文字列を与えるだけでOKです
google-home-speaker 192.168.1.3 "Hello World" # en
google-home-speaker 192.168.1.3 "こんにちは世界" # ja
google-home-speaker 192.168.1.3 "مرحبا العالم" # ar
google-home-speaker 192.168.1.3 "안녕하세요 세계" # kr
altd
次に、nginxのアクセスログを監視して、リクエストパスをコマンド実行するようなデーモンを作りました
altd
インストール方法
npm i -g altd
使い方
下記のようにすると /var/log/nginx/access_logを
google-home-speakerとlsコマンドだけ許可した状況で監視しはじめます
altd /var/log/nginx/access_log -w google-home-speaker,ls
例えば
http://example.com/ls/-lh/%2Ftmp
にアクセスすると
ls -lh /tmp
に変換され
total 680K
-rw-rw-r-- 1 user group 595K Dec 16 11:35 node-build.20171216113508.3603.log
drwxrwxr-x 2 user group 4.0K Dec 16 11:43 npm-10087-2d389e9e
drwxrwxr-x 2 user group 4.0K Dec 16 11:48 npm-10607-a29bdecf
のようなアウトプットがコンソールに表示されます
注意事項
今の構成だと、セキュリティ的な防御はまったくなく、誰でも自宅のグーグルホームにアクセス出来てしまいます。
また、altdもホワイトリスト方式でコマンドを制限してますが、なんか怖いですよね^^;
今後nginxに何か入れて誰でもアクセス出来てしまわないようにしようと思います。
あと、試してないですが みなさんが試されているようにRaspberry Piでも同じ構成で実現できるんじゃないかと思います。
また、下記どちらも何か有りましたらpull requestでFBいただけると幸いです
最後まで読んで頂きありがとうございました。