Firebase Database(以下DB)とgoogle-home-notifierを使ってGoogle Homeの音声通知環境を作ってみた。まぁ、実際できてみるとどうやって使うかなという感じ。
【音声通知サービス プログラムのnodejsサンプル】
これをGoogle Homeがいるホームネットワーク内のどこかのPCで起動しておけば、DBの音声メッセージ用フィールドが更新されると、Google Homeに音声通知が流れる。このDBはREST APIでどこからでも更新できるので、ネットにつながる端末さえあれば、自宅に音声通知できる。あと、この構成の利点はngrokなどのホームネットワークを外部からアクセスできるようにするサービスを利用しなくて良いところか。
// 音声通知サービス const firebase = require('firebase'); const googlehome = require('google-home-notifier'); const conf = require('./config.json'); // Firebase初期化 firebase.initializeApp(conf.firebase); let ref; // goodle homeデバイス定義 googlehome.device(conf.deviceName, conf.language); // 音声通知処理 const notify = snapshot => { const message = snapshot.val(); if (message == '済') { // スルー } else { console.log(message); // 音声通知 googlehome.notify(message, res => { console.log('<< notify OK >>'); console.log(res); // 通知が終わったら音声メッセージ用フィールドをクリアーする ref.set('済'); }); } }; // 音声メッセージ用フィールドの監視設定初期化 const kanshi = () => { // firebase.database().ref()だけでイベントループが始まる。 // ref.offではループは止まらなかった。 ref = firebase.database().ref(conf.dbUrl); ref.on('value', notify, error => errorlog('ref.on', error)); } // 認証及び監視スタート firebase.auth().signInWithEmailAndPassword(conf.email, conf.pwd) .then(() => { console.log('<< auth OK >>'); // 監視スタート kanshi(); }) .catch(error => errorlog('auth', error)); // エラー時処理 const errorlog = (stepLabel, error) => { console.log(`<< ${stepLabel} error >>`); console.log(`code: ${error.code}`); console.log(`message: ${error.message}`); console.log(`以下エラー全部===`); console.log(error); console.log(`================`); process.exit(); }
【config.json】
<XXX>となっているところは利用環境に合わせ設定する。
{ "firebase": { "apiKey": "<API_KEY>", "authDomain": "<PROJECT_ID>.firebaseapp.com", "databaseURL": "https://<DATABASE_NAME>.firebaseio.com" }, "email": "<EMAIL_ADDRESS>", "pwd": "<PASSWORD>", "dbUrl": "<PATH>/message", "deviceName": "Google Home", "language": "ja" }
【主要部分の説明】
- google-home-notifierはホームページの使用例通りにしてみた。
deviceNameだけでGoogle Homeを見つけるには「After “npm install”」の項を実施しないといけないところでハマった。デバイスの検索に成功するとフルのデバイス名が一覧される。Google Homeのデバイス名は”Google-Home-英数字の羅列”となっているようだ。本運用ではdeviceNameを”Google Home”からフルで指定したほうがいいかも。逆に全機にブロードキャスト的に使うこともできそう。 - Firebaseの初期化は公式ガイドのここらへんを見て設定。nodejsで利用するときの読み書きはここらへんかな。nodejsをクライアントとして使う場合の説明が公式ガイドには見当たらなかった。ウェブと同じだろという認識なのかな。認証につてはEメールアドレス方式を利用。理由はこれが一番簡単だったから。
あと、気になったのがFirebase Databaseって一旦ref()を実行するとイベントループを終了させる方法がないのか!API説明には見当たらなかった。process.exit()で終了させるしかなく、ちょっと気持ち悪い。 - 通知後、音声メッセージ用フィールドを”済”にしている理由は、何らかの音声通知した印を用意しないと、再起動すると前回の音声通知を流してしまうため。履歴とったりする場合はまた違う方法があるかもしれない。
リンク及び参考にさせて頂いたURLの作者の皆様に感謝致します。
このページはこれらの動作を保証するものではありません。同様のことをトライされる場合は自己責任でお願致します。